Pular para o conteúdo

PDF 2.0: o que mudou

Evidence: Standard-backed

PDF 2.0 é a ISO 32000-2. É a primeira especificação PDF de propriedade integral da ISO, e não da Adobe. Trata-se, acima de tudo, de uma consolidação e limpeza da 1.7, não de uma reinvenção drástica. Esta página explica o que de fato mudou, quais dessas mudanças você vai sentir na prática e como o NextPDF adota a base 2.0 por padrão, mas ainda consegue escrever a estrutura de arquivo mais antiga quando um perfil exige isso.

“PDF 2.0” soa como se devesse ser um formato diferente. Não é. Um arquivo 2.0 usa o mesmo modelo de objetos, xref e trailer que a 1.7, o que facilita subestimar as mudanças reais. As mudanças que causam problemas não são os recursos de destaque. São os enrijecimentos: regras que eram opcionais na 1.7 e agora são esperadas, e recursos que foram discretamente removidos. Um documento que era um arquivo 1.7 perfeitamente válido pode se tornar um arquivo 2.0 não conforme sem uma única diferença visível.

O outro motivo pelo qual isso importa é a direção. O NextPDF é um motor PDF 2.0. Depois que você entende o que a 2.0 espera e onde ela difere deliberadamente da 1.7, fica mais fácil raciocinar sobre por que o motor recusa algumas coisas, incorpora fontes de forma mais rigorosa e usa, por padrão, um stream de referência cruzada em vez de uma tabela.

  • PDF 2.0 = ISO 32000-2, de propriedade da ISO, baseada na 1.7 (sem substituí-la).
  • O cabeçalho passa a ser %PDF-2.0; um escritor conforme declara a versão como 2.0 no cabeçalho ou no /Version do catálogo.
  • A maior parte da estrutura do arquivo permanece inalterada — os mesmos objetos indiretos, o mesmo trailer, a mesma disciplina de startxref/%%EOF.
  • O stream de referência cruzada é o padrão natural da 2.0; a clássica tabela de 20 bytes continua válida e ainda é exigida por alguns perfis PDF/A.
  • A 2.0 adiciona elementos (por exemplo, estrutura mais rica de arquivos associados e de partes do documento, criptografia mais forte por meio da extensão AES-256-GCM) e remove outros (algumas tags de estrutura; expectativas mais rigorosas de incorporação de fontes; coleções de caracteres CJK descontinuadas).
  • O NextPDF adota a 2.0 como alvo por padrão e consegue serializar a estrutura 1.7/1.4 quando um perfil de conformidade exige isso.

A versão é uma decisão, expressa em um único ponto: a estratégia de serialização.

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) escreve o cabeçalho %PDF-2.0, informa /2.0 como a versão do catálogo e emite um stream de referência cruzada comprimido. Ela também aplica diretamente o enrijecimento de fontes da 2.0. No perfil 2.0, ela pode impor uma regra contra uma fonte Type 1 padrão não incorporada, em vez de apenas emitir um aviso, porque o padrão agora espera que essas fontes sejam incorporadas. As duas estratégias de tabela (Pdf17TableStrategy, Pdf14TableStrategy) existem justamente porque alguns perfis precisam do formato mais antigo. PDF/A-2/-3 exigem a tabela tradicional de referência cruzada, e PDF/A-1 ainda proíbe streams de objetos e de referência cruzada. Todas as três estratégias implementam a única interface PdfSerializationStrategy, de modo que o escritor permanece idêntico acima dessa fronteira. Apenas o formato de trailer/xref muda.

A criptografia mais forte é conectada com a mesma intencionalidade. O PdfXrefWriter (src/Writer/PdfXrefWriter.php) propaga uma opção de adesão ao AES-256-GCM (a extensão ISO/TS 32003 da 2.0) para o dicionário de criptografia, de modo que a versão do handler e as entradas de modo de cifra emitidas correspondam aos bytes realmente produzidos. O motor não anuncia uma cifra e escreve outra.

O desenho geral é este: a 2.0 é o padrão; a estrutura mais antiga é acessível de propósito, nunca por acidente; e, onde a 2.0 enrijece uma regra, o NextPDF consegue manter o critério mais rigoroso em vez de relaxá-lo silenciosamente.

  1. Step 1 of 3: ISO 32000-1 PDF 1.7 — the Adobe-authored base, adopted by ISO
  2. Step 2 of 3: ISO 32000-2 PDF 2.0 — ISO-owned consolidation, tightening, and additions
  3. Step 3 of 3: ISO/TS 32003 AES-256-GCM (AESV4) — an encryption extension to PDF 2.0
