como funciona juntar pdf
Como juntar dois PDFs funciona de verdade
Os dois arquivos têm um objeto numerado 1. Essa única colisão é a razão inteira de juntar ser mais do que concatenar, e explica tudo o que sobrevive e o que não sobrevive à operação.
01
Por que você não pode simplesmente colar um arquivo depois do outro
Um PDF é um conjunto de objetos numerados e um índice de onde cada um começa. Os dois arquivos numeram seus objetos a partir do 1. Os dois têm um catálogo, uma árvore de páginas e um dicionário de fontes chamado F1. Concatene os bytes e você terá dois índices concorrentes descrevendo dois objetos 1 concorrentes, e o leitor que abrir isso verá o que encontrar por último — ou seja, apenas o segundo documento.
Então juntar precisa reescrever. Cada objeto do segundo arquivo é copiado para dentro do primeiro com um número novo, e cada referência dentro desses objetos é reescrita para apontar para os números novos. Uma página que dizia "meu conteúdo está no objeto 12" passa a dizer "meu conteúdo está no objeto 847".
Depois as duas árvores de páginas são emendadas em uma só, uma tabela de referências cruzadas nova é construída com os deslocamentos corretos para tudo, e um novo trailer é escrito apontando para o catálogo sobrevivente.
- 1. Analisar os dois
- Ler os grafos de objetos e as árvores de páginas. Nada é renderizado.
- 2. Renumerar e copiar
- Cada objeto do arquivo B ganha um identificador novo, e cada referência a ele é reescrita.
- 3. Emendar as árvores de páginas
- Construir uma árvore só, na ordem que você pediu. As páginas em si não são tocadas.
- 4. Reconstruir o índice
- Deslocamentos novos para cada objeto, trailer novo, arquivo novo.
02
Por que juntar nunca custa qualidade
Nada é decodificado. Os fluxos de imagem são copiados byte a byte, ainda na codificação em que chegaram. Os fluxos de conteúdo são copiados sem alteração. As fontes são copiadas sem alteração.
Essa é a razão inteira de juntar ser sem perdas e rápido. Juntar 500 páginas é um exercício de contabilidade sobre algumas centenas de milhares de referências entre objetos, e uma máquina moderna faz isso em um ou dois segundos. Compare com comprimir, que precisa decodificar e recodificar cada imagem do arquivo.
Também significa que um arquivo juntado é exatamente tão bom e tão ruim quanto suas entradas. Juntar uma digitalização borrada com uma exportação nítida dá um documento borrado em metade. Nada se normaliza.
03
O que precisa ser consertado no caminho
Renumerar objetos é mecânico. Tudo o que se referia a esses objetos por nome em vez de por número não é.
- Marcadores e sumário
- A árvore de marcadores aponta para objetos de página. Ela precisa ser reconstruída e reapontada, ou os marcadores do segundo documento caem nas páginas do primeiro — ou somem.
- Links internos
- As referências cruzadas e os saltos do sumário são destinos que apontam para objetos de página, e precisam do mesmo remapeamento que os marcadores.
- Campos de formulário
- Os campos são endereçados por nome. Junte duas cópias do mesmo formulário e você fica com dois campos chamados `nome`, que a maioria dos leitores trata como um campo só que preenche os dois. Achatar antes evita isso.
- Recursos duplicados
- Os dois arquivos incorporam a Helvetica como subconjunto sob nomes internos diferentes. Nada consegue provar que os subconjuntos são intercambiáveis, então os dois viajam — e é por isso que um arquivo juntado às vezes pesa mais que a soma das partes.
04
A criptografia precisa sair primeiro
Em um PDF criptografado, os fluxos e as cadeias são criptografados individualmente, com uma chave por objeto derivada da chave de criptografia do arquivo combinada com o número e a geração daquele objeto. O número do objeto faz parte da chave.
O que significa que renumerar um objeto criptografado o invalida silenciosamente. Para juntar, a ferramenta precisa descriptografar primeiro com a chave do arquivo, copiar os objetos em texto claro, renumerá-los e criptografar o resultado sob uma chave nova se a saída tiver de ser protegida. É por isso que uma ferramenta de juntar pede a senha em vez de contorná-la, e por isso a saída sai sem criptografia a menos que você a proteja de novo depois.
05
Dividir é a mesma operação ao contrário
Dividir constrói um arquivo novo contendo apenas as páginas que você pediu, mais todos os objetos que essas páginas alcançam: seus fluxos de conteúdo, suas fontes, suas imagens, e nada mais. É um percurso de grafo a partir de um conjunto de raízes.
É por isso que dividir ao meio um documento de 100 páginas raramente dá dois arquivos com metade do tamanho. Se uma fonte ou um logotipo é usado em páginas espalhadas pelo documento, as duas metades precisam da própria cópia. Recursos compartilhados são duplicados, não divididos.