Zum Inhalt springen

PDF 2.0: Was sich geändert hat

Evidence: Standard-backed

PDF 2.0 ist ISO 32000-2. Es ist die erste PDF-Spezifikation, die vollständig in ISO-Verantwortung liegt und nicht mehr bei Adobe. Im Wesentlichen ist sie eine Konsolidierung und Bereinigung von 1.7, keine dramatische Neuerfindung. Diese Seite erklärt, was sich tatsächlich geändert hat, welche Änderungen Sie in der Praxis spüren werden und wie NextPDF standardmäßig die 2.0-Baseline anvisiert, dabei aber weiterhin ältere Dateistruktur schreiben kann, wenn ein Profil dies verlangt.

„PDF 2.0“ klingt, als müsste es ein anderes Format sein. Das ist es nicht. Eine 2.0-Datei verwendet dasselbe Objektmodell, dieselbe Xref und denselben Trailer wie 1.7; dadurch unterschätzt man leicht, was sich tatsächlich geändert hat. Die Änderungen, die Probleme verursachen, sind nicht die schlagzeilenträchtigen Funktionen. Es sind die Verschärfungen: Regeln, die in 1.7 optional waren und jetzt erwartet werden, sowie Funktionen, die stillschweigend entfernt wurden. Ein Dokument, das als 1.7-Datei vollkommen gültig war, kann als 2.0-Datei nicht konform sein, ohne dass ein einziger sichtbarer Unterschied entsteht.

Der andere Grund ist die Richtung. NextPDF ist eine PDF-2.0-Engine. Sobald Sie wissen, was 2.0 erwartet und wo es bewusst von 1.7 abweicht, können Sie nachvollziehen, warum die Engine manche Dinge ablehnt, Schriften strenger einbettet und standardmäßig einen Cross-Reference-Stream statt einer Tabelle verwendet.

  • PDF 2.0 = ISO 32000-2, unter ISO-Verantwortung, baut auf 1.7 auf (ersetzt es nicht).
  • Der Header wird zu %PDF-2.0; ein konformer Writer gibt die Version als 2.0 im Header oder im Katalog /Version an.
  • Der größte Teil der Dateistruktur ist unverändert — dieselben indirekten Objekte, derselbe Trailer, dieselbe startxref/%%EOF-Disziplin.
  • Der Cross-Reference-Stream ist der natürliche 2.0-Standard; die klassische 20-Byte-Tabelle ist weiterhin zulässig und wird von manchen PDF/A-Profilen weiterhin verlangt.
  • 2.0 fügt Dinge hinzu (zum Beispiel reichhaltigere Strukturen für zugehörige Dateien und Dokumentteile, stärkere Verschlüsselung über die AES-256-GCM-Erweiterung) und entfernt Dinge (einige Struktur-Tags; verschärfte Erwartungen an die Schrifteneinbettung; veraltete CJK-Zeichenkollektionen).
  • NextPDF visiert standardmäßig 2.0 an und kann 1.7/1.4-Struktur serialisieren, wenn ein Konformitätsprofil dies erfordert.

Die Version ist eine Entscheidung, die an genau einer Stelle ausgedrückt wird: in der Serialisierungsstrategie.

Pdf20StreamStrategy (src/Writer/Pdf20StreamStrategy.php) schreibt den %PDF-2.0-Header, weist /2.0 als Katalogversion aus und gibt einen komprimierten Cross-Reference-Stream aus. Sie trägt außerdem die 2.0-Schriftenverschärfung direkt mit. Unter dem 2.0-Profil kann sie eine nicht eingebettete Standard-Type-1-Schrift erzwingen, statt nur davor zu warnen, weil der Standard diese Schriften jetzt eingebettet erwartet. Die beiden Tabellenstrategien (Pdf17TableStrategy, Pdf14TableStrategy) existieren genau deshalb, weil manche Profile die ältere Form benötigen. PDF/A-2/-3 schreiben die traditionelle Cross-Reference-Tabelle vor, und PDF/A-1 verbietet zusätzlich Objekt- und Cross-Reference-Streams. Alle drei Strategien implementieren dieselbe PdfSerializationStrategy-Schnittstelle, sodass der Writer darüber identisch bleibt. Nur die Trailer-/Xref-Form ändert sich.

Stärkere Verschlüsselung ist ähnlich bewusst eingebunden. PdfXrefWriter (src/Writer/PdfXrefWriter.php) propagiert ein AES-256-GCM-Opt-in (die ISO/TS-32003-Erweiterung zu 2.0) in das Verschlüsselungs-Dictionary, sodass die ausgegebenen Einträge für Handler-Version und Cipher-Modus zu den tatsächlich erzeugten Bytes passen. Die Engine bewirbt nicht den einen Cipher, um dann einen anderen zu schreiben.

