Salta ai contenuti

PDF 2.0: cosa cambia

Evidence: Standard-backed

PDF 2.0 corrisponde a ISO 32000-2. È la prima specifica PDF interamente di proprietà di ISO anziché di Adobe. È soprattutto un consolidamento e una ripulitura di 1.7, non una reinvenzione radicale. Questa pagina chiarisce che cosa è cambiato davvero, quali cambiamenti si avvertono nella pratica e come NextPDF punti per impostazione predefinita alla baseline 2.0, pur potendo scrivere una struttura di file più datata quando un profilo lo richiede.

«PDF 2.0» potrebbe sembrare un formato diverso. Non lo è. Un file 2.0 usa lo stesso modello a oggetti, la stessa xref e lo stesso trailer di 1.7: per questo è facile sottovalutare i cambiamenti reali. A creare problemi non sono le funzionalità di punta, ma gli irrigidimenti: regole che in 1.7 erano facoltative e ora sono attese, e funzionalità che sono state rimosse in modo silenzioso. Un documento che era un file 1.7 perfettamente valido può essere un file 2.0 non conforme senza alcuna differenza visibile.

L’altro motivo per cui questo è importante è la direzione. NextPDF è un motore PDF 2.0. Una volta chiarito che cosa 2.0 si aspetta e dove differisce deliberatamente da 1.7, si può ragionare sul perché il motore rifiuti alcune cose, incorpori i font con maggiore rigore e adotti per impostazione predefinita un flusso di riferimenti incrociati anziché una tabella.

  • PDF 2.0 = ISO 32000-2, di proprietà di ISO, costruito su 1.7, non in sostituzione di 1.7.
  • L’intestazione diventa %PDF-2.0; un writer conforme dichiara la versione come 2.0 nell’intestazione oppure nella voce /Version del catalogo.
  • La maggior parte della struttura del file è invariata — stessi oggetti indiretti, stesso trailer, stesse regole startxref/%%EOF.
  • Il flusso di riferimenti incrociati è il valore predefinito naturale di 2.0; la classica tabella da 20 byte è ancora legale e ancora richiesta da alcuni profili PDF/A.
  • 2.0 aggiunge elementi (per esempio, una struttura più ricca per file associati e parti di documento, una cifratura più forte tramite l’estensione AES-256-GCM) e rimuove elementi (alcuni tag di struttura; aspettative più rigorose sull’incorporamento dei font; collezioni di caratteri CJK deprecate).
  • NextPDF punta per impostazione predefinita a 2.0 e può serializzare la struttura 1.7/1.4 quando un profilo di conformità lo richiede.

La versione è una decisione, espressa in un solo punto: la strategia di serializzazione.

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) scrive l’intestazione %PDF-2.0, dichiara /2.0 come versione del catalogo ed emette un flusso compresso di riferimenti incrociati. Applica inoltre direttamente l’irrigidimento sui font previsto da 2.0. Sotto il profilo 2.0, davanti a un font Type 1 standard non incorporato, può imporre la regola anziché limitarsi ad avvisare, perché lo standard ora si aspetta che quei font siano incorporati. Le due strategie a tabella (Pdf17TableStrategy, Pdf14TableStrategy) esistono proprio perché alcuni profili richiedono la forma più datata. PDF/A-2/-3 impongono la tradizionale tabella di riferimenti incrociati, e PDF/A-1 vieta inoltre i flussi di oggetti e di riferimenti incrociati. Tutte e tre le strategie implementano l’unica interfaccia PdfSerializationStrategy, quindi il writer resta identico al di sopra di quel confine. Cambia solo la forma del trailer/xref.

La cifratura più forte segue la stessa scelta deliberata. PdfXrefWriter (src/Writer/PdfXrefWriter.php) propaga un opt-in AES-256-GCM (l’estensione ISO/TS 32003 a 2.0) nel dizionario di cifratura, in modo che le voci emesse per la versione dell’handler e la modalità del cifrario corrispondano ai byte effettivamente prodotti. Il motore non pubblicizza un cifrario e ne scrive un altro.

