Executando verificação de segurança...
9

💡 Você sabia que dá pra usar JavaScript dentro de um PDF?

Sim! Como muitos pensam, o formato PDF não é 100% estático. Alguns leitores como o Acrobat Reader e navegadores baseados no Chromium conseguem interpretar JavaScript, seguindo uma API oficial da Adobe.

Para comprovar, programei uma mensagem descontraída no rodapé do meu currículo que muda conforme o dia da semana (com direito a um emoji piscando 😉). Você pode testar no link abaixo usando um navegador no computador, como o Chrome ou Edge (infelizmente parece que não foi implementado nos celulares).
🔗 https://refernando.github.io/refernando/curriculo-com-javascript.pdf

thumb

Há pouco conteúdo sobre isso na Internet, então vou fazer uma breve explicação sobre como fazer. Para isso, podemos usar uma biblioteca do npm chamada PDF-LIB, que permite criar ou editar PDFs direto com JavaScript, inclusive adicionando até formulários! No exemplo do meu currículo, usei essa biblioteca para inserir um campo de texto invisível no rodapé da página e embuti um script que mostra uma mensagem personalizada conforme o dia e horário.

const fs = require("fs");
const { PDFDocument } = require("pdf-lib");

(async () => {
  const bytes = fs.readFileSync("base.pdf");
  const pdfDoc = await PDFDocument.load(bytes);

  pdfDoc.addJavaScript("greet", `
    var h = (new Date()).getHours();
    var msg = h < 12 ? 'Bom dia!' : h < 18 ? 'Boa tarde!' : 'Boa noite!';
    app.alert('* ' + msg + ' ;)'); //Alerta simples
  `);

  fs.writeFileSync("pdf-com-js.pdf", await pdfDoc.save());
})();

A mágica acontece com o método addJavaScript(), que injeta um código JS interpretado pelos leitores. Existe uma documentação da API feita pela Adobe que detalha todos os métodos e propriedades existentes nesse contexto, porém grande parte dos recursos só estão disponíveis no Adobe Acrobat, já que o Chromium implementou parcialmente a API.

Além disso, existe uma implementação muito bacana deste recurso, que é o Doom PDF. De forma genial, você pode jogar o game Doom de 1993 diretamente de um PDF pelo navegador. Essa adaptação foi feita por um estudante utilizando o JS e algumas técnicas de renderização, vale a pena conferir!

Carregando publicação patrocinada...
1
1

Hahaha, ficou bem bugado mesmo. É uma funcionalidade pouco explorada, então acredito que não é de interesse implementarem totalmente nos navegadores, tanto é que no Chrome do Android ele nem apareceu o texto.

1