So ist das Gesamtdesign angelegt: 2.0 ist der Standard. Ältere Struktur ist absichtlich erreichbar, niemals zufällig. Und dort, wo 2.0 eine Regel verschärft, kann NextPDF die strengere Linie halten, statt sie stillschweigend aufzuweichen.

  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
Die PDF-Versionslinie, über die NextPDF nachdenkt: PDF 1.7 wurde zur ISO-Basis, ISO 32000-2 ist PDF 2.0, und ISO/TS 32003 erweitert 2.0 um AES-256-GCM-Verschlüsselung.

Die Versionsangabe ist normativ. Spec: ISO 32000-2, §7.5.2 legt fest, dass ein Prozessor, der eine konforme Datei schreibt, die Version als 2.0 identifizieren muss — entweder im Header oder als Katalogeintrag /Version — und dass der Header %PDF-1.n oder %PDF-2.n lautet, gefolgt von einer einzelnen Zeilenende-Markierung. Spec: ISO 32000-2, §7.7.2 ergänzt, dass der Katalog /Version eine frühere Header-Version überschreibt, was genau das ist, was eine inkrementelle Versionsanhebung möglich macht. Evidence: Standard-backed

Dass 2.0 eine Konsolidierung und keine Neufassung ist, zeigt sich an dem, was es beibehält: Der Cross-Reference-Stream (/Type /XRef) ist derselbe Mechanismus, der in PDF 1.5 eingeführt und als 2.0-Standard übernommen wurde ( Spec: ISO 32000-2, §7.5.8 ). Die Struktur aus indirekten Objekten, Trailer und startxref ist gegenüber der Beschreibung auf der vorherigen Seite unverändert.

Die Änderungen, die ins Gewicht fallen, sind Entfernungen und Verschärfungen. Der Standard hält fest, dass sechs Standard-Strukturelemente, die im Standard-Strukturnamensraum von PDF 1.7 vorhanden sind, nicht Teil des Namensraums von PDF 2.0 sind — Art, BlockQuote, TOC, Reference, BibEntry und Code ( Spec: ISO 32000-2, Annex L.3 , wobei die Namensraumunterschiede gemäß Spec: ISO 32000-2, §14.8.6 definiert sind). Außerdem verschärft er die vierzehn Standard-Type-1-Schriften: Während 1.0–1.7 bei diesen Dictionaries fehlende Metrik-Einträge zuließen, streicht 2.0 diese Erlaubnis ( Spec: ISO 32000-2, §9.6.2.1 ). Und er überarbeitet die vordefinierten CJK-Zeichenkollektionen. Zum Beispiel ist Adobe-Korea1 in 2.0 veraltet; Adobe-KR wird hinzugefügt. Keine dieser Änderungen verändert, wie eine bestehende Seite aussieht. Alle können verändern, ob sie konform ist.

KategorieBeispiele (2.0 vs. 1.7)Ändert sich das Erscheinungsbild?Warum es wichtig ist
UnverändertIndirekte Objekte, Trailer, startxref/%%EOF, Xref-Streams2.0 ist dasselbe Objektmodell; die meisten Werkzeuge funktionieren weiterhin
HinzugefügtReichhaltigere Strukturen für zugehörige Dateien / Dokumentteile; AES-256-GCM-Verschlüsselung (ISO/TS 32003)NeinNeue Funktionen, für die Sie sich entscheiden; von älteren Readern gefahrlos ignoriert
VerschärftStandard-14-Schriften werden eingebettet erwartet; Metriken nicht mehr weglassbarNeinEine gültige 1.7-Datei kann eine nicht konforme 2.0-Datei sein
EntferntSechs Strukturelemente des 1.7-Namensraums (Art, BlockQuote, TOC, Reference, BibEntry, Code); veraltete CJK-Kollektionen (zum Beispiel Adobe-Korea1)NeinStillschweigend: Sichtbar signalisiert nichts den Verlust der Konformität

Die PDF-2.0-Änderungen, die ins Gewicht fallen, sind überwiegend unsichtbar: Ergänzungen, für die Sie sich entscheiden, und Verschärfungen/Entfernungen, die die Konformität ändern, ohne auch nur ein einziges gerendertes Pixel zu verändern.

Der einzige sichtbare Unterschied zwischen einer 2.0-Datei und einer 1.7-Datei besteht oft aus zwei Zeilen — dem Header und der Katalogversion — obwohl sich die dahinterstehenden Konformitätsregeln erheblich unterscheiden.