A linhagem de versões do PDF sobre a qual o NextPDF raciocina: a PDF 1.7 tornou-se a base ISO, a ISO 32000-2 é a PDF 2.0 e a ISO/TS 32003 estende a 2.0 com criptografia AES-256-GCM.

A declaração da versão é normativa. Spec: ISO 32000-2, §7.5.2 estabelece que um processador que escreve um arquivo conforme deve identificar a versão — seja no cabeçalho, seja como a entrada /Version do catálogo — como 2.0, e que o cabeçalho é %PDF-1.n ou %PDF-2.n, seguido de um único marcador de fim de linha. Spec: ISO 32000-2, §7.7.2 acrescenta que o /Version do catálogo prevalece sobre uma versão de cabeçalho anterior, o que é exatamente o que torna possível um incremento de versão. Evidence: Standard-backed

O fato de a 2.0 ser uma consolidação, e não uma reescrita, aparece naquilo que ela mantém: o stream de referência cruzada (/Type /XRef) é o mesmo mecanismo introduzido no PDF 1.5 e mantido como padrão da 2.0 ( Spec: ISO 32000-2, §7.5.8 ). A estrutura de objetos indiretos, trailer e startxref permanece inalterada em relação à descrição da página anterior.

As mudanças que importam são remoções e enrijecimentos. O padrão registra que seis elementos de estrutura padrão presentes no namespace de estrutura padrão do PDF 1.7 não fazem parte do namespace do PDF 2.0 — Art, BlockQuote, TOC, Reference, BibEntry e Code ( Spec: ISO 32000-2, Annex L.3 , com as diferenças de namespace definidas conforme a Spec: ISO 32000-2, §14.8.6 ). Ele também enrijece as quatorze fontes Type 1 padrão: onde a 1.0–1.7 permitia que seus dicionários omitissem as entradas de métricas, a 2.0 encerra essa permissão ( Spec: ISO 32000-2, §9.6.2.1 ). E revisa as coleções de caracteres CJK predefinidas. Por exemplo, a Adobe-Korea1 está descontinuada na 2.0. A Adobe-KR é adicionada. Nenhuma dessas mudanças altera a aparência de uma página existente. Todas elas podem alterar se ela está em conformidade.

CategoriaExemplos (2.0 vs. 1.7)Muda a aparência?Por que importa
InalteradoObjetos indiretos, trailer, startxref/%%EOF, streams de xrefA 2.0 usa o mesmo modelo de objetos; a maior parte das ferramentas continua valendo
AdicionadoEstrutura mais rica de arquivos associados / partes do documento; criptografia AES-256-GCM (ISO/TS 32003)NãoNovo recurso ao qual você adere; ignorado com segurança por leitores mais antigos
EnrijecidoEspera-se que as fontes Standard-14 estejam incorporadas; as métricas não podem mais ser omitidasNãoUm arquivo 1.7 válido pode ser um arquivo 2.0 não conforme
RemovidoSeis elementos de estrutura do namespace 1.7 (Art, BlockQuote, TOC, Reference, BibEntry, Code); coleções CJK descontinuadas (por exemplo, Adobe-Korea1)NãoSilencioso: nada visível sinaliza a conformidade perdida

As mudanças do PDF 2.0 que importam são predominantemente invisíveis: adições às quais você adere, além de tightenings/removals que alteram a conformidade sem alterar um único pixel renderizado.

A única diferença visível entre um arquivo 2.0 e um arquivo 1.7, muitas vezes, está em duas linhas — o cabeçalho e a versão do catálogo —, ainda que as regras de conformidade por trás delas sejam substancialmente diferentes.

%PDF-2.0 % was %PDF-1.7
...
1 0 obj
<< /Type /Catalog /Version /2.0 % catalog states 2.0; overrides header if later
/Pages 2 0 R >>
endobj
...
% Cross-reference STREAM is the 2.0 default (was often a 20-byte table)
99 0 obj
<< /Type /XRef /Size 100 /W [1 2 2] /Filter /FlateDecode /Root 1 0 R >>
stream
<binary xref entries>
endstream
endobj
startxref
12345
%%EOF