L’impostazione complessiva è questa. 2.0 è il valore predefinito. La struttura più datata è raggiungibile di proposito, mai per caso. E dove 2.0 irrigidisce una regola, NextPDF può mantenere la linea più rigorosa anziché allentarla silenziosamente.

  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
Il lignaggio delle versioni PDF su cui ragiona NextPDF: PDF 1.7 è diventato la base ISO, ISO 32000-2 è PDF 2.0 e ISO/TS 32003 estende 2.0 con la cifratura AES-256-GCM.

La dichiarazione della versione è normativa. Spec: ISO 32000-2, §7.5.2 stabilisce che un processore che scrive un file conforme deve identificare la versione — nell’intestazione oppure come voce /Version del catalogo — come 2.0, e che l’intestazione è %PDF-1.n o %PDF-2.n seguita da un singolo marcatore di fine riga. Spec: ISO 32000-2, §7.7.2 aggiunge che la voce /Version del catalogo prevale su una versione precedente dichiarata nell’intestazione, che è esattamente ciò che rende possibile un avanzamento incrementale della versione. Evidence: Standard-backed

Il fatto che 2.0 sia un consolidamento, non una riscrittura, si vede in ciò che mantiene: il flusso di riferimenti incrociati (/Type /XRef) è lo stesso meccanismo introdotto in PDF 1.5 e portato avanti come valore predefinito di 2.0 ( Spec: ISO 32000-2, §7.5.8 ). L’oggetto indiretto, il trailer e la struttura startxref restano invariati rispetto a quanto descritto nella pagina precedente.

I cambiamenti che contano sono rimozioni e irrigidimenti. Lo standard indica che sei elementi di struttura standard presenti nello spazio dei nomi della struttura standard di PDF 1.7 non fanno parte dello spazio dei nomi di PDF 2.0 — Art, BlockQuote, TOC, Reference, BibEntry e Code ( Spec: ISO 32000-2, Annex L.3 , con le differenze di spazio dei nomi definite secondo Spec: ISO 32000-2, §14.8.6 ). Irrigidisce inoltre i quattordici font Type 1 standard: dove 1.0–1.7 consentiva ai loro dizionari di omettere le voci di metriche, 2.0 chiude questa concessione ( Spec: ISO 32000-2, §9.6.2.1 ). Inoltre rivede le collezioni di caratteri CJK predefinite. Per esempio, Adobe-Korea1 è deprecata in 2.0. Adobe-KR è aggiunta. Nessuno di questi aspetti cambia il modo in cui appare una pagina esistente. Tutti possono cambiare il fatto che sia conforme.

CategoriaEsempi (2.0 vs 1.7)Cambia l’aspetto?Perché è importante
InvariatoOggetti indiretti, trailer, startxref/%%EOF, flussi xref2.0 è lo stesso modello a oggetti; la maggior parte degli strumenti resta valida
AggiuntoStruttura più ricca per file associati / parti di documento; cifratura AES-256-GCM (ISO/TS 32003)NoNuove capacità opt-in; ignorate in sicurezza dai lettori più datati
IrrigiditoFont Standard-14 attesi incorporati; metriche non più omissibiliNoUn file 1.7 valido può essere un file 2.0 non conforme
RimossoSei elementi di struttura dello spazio dei nomi 1.7 (Art, BlockQuote, TOC, Reference, BibEntry, Code); collezioni CJK deprecate (per esempio, Adobe-Korea1)NoSilenzioso: nulla di visibile segnala la conformità perduta

I cambiamenti di PDF 2.0 che contano sono per lo più invisibili: aggiunte opt-in e irrigidimenti/rimozioni che cambiano la conformità senza modificare un singolo pixel renderizzato.

L’unica differenza visibile tra un file 2.0 e un file 1.7 è spesso di due righe — l’intestazione e la versione del catalogo — anche se le regole di conformità sottostanti differiscono sostanzialmente.

%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

Un lettore vede %PDF-2.0 e un /Version /2.0. Ciò che non vede — e che un verificatore di conformità vede — è che ora ci si aspetta che questo file incorpori i suoi font standard e che non usi i tag di struttura che 2.0 ha rimosso. I byte che differiscono sono pochi. Le regole, invece, no.

La trappola è «produciamo PDF 2.0, quindi siamo più conformi di prima». Scrivere %PDF-2.0 è un’affermazione, non una garanzia. Un file può portare l’intestazione 2.0 e violare comunque 2.0 — facendo riferimento a un font standard non incorporato, o usando una funzionalità che 2.0 ha rimosso — esattamente in modi tollerati sotto 1.7. Il marcatore di versione alza l’asticella rispetto a cui il file viene misurato. Non solleva il file al di sopra di essa. L’errore speculare è presumere che un file 1.7 possa funzionare come 2.0 cambiando l’intestazione: di solito viene sottoposto a rendering in modo identico e non supera la verifica di conformità, perché gli irrigidimenti sono reali anche se sono invisibili.

Puntare alla baseline 2.0 significa che NextPDF adotta per impostazione predefinita la struttura di file 2.0 e può mantenere le regole più rigorose di 2.0. Ciò non significa che ogni funzionalità 2.0 facoltativa sia implementata, né che emettere un’intestazione 2.0 certifichi un documento rispetto a PDF/A, PDF/UA o qualsiasi altro profilo. Quelli sono obiettivi di conformità separati e più rigorosi, sovrapposti alla specifica di base, ciascuno con una propria validazione.

Questa pagina offre un orientamento pratico alle differenze tra versioni, non un registro esaustivo delle modifiche di ISO 32000-2 rispetto a 32000-1. Quando una specifica funzionalità o deprecazione di 2.0 governa il comportamento del motore, quel comportamento è ancorato alla relativa clausola. Questa pagina mappa il panorama anziché enumerare ogni delta a livello di clausola.

PDF 2.0 è retrocompatibile con i lettori 1.7? In larga misura sì, grazie alla struttura invariata. Le nuove funzionalità 2.0 sono generalmente progettate in modo che un lettore più datato possa ignorare ciò che non comprende. Ma una funzionalità solo 2.0 non sarà applicata da un lettore 1.7.

Vince l’intestazione o la voce /Version del catalogo? La voce /Version del catalogo ha la precedenza quando indica una versione successiva rispetto all’intestazione. È questo che consente a un aggiornamento incrementale di elevare la versione di un file senza riscrivere l’intestazione.

Perché NextPDF adotta per impostazione predefinita un flusso di riferimenti incrociati anziché una tabella? Il flusso di riferimenti incrociati è il meccanismo naturale di PDF 2.0 — compatto e in grado di indicizzare oggetti compressi. La tabella da 20 byte viene ancora scritta quando un profilo (in particolare alcuni livelli PDF/A) la richiede.

  • PDF 2.0 — la specifica PDF standardizzata come ISO 32000-2, la prima edizione di proprietà di ISO anziché di Adobe.
  • ISO 32000-1 — la standardizzazione ISO del PDF 1.7 di Adobe; la base su cui PDF 2.0 è costruito.
  • ISO/TS 32003 — una specifica tecnica che estende PDF 2.0 con la cifratura AES-256-GCM (AESV4).
  • /Version del catalogo — la voce del catalogo del documento che dichiara la versione PDF; prevale sull’intestazione quando nomina una versione successiva.
  • Flusso di riferimenti incrociati — il meccanismo di riferimenti incrociati di PDF 1.5+ / 2.0 (/Type /XRef); il valore predefinito di NextPDF, con la classica tabella ancora disponibile per i profili più datati.
  • Irrigidimento — una regola che era facoltativa o consentita in 1.7 ed è attesa o richiesta in 2.0, cambiando la conformità senza cambiare l’aspetto.