%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

Ein Reader sieht %PDF-2.0 und ein /Version /2.0. Was er nicht sieht — was ein Konformitätsprüfer aber erkennt — ist, dass von dieser Datei nun erwartet wird, ihre Standardschriften einzubetten, und dass sie die von 2.0 entfernten Struktur-Tags nicht verwenden darf. Nur wenige Bytes unterscheiden sich. Die Regeln, die sich unterscheiden, sind es nicht.

Die Falle lautet: „Wir geben PDF 2.0 aus, also sind wir konformer als zuvor.“ %PDF-2.0 zu schreiben, ist eine Behauptung, keine Garantie. Eine Datei kann den 2.0-Header tragen und 2.0 dennoch verletzen — indem sie eine nicht eingebettete Standardschrift referenziert oder eine von 2.0 entfernte Funktion verwendet — genau auf die Weise, die unter 1.7 toleriert wurde. Die Versionsmarkierung setzt den Maßstab, an dem die Datei gemessen wird. Sie sorgt nicht dafür, dass die Datei ihn erfüllt. Der spiegelbildliche Fehler besteht in der Annahme, eine 1.7-Datei funktioniere als 2.0, indem man den Header ändert: Meist wird sie identisch gerendert und scheitert an der Konformität, weil die Verschärfungen real sind, auch wenn sie unsichtbar sind.

Die 2.0-Baseline anzuvisieren bedeutet, dass NextPDF standardmäßig die 2.0-Dateistruktur verwendet und die verschärften Regeln von 2.0 halten kann. Es bedeutet nicht, dass jede optionale 2.0-Funktion implementiert ist oder dass die Ausgabe eines 2.0-Headers ein Dokument gegen PDF/A, PDF/UA oder ein anderes Profil zertifiziert. Das sind eigenständige, strengere Konformitätsziele, die auf die Basisspezifikation aufgesetzt werden, jedes mit eigener Validierung.

Diese Seite ist eine praktische Orientierung zu den Versionsunterschieden, kein vollständiges Änderungsprotokoll von ISO 32000-2 gegenüber 32000-1. Wo eine bestimmte 2.0-Funktion oder -Veraltung das Verhalten der Engine steuert, ist dieses Verhalten an die jeweilige Klausel gebunden. Diese Seite ordnet die Landschaft ein, statt jeden klauselbezogenen Unterschied aufzuzählen.

Ist PDF 2.0 abwärtskompatibel mit 1.7-Readern? Weitgehend, für die unveränderte Struktur. Neue 2.0-Funktionen sind generell so gestaltet, dass ein älterer Reader ignorieren kann, was er nicht versteht. Aber eine reine 2.0-Funktion wird von einem 1.7-Reader nicht berücksichtigt.

Gewinnt der Header oder der Katalog-/Version? Der Katalog-/Version hat Vorrang, wenn er eine spätere Version als der Header nennt. Das ist es, was es einem inkrementellen Update erlaubt, die Version einer Datei anzuheben, ohne den Header neu zu schreiben.

Warum verwendet NextPDF standardmäßig einen Cross-Reference-Stream und keine Tabelle? Der Cross-Reference-Stream ist der natürliche PDF-2.0-Mechanismus — kompakt und in der Lage, komprimierte Objekte zu indizieren. Die 20-Byte-Tabelle wird weiterhin geschrieben, wenn ein Profil (insbesondere einige PDF/A-Stufen) dies erfordert.

  • PDF 2.0 — die als ISO 32000-2 standardisierte PDF-Spezifikation, die erste Ausgabe unter ISO-Verantwortung statt bei Adobe.
  • ISO 32000-1 — die ISO-Standardisierung von Adobes PDF 1.7; die Basis, auf der PDF 2.0 aufbaut.
  • ISO/TS 32003 — eine technische Spezifikation, die PDF 2.0 um AES-256-GCM-Verschlüsselung (AESV4) erweitert.
  • Katalog-/Version — der Eintrag im Dokumentkatalog, der die PDF-Version angibt; überschreibt den Header, wenn er eine spätere Version nennt.
  • Cross-Reference-Stream — der Cross-Reference-Mechanismus von PDF 1.5+ / 2.0 (/Type /XRef); der Standard von NextPDF, wobei die klassische Tabelle für ältere Profile weiterhin verfügbar ist.
  • Verschärfung — eine Regel, die in 1.7 optional oder erlaubt war und in 2.0 erwartet oder verlangt wird und damit die Konformität ändert, ohne das Erscheinungsbild zu ändern.