Um leitor vê %PDF-2.0 e um /Version /2.0. O que ele não vê — e o que um verificador de conformidade vê — é que agora se espera que esse arquivo incorpore as fontes padrão e não use as tags de estrutura que a 2.0 removeu. Os bytes que diferem são poucos. As regras que diferem não são.

A armadilha é “geramos PDF 2.0, então somos mais conformes do que antes.” Escrever %PDF-2.0 é uma afirmação, não uma garantia. Um arquivo pode trazer o cabeçalho 2.0 e ainda assim violar a 2.0 — referenciando uma fonte padrão não incorporada ou usando um recurso que a 2.0 removeu — exatamente da forma que era tolerada na 1.7. O marcador de versão eleva o critério pelo qual o arquivo é avaliado. Ele não eleva o arquivo acima desse critério. O erro inverso é supor que um arquivo 1.7 passa a funcionar como 2.0 ao trocar o cabeçalho: em geral, ele é renderizado de forma idêntica e falha na conformidade, porque os enrijecimentos são reais, ainda que invisíveis.

Ter a base 2.0 como alvo significa que o NextPDF usa, por padrão, a estrutura de arquivo 2.0 e consegue manter as regras mais rigorosas da 2.0. Isso não significa que todo recurso opcional da 2.0 esteja implementado, nem que emitir um cabeçalho 2.0 certifique um documento em relação a PDF/A, PDF/UA ou qualquer outro perfil. Esses são alvos de conformidade separados e mais rigorosos, sobrepostos à especificação base, cada um com a própria validação.

Esta página é uma orientação prática sobre as diferenças entre as versões, não um registro exaustivo das mudanças da ISO 32000-2 em relação à 32000-1. Quando um recurso específico da 2.0 ou uma descontinuação rege o comportamento do motor, esse comportamento é ancorado em sua própria cláusula. Esta página mapeia o panorama em vez de enumerar cada diferença em nível de cláusula.

A PDF 2.0 é retrocompatível com leitores 1.7? Em grande parte, para a estrutura inalterada. Os novos recursos da 2.0 costumam ser projetados de modo que um leitor mais antigo possa ignorar o que não entende. Mas um recurso exclusivo da 2.0 não será respeitado por um leitor 1.7.

O cabeçalho ou o /Version do catálogo prevalece? O /Version do catálogo tem precedência quando indica uma versão posterior à do cabeçalho. É isso que permite que uma atualização incremental eleve a versão de um arquivo sem reescrever o cabeçalho.

Por que o NextPDF usa, por padrão, um stream de referência cruzada, e não uma tabela? O stream de referência cruzada é o mecanismo natural do PDF 2.0 — compacto e capaz de indexar objetos comprimidos. A tabela de 20 bytes ainda é escrita quando um perfil (notadamente alguns níveis de PDF/A) exige isso.

  • O que um PDF realmente é — o modelo de objetos e o xref que o PDF 2.0 mantém da 1.7.
  • O panorama dos padrões — onde a ISO 32000-2 se posiciona entre os padrões que o NextPDF acompanha e como uma cláusula se torna comportamento.
  • Fontes: a parte difícil — o enrijecimento da incorporação de fontes é uma das mudanças da 2.0 que você de fato sente.
  • PDF 2.0 — a especificação PDF padronizada como ISO 32000-2, a primeira edição de propriedade da ISO, e não da Adobe.
  • ISO 32000-1 — a padronização ISO do PDF 1.7 da Adobe; a base sobre a qual o PDF 2.0 se constrói.
  • ISO/TS 32003 — uma especificação técnica que estende o PDF 2.0 com criptografia AES-256-GCM (AESV4).
  • /Version do catálogo — a entrada do catálogo do documento que declara a versão do PDF; prevalece sobre o cabeçalho quando nomeia uma versão posterior.
  • Stream de referência cruzada — o mecanismo de referência cruzada do PDF 1.5+ / 2.0 (/Type /XRef); é o padrão do NextPDF, com a tabela clássica ainda disponível para perfis mais antigos.
  • Enrijecimento — uma regra que era opcional ou permitida na 1.7 e passa a ser esperada ou exigida na 2.0, alterando a conformidade sem alterar a aparência.