Ir para o conteúdo
5 min de leitura

Como funciona um arquivo PDF por dentro

Um PDF é um conjunto de objetos com uma tabela de referências no fim. Veja a estrutura, o que pesa no arquivo, por que ele cresce depois de editado e como inspecioná-lo.

Um PDF é um conjunto de objetos ligados entre si: páginas, fontes, imagens, textos e metadados, cada um com um número. No fim do arquivo, uma tabela de referências cruzadas (xref) diz em que byte começa cada objeto, e o trailer aponta para o catálogo do documento. Por isso um leitor abre a página 40 sem precisar percorrer as 39 anteriores.

A estrutura em quatro partes

Todo PDF segue a mesma ordem, definida pela especificação ISO 32000. Abra um arquivo em editor de texto puro e você vê o começo dessa organização: um cabeçalho com a versão, os objetos, a tabela de referências e o trailer.

%PDF-1.7
1 0 obj
<< /Type /Catalog /Pages 2 0 R >>
endobj
2 0 obj
<< /Type /Pages /Kids [3 0 R] /Count 1 >>
endobj
...
xref
0 3
...
trailer
<< /Size 3 /Root 1 0 R >>
startxref
...
%%EOF

O exemplo é simplificado, mas o princípio é o mesmo. O objeto 1 é o catálogo, que aponta para a árvore de páginas no objeto 2. O trailer diz qual é a raiz do documento. O %%EOF marca o fim, e o startxref indica onde a tabela começa.

Os objetos que mais pesam

ObjetoO que guardaPeso típico
Catálogo e árvore de páginasOrdem e hierarquia das páginasPouco
PáginaTamanho (MediaBox), rotação e referências ao conteúdoPouco
Fluxo de conteúdo (content stream)Comandos de desenho e de textoVaria com a complexidade da página
FonteGlifos usados, ou a fonte inteira embutidaAlto em documentos com muitas fontes
Imagem (XObject com subtipo Image)Os pixels de fotos e scansQuase sempre o maior
Metadados (Info e XMP)Autor, programa de origem, datasPouco

Na prática, quase todo o peso de um PDF está em duas linhas dessa tabela: fontes e imagens. Os demais objetos são pequenos em comparação.

Como o texto é desenhado

Uma página de texto não guarda a palavra como palavra. Ela guarda um fluxo de comandos que seleciona uma fonte, define o tamanho e posiciona o texto:

BT
/F1 12 Tf
72 700 Td
(Olá, mundo) Tj
ET

/F1 aponta para a fonte no dicionário de recursos da página, 12 Tf define o corpo, 72 700 Td move o cursor para a posição e Tj desenha a sequência de caracteres. Por isso o texto depende da fonte: sem ela, o leitor não sabe que formato dar às letras. O guia sobre fontes embutidas no PDF trata do peso desse pedaço.

Por que o tamanho não é o que você espera

Dois motivos explicam a maior parte das surpresas. O primeiro é a compressão interna: os fluxos de página e de imagem são compactados com Flate, o mesmo algoritmo do ZIP. Um fluxo já compactado não encolhe mais sem ser reescrito, por isso comprimir um PDF que já está compacto dá pouco ganho.

O segundo é o que a especificação chama de atualização incremental. Quando um PDF é editado sem ser reescrito, o programa acrescenta os objetos novos no fim do arquivo, com uma nova tabela de referências, e mantém a versão anterior. Um documento revisado dez vezes pode carregar dez revisões. Reescrever o arquivo inteiro, como faz a compressão do AjustaPDF com o Ghostscript, descarta esse histórico.

Como ver a estrutura por dentro

  1. Confira a integridade com qpdf --check arquivo.pdf. Ele aponta tabelas de referência erradas e objetos fora do lugar.
  2. Gere uma cópia legível com qpdf --qdf --object-streams=disable entrada.pdf saida.pdf. A saída tem os objetos em texto e os fluxos descompactados, o que permite ler cada comando.
  3. Compare o tamanho do original com o da cópia descompactada. A diferença mostra quanto do peso era compactação e quanto era conteúdo.

