MetaWipeAnalisar

O PDF guarda versões antigas do texto?

Pode guardar, sim: um PDF editado por atualização incremental mantém a revisão anterior nos bytes. Veja como contar as revisões com grep, como o texto antigo aparece e como reescrever o arquivo.

Por Publicado em 6 min de leitura

Pode, sim. Um PDF editado por atualização incremental guarda dentro de si a versão anterior do texto e dos campos, e qualquer pessoa com um programa de leitura de bytes consegue encontrá-la. Não é regra para todo arquivo: depende de como a alteração foi gravada e de o PDF ter sido reescrito por inteiro depois. A forma de saber é contar as revisões gravadas no arquivo, e o resto deste texto mostra como.

Por que o PDF deixa o passado para trás

PDF (Portable Document Format) é o formato de documento criado pela Adobe. Ele foi desenhado para aceitar assinaturas e alterações sem reescrever o arquivo inteiro, e é isso que cria o histórico. Quando um programa muda um PDF já existente, pode simplesmente anexar as partes novas no fim, deixando as antigas onde estavam. Esse mecanismo se chama atualização incremental.

Um PDF é feito de objetos (páginas, fontes, textos, o dicionário de informações do documento), seguidos de uma tabela de referências cruzadas, chamada xref, e de um trailer que aponta para ela. Cada revisão termina com a marca %%EOF. Numa atualização incremental, o arquivo ganha o esquema abaixo:

[ revisão 1 ]  objetos originais, xref, trailer ... %%EOF
[ revisão 2 ]  objetos novos (Info 15 0 R), xref nova,
               trailer com /Prev apontando para a xref da revisão 1
               ... %%EOF

O ponteiro /Prev liga uma revisão à anterior. Nada foi apagado de fato: a revisão 1 continua inteira, e o leitor só passa a usar a mais nova.

Como ver as revisões de um PDF

Não é preciso programa especial para a primeira checagem. No Terminal do Mac ou do Linux, ou no WSL do Windows, rode os comandos abaixo. A saída é ilustrativa, com nomes fictícios:

$ grep -a -c "%%EOF" proposta.pdf
2
$ grep -a -o "/Author ([^)]*)" proposta.pdf
/Author (Ana Lima)
/Author (Carlos Souza)

O número de %%EOF é o de revisões gravadas. Na segunda saída, a ordem segue a posição no arquivo: a primeira linha é a mais antiga, e a última é o valor atual de Author. Se o dicionário de informações estiver dentro de um fluxo de objetos compactado, o grep não encontra nada, e isso não prova que o valor sumiu.

Por que o texto da página também sobrevive

Os campos de propriedades, como Title e Producer, são texto simples, por isso aparecem numa busca direta. O conteúdo das páginas costuma vir compactado em fluxos Flate, e a palavra apagada não aparece no grep. Para lê-la, o qpdf gera uma cópia legível do arquivo:

$ qpdf --qdf --object-streams=disable proposta.pdf proposta-legivel.pdf
$ grep -a "Tj" proposta-legivel.pdf
(Valor anterior: R$ 12.400,00) Tj

Uma linha assim, com o valor que foi trocado, é o que um leitor de bytes encontra numa revisão antiga. O mesmo princípio explica por que uma tarja preta não esconde nada, assunto do artigo sobre tarjas em PDF.

Por que apagar no programa não resolve

Apagar um campo no painel de propriedades, ou deixá-lo vazio, grava um valor novo no fim do arquivo. A revisão anterior continua onde estava. O exiftool faz exatamente isso: grava um dicionário novo e vazio, como o formato manda, e a versão anterior fica para trás. O mesmo acontece com a maioria das ferramentas que apenas sobrescrevem campos. O artigo sobre metadados no currículo em PDF mostra a sequência completa com exiftool e strings.

O que uma reescrita completa muda

Reescrever o PDF é gerar um arquivo novo que contém apenas os objetos que a última versão ainda usa. O qpdf faz isso, e a limpeza do MetaWipe também, seguida de uma releitura do resultado. Objeto sem referência não é gravado, e a revisão antiga some junto:

O que você fazO que acontece com a versão antiga
Preenche ou apaga um campo no editorContinua nos bytes, como revisão anterior
Salva um PDF existente com acréscimoContinua no arquivo
Exporta de novo a partir do documento de origemNão existe mais: o arquivo é novo, sem histórico
Reescreve com qpdf ou com a limpeza do MetaWipeDescartada: só os objetos em uso são gravados

Reescrever, porém, não corrige conteúdo. Se um trecho errado estava na última versão, ele continua na última versão. A reescrita tira o passado; o presente precisa ser revisado antes.

O que muda no arquivo depois da reescrita

Uma reescrita completa quase nunca aparece para quem olha a página. O que muda está nos bytes, e três verificações mostram se ela aconteceu. A contagem de %%EOF deve cair para um. A busca pelo valor antigo, com grep, não deve mais encontrar nada. E o arquivo costuma ficar menor, porque as revisões anteriores deixam de ocupar espaço. A redução varia muito e não é garantida: depende de quanto histórico havia e do tamanho da revisão anterior.

Os campos que você deixou com valor continuam aparecendo no leitor de propriedades, porque esse é o valor atual. Se você limpou, eles ficam vazios. O critério de sucesso, porém, não é o campo vazio. É o valor anterior sumir dos bytes, e isso só se confirma com a busca.

Onde isso pesa na prática

Um currículo ajustado várias vezes para vagas diferentes, com o cargo antigo ainda gravado numa revisão anterior, é o caso mais comum. Uma petição em que um trecho foi trocado antes do protocolo deixa o texto original nos bytes, o que é o problema discutido em metadados em petição judicial. Um contrato em que uma cláusula foi negociada e substituída tem o mesmo risco.

Uma ressalva honesta

Nem todo PDF tem histórico. A maioria dos arquivos exportados do Word ou do Google Docs sai numa passada só, com uma revisão. O risco aparece quando o arquivo passou por um editor que acrescenta alterações, ou quando foi assinado, já que a assinatura exige atualização incremental. Para assinados, a ordem certa é limpar antes de assinar, como explica o artigo sobre metadados de PDF assinado digitalmente.

O que fazer antes de enviar

  1. Conte as revisões com grep -a -c "%%EOF". Se o resultado for um, e o arquivo não for linearizado, o histórico incremental não é o problema.
  2. Corrija o conteúdo na fonte e exporte de novo, se houver mais de uma revisão. Reescrever sozinho limpa o histórico, não o texto.
  3. Reescreva o arquivo final com uma ferramenta que gere um PDF novo. A página de remoção de metadados em PDF explica o processo, e a limpeza no MetaWipe faz a reescrita junto com a remoção dos campos.
  4. Confirme depois: rode o grep de novo e leia o arquivo em leitor gratuito de metadados, sem cadastro. Se o valor antigo ainda estiver lá, a reescrita não aconteceu.

Perguntas frequentes

O PDF guarda o texto antigo depois de editado?

Pode guardar, sim. Quando um programa altera um PDF por atualização incremental, ele acrescenta as partes novas no fim do arquivo e deixa a versão anterior intacta, logo antes. Um leitor comum mostra só a última revisão, mas o conteúdo antigo continua nos bytes. Nem todo PDF é assim: depende do programa que gravou a alteração e de o arquivo ter sido reescrito por inteiro depois.

Apagar um campo do PDF apaga o valor anterior?

Não necessariamente. Apagar ou sobrescrever um campo grava um valor novo, ou vazio, no fim do arquivo. O valor original permanece na revisão anterior. Ele só deixa de existir quando o arquivo inteiro é reescrito com os objetos que ainda são usados, como o qpdf faz. Um leitor de propriedades não consegue mostrar essa diferença.

Como saber quantas versões um PDF tem?

Conte as ocorrências da marca %%EOF com grep -a -c. Cada revisão termina com ela, então o número aproxima o total de revisões gravadas. Um arquivo que nunca recebeu acréscimos tem uma. Os PDFs linearizados, preparados para abrir rápido na web, podem ter duas por construção, então confira antes de concluir que houve edição.

Salvar de novo o PDF é o mesmo que reescrevê-lo?

Não. Salvar pode acrescentar a alteração ao fim do arquivo ou gravar tudo de novo, conforme o editor e a opção escolhida. Reescrever significa gerar um arquivo novo só com os objetos em uso. A forma segura de saber é contar as revisões antes e depois: se o número continuar maior que um, o histórico ficou no arquivo.

Quem recebe o PDF consegue ver a versão anterior?

Um leitor de PDF não mostra, mas quem tem o arquivo pode ler os bytes. Os campos de propriedades costumam ser texto simples e aparecem numa busca direta. O texto das páginas costuma estar compactado, então é preciso descompactar o arquivo com o qpdf antes de procurar a palavra. Por isso, a palavra que você apagou pode continuar acessível para quem souber onde olhar.

Continue lendo

Leitura gratuita, sem cadastro.

Analisar