Ir para o conteúdo
4 min de leitura

JavaScript dentro do PDF: o que faz e por que o leitor bloqueia

Para que serve o JavaScript num PDF, onde ele fica no arquivo, por que o leitor pede permissão para rodar e como lidar com um documento desconhecido.

PDF não é só um desenho de páginas. Ele pode carregar código JavaScript que roda dentro do leitor para calcular campos, validar respostas, abrir links ou executar ações ao abrir. Esse recurso existe por um motivo legítimo, e é também a razão de muitos leitores bloquearem ou pedirem confirmação antes de rodar qualquer script.

Para que o JavaScript é usado num PDF

A maior parte dos scripts legítimos está em formulários. Um campo de valor total soma os campos de itens, uma data é validada no formato certo, um CPF é verificado antes de o envio ser liberado. Sem script, cada uma dessas regras precisaria ser feita no sistema que recebe o arquivo.

Outros usos são menos comuns: botões que executam uma ação, menus que mudam a página, e documentos que mostram ou escondem seções conforme uma escolha. Em PDFs de apresentação ou de treinamento, o script pode controlar a navegação. Nenhum desses usos exige que o documento rode código sem aviso; o passo a passo para desligar o script nas preferências está em configurar o leitor de PDF mais seguro.

Onde o script pode ficar dentro do arquivo

Um PDF pode guardar JavaScript em lugares diferentes, e a diferença importa para o risco. Um script pode estar ligado a uma ação de abertura, que roda quando o documento é carregado. Outro pode estar ligado a um campo, rodando quando o valor muda. Há ainda scripts em nível de documento, que ficam disponíveis para toda a sessão.

Onde ficaQuando rodaRisco típico
Ação de abertura (OpenAction)Logo ao abrir o arquivoMaior, porque roda sem clique
Ação de um campo ou botãoQuando o usuário interageMédio, depende do que o script faz
Scripts de documentoEnquanto o arquivo está abertoMédio, o alcance é o documento inteiro
Link com ação de endereçoQuando o usuário clicaDepende do endereço que o link abre

Por que o leitor bloqueia

Um leitor de PDF precisa de um mecanismo para rodar script, e todo mecanismo de execução pode ser abusado. Falhas no próprio leitor, em que um arquivo malicioso leva o programa a fazer algo que não deveria, são o caso clássico. Por isso os leitores costumam oferecer um modo protegido, que restringe o que o arquivo pode tocar, e pedem permissão antes de executar scripts de documentos não confiáveis.

O navegador segue a mesma lógica com mais restrição. Ao abrir um PDF pela web, o visualizador embutido costuma não executar o JavaScript do documento, e o formulário pode perder a lógica de cálculo. Isso não é defeito: é a escolha de quem não quer rodar código de terceiro dentro da aba.

Quando o script é um problema para você

Na maioria das vezes, o script só faz o formulário funcionar. Ele vira problema em três casos. O primeiro é o arquivo de origem desconhecida, que pede para habilitar scripts sem motivo claro (um script é um dos poucos jeitos de um PDF avisar quem o enviou que foi aberto). O segundo é o documento que, depois de aberto, redireciona para outra página ou pede dados que o formulário não deveria pedir. O terceiro é o arquivo que precisa ser arquivado: script em PDF de longo prazo é uma fonte de comportamento imprevisível.

Nesse último caso, o caminho é o PDF/A, que a norma não permite com JavaScript. Ele remove esse tipo de código ao ser convertido, e o resultado é um arquivo que só mostra o conteúdo, sem executar nada.

Como lidar com um PDF que pede para rodar script

Primeiro, pergunte de onde veio o arquivo. Um formulário do órgão que você esperava é diferente de um anexo inesperado. Segundo, não habilite scripts se o motivo não está claro. Terceiro, se o documento precisa funcionar, abra-o no leitor oficial que o emitiu, porque o script costuma ter sido escrito para ele.

Se você é o autor do PDF e não quer que ele tenha script, a forma mais limpa é exportar de novo sem a opção de formulário com cálculo, ou converter para PDF/A. Um arquivo sem script também evita avisos desnecessários no leitor de quem recebe.

Onde o AjustaPDF entra nisso

Para um arquivo que precisa sair sem script, a conversão para PDF/A do AjustaPDF é o caminho, já que o formato proíbe JavaScript e o conversor remove o que ele proíbe. Para documentos de arquivamento, esse é o caminho que o próprio formato sugere. Se o PDF não abre ou se comporta de forma estranha, o reparo de PDF reconstrói a estrutura, mas não garante remover um script de propósito: para isso, use a conversão.

Para entender o que a conversão muda na estrutura, veja o guia sobre PDF/A: o que é e quando usar. Para um arquivo que não abre depois de receber, o guia PDF corrompido que não abre cobre o diagnóstico.

Para os campos que calculam valores sozinhos, veja formulário PDF com cálculo, e para escolher o nível do PDF/A que remove os scripts, PDF/A-1b, 2b e 3b.

Perguntas frequentes

Por que o leitor pergunta se eu confio neste documento?

Porque o PDF contém um script que vai rodar no seu computador. Scripts em PDF podem fazer cálculos de formulário, mas também podem ser usados para explorar falhas do leitor. A pergunta aparece para que você decida se quer executar o código, e a resposta segura, num arquivo de origem desconhecida, é não.

O JavaScript de um PDF roda automaticamente ao abrir?

Pode rodar, se o arquivo tiver uma ação de abertura, chamada OpenAction, que chame um script. Muitos leitores bloqueiam essa execução por padrão ou pedem permissão. No navegador, a execução é mais restrita. Por isso, um script ao abrir não é o único risco; o que importa é o que o leitor deixa rodar.

Dá para tirar o JavaScript de um PDF sem perder os campos?

Em geral, sim, desde que os campos sejam AcroForm simples. Campos que dependem de cálculo por script perdem a lógica quando o JavaScript sai. O PDF/A remove esse tipo de código por regra da norma, mas o resultado precisa ser conferido, porque um formulário com cálculo pode deixar de funcionar.

Como saber se um PDF contém JavaScript?

Não há um botão universal. Alguns leitores mostram um aviso de documento com scripts, e o Acrobat tem ferramentas de inspeção do documento que listam scripts e ações. Abrir o arquivo num editor de texto e procurar por JavaScript ou JS nem sempre encontra, porque o conteúdo pode estar comprimido.