Pular para o conteúdo
PDFLove

o que tem dentro de um arquivo pdf

O que existe de verdade dentro de um arquivo PDF

Abra um PDF num editor de texto e você vai encontrar algo mais próximo de um despejo de banco de dados que de um documento. Quase toda esquisitice que os PDF fazem decorre desse único fato.

01

Objetos, não páginas

Um arquivo PDF é uma coleção numerada de objetos. Cada um é um dicionário, um fluxo de bytes, um vetor, um número ou uma cadeia, e cada um tem um identificador. Os objetos se referem uns aos outros por número: o objeto 3 diz "meu conteúdo está no objeto 47", o objeto 47 diz "minha fonte é o objeto 12".

Um desses objetos é o catálogo, a raiz de tudo. Ele aponta para uma árvore de páginas. A árvore de páginas aponta para objetos de página. Cada objeto de página aponta para um fluxo de conteúdo e para um dicionário dos recursos de que esse fluxo precisa — fontes, imagens, espaços de cor.

Não existe objeto chamado "parágrafo", nem objeto chamado "título". A estrutura para na página. Tudo abaixo disso são instruções de desenho.

Cabeçalho
Uma linha: %PDF-1.7. A versão determina quais recursos um leitor pode esperar.
Corpo
Os objetos numerados. Fontes, imagens, definições de página, fluxos de conteúdo, metadados.
Tabela de referências cruzadas
Um índice de deslocamentos em bytes: o objeto 47 começa no byte 91.204. É assim que um leitor salta direto para a página 900 de um arquivo de 1.000 páginas sem ler as 899 primeiras.
Trailer
Aponta para o catálogo e para onde começa a tabela de referências cruzadas. É a última coisa do arquivo, e é por isso que os leitores abrem um PDF indo primeiro ao fim.

02

O fluxo de conteúdo é uma lista de instruções

Dentro do fluxo de conteúdo de uma página há uma sequência de operadores em notação pós-fixa — os operandos vêm primeiro, depois o comando. `1 0 0 1 72 720 Tm` define uma posição de texto. `/F1 12 Tf` seleciona a fonte F1 em 12 pontos. `(Olá) Tj` desenha a cadeia. `re` constrói um retângulo, `f` o preenche, `Do` pinta um objeto de imagem.

É esse o modelo inteiro: um pintor seguindo ordens, de cima para baixo. A página é o que sobra na tela quando as ordens acabam.

Duas consequências vêm logo em seguida, e juntas explicam muita coisa. A ordem no fluxo é a ordem de desenho, não a ordem de leitura — uma nota de rodapé pode ser desenhada antes do texto que a referencia. E nada no fluxo diz o que qualquer coisa *é*. Um título é texto que por acaso foi desenhado maior.

03

Por que a última parte do arquivo é a que mais importa

A tabela de referências cruzadas é um índice de deslocamentos em bytes, e deslocamentos em bytes são frágeis. Mude qualquer coisa no meio de um PDF e todo deslocamento posterior se move. É por isso que editar um PDF num editor de texto quase sempre o corrompe, e por que um download truncado gera um arquivo que não abre de jeito nenhum ainda que 95% do conteúdo tenha chegado intacto.

É também por isso que reparar é possível e costuma dar certo. Quando um leitor diz que o arquivo está danificado, em geral significa que os deslocamentos estão errados, não que os objetos sumiram. Uma passada de reparo ignora a tabela quebrada, varre o arquivo inteiro procurando qualquer coisa com cara de cabeçalho de objeto e reconstrói o índice a partir do que encontra.

04

Atualizações incrementais: o PDF se lembra

Um PDF pode ser alterado por acréscimo. Em vez de reescrever o arquivo, um gravador adiciona as versões novas dos objetos alterados ao fim, depois adiciona uma nova tabela de referências cruzadas que aponta para elas e se encadeia de volta à antiga. O leitor usa a tabela mais recente, então vê a versão nova.

Os objetos antigos continuam no arquivo. Isso é deliberado — é o que torna as assinaturas digitais verificáveis, porque dá para reconstruir exatamente o que foi assinado. É também um perigo real: uma tarja feita desenhando um retângulo preto deixa o texto por baixo plenamente intacto e extraível, e páginas "apagadas" muitas vezes não estão.

Salvar um PDF do zero, em vez de incrementalmente, descarta o histórico. Achatar também. Se um documento passou por várias rodadas de edição, vale saber disso antes de mandá-lo para fora.

05

O que isso explica

Quase toda reclamação sobre PDF remonta ao modelo. O texto copiado chega embaralhado porque a ordem do fluxo de conteúdo é a ordem de desenho. Os conversores perdem a formatação porque nunca houve estrutura nenhuma a converter — só glifos posicionados. Juntar é rápido e sem perdas porque é renumerar objetos, não redesenhar páginas. Os arquivos continuam teimosamente grandes porque o peso está nos objetos de imagem, e nenhuma quantidade de remoção de texto os toca.

É um formato projetado para garantir que uma página pareça idêntica em todo lugar, e ele consegue isso completamente. O custo é tudo o que depende de saber o que a página significa.

Perguntas

Perguntas relacionadas

Posso abrir um PDF num editor de texto?

Pode, e vale fazer uma vez. Você vai ver o cabeçalho, dicionários legíveis e longos trechos binários onde estão os fluxos comprimidos. O que não deve fazer é salvar — mudar um único byte no meio desloca todos os deslocamentos de referência cruzada seguintes e quebra o arquivo.

Por que um PDF que parece simples é tão grande?

Porque o tamanho mora em objetos que você não vê na página: fontes incorporadas, dados de imagem em resolução de digitalizador e às vezes todo o histórico de edição deixado por salvamentos incrementais. O texto visível costuma ser a menor coisa do arquivo.

Apagar uma página apaga o conteúdo dela?

Depende de como foi apagada. Remover uma página da árvore de páginas e salvar incrementalmente deixa o objeto de página no arquivo. Uma reescrita de verdade descarta tudo o que já não é referenciado. Se o conteúdo é sensível, reescreva ou achate em vez de supor.

Qual é a diferença entre PDF 1.4 e PDF 2.0?

Basicamente recursos acrescentados ao longo do tempo: transparência no 1.4, fluxos de objetos e de referências cruzadas no 1.5, criptografia AES-128 no 1.6, AES-256 e uma especificação limpa no 2.0. O modelo de objetos por baixo não mudou desde 1993, e é por isso que um leitor de hoje ainda abre um arquivo daquela época.