Quando o arquivo está danificado, o problema costuma estar nessa tabela. O guia PDF corrompido que não abre explica os sintomas mais comuns.

Como as ferramentas mexem nesses objetos

Cada operação mexe em uma parte diferente da estrutura. O juntar PDF copia os objetos de página de um arquivo para outro e reconstrói a árvore de páginas. O girar PDF altera a rotação gravada em cada página, sem tocar no conteúdo. A criptografia do proteger PDF adiciona um dicionário Encrypt ao trailer e cifra os fluxos com AES de 256 bits.

Isso explica por que girar é uma operação quase instantânea e comprimir não é. Girar só escreve um número; comprimir precisa abrir cada imagem, redimensioná-la e recompactá-la.

O que a estrutura não mostra

Olhar o arquivo por dentro não diz se o documento é fiel. Um PDF bem formado pode trazer uma página escaneada torta, uma assinatura inválida ou um campo de autor que você não quer divulgar. Para isso, a estrutura é só o começo da verificação, e o guia metadados do PDF e o que revelam cuida do que fica escondido no arquivo.

Por que o mesmo texto pesa diferente

Dois fatores mudam o peso de um texto: a fonte e a forma como ela foi embutida. Um PDF que embute a fonte inteira leva o alfabeto completo, com acentos e símbolos, mesmo que use só meia dúzia de letras. Um PDF com subconjunto de fonte leva apenas os glifos usados. Em ambos, o leitor usa a fonte do próprio arquivo, por isso o texto fica igual em qualquer computador.

Cabeçalho e versão

A primeira linha do arquivo declara a versão, como %PDF-1.7. A versão indica quais recursos o leitor deve suportar, como criptografia e formatos de imagem, mas não garante que o leitor esteja atualizado. Para as diferenças entre versões, leia o guia versões do PDF 1.4, 1.7 e 2.0.

Atributos herdados: onde mora o tamanho da página

Nem toda página declara tudo. A árvore de páginas pode guardar atributos como MediaBox e Rotate em um nó pai, e cada página herda esses valores quando não os define. Por isso um documento pode mostrar o tamanho certo em uma página e errado em outra: o objeto que define o atributo não é o mesmo. O guia tamanho A4 no PDF trata desse ponto.

Quando a tabela de referências está errada

Se a tabela aponta para o byte errado, o leitor não sabe onde começa cada objeto. Leitores modernos fazem uma varredura: procuram marcas como 1 0 obj no arquivo inteiro e reconstroem a tabela. É por isso que alguns PDFs danificados abrem em um leitor e falham em outro. A reconstrução tem limite: um arquivo truncado no meio perde tudo o que vinha depois do corte.

Para diagnóstico, o qpdf --check separa o que está quebrado do que é apenas estranho. Um aviso sobre a tabela não significa perda de conteúdo; um erro de objeto ausente, sim.

Perguntas frequentes

O que é o xref de um PDF?

É a tabela de referências cruzadas, no fim do arquivo. Ela lista o byte exato em que cada objeto começa, e é isso que permite ao leitor pular direto para qualquer página. Se algum deslocamento estiver errado, o leitor tenta reconstruir a tabela varrendo o arquivo inteiro.

Por que um PDF fica maior depois de editado?

Porque edições são gravadas no fim do arquivo como uma nova revisão, e as versões anteriores continuam dentro dele. Um documento editado muitas vezes acumula objetos antigos. Reescrever o arquivo inteiro, como faz a compressão, descarta essas revisões.

Dá para ler o conteúdo de um PDF num editor de texto?

Só em partes. O cabeçalho e os dicionários são texto simples, mas os fluxos de página e de imagem vêm compactados com Flate e aparecem como bytes ilegíveis. Para ver tudo, o qpdf com a opção --qdf descompacta o arquivo e o deixa legível.

Onde ficam o autor e a data de criação de um PDF?

No dicionário Info do arquivo e, em muitos casos, num bloco de metadados XMP. Quem gera o PDF grava esses campos, e eles acompanham o arquivo por padrão. Remover esses dados exige uma ferramenta de edição de metadados; o AjustaPDF não tem essa função.