Coding · PDF-Grundlagen

PDF-Aufbau aus Coding-Perspektive

Eine PDF-Datei ist von außen ein fertiges Dokument – von innen ein präzise spezifiziertes Format aus Objekten, Streams und Verweisen. Dieser Artikel zeigt, was sich hinter den Bytes verbirgt: vier Bestandteile, acht Objekttypen und ein klar definiertes Verweis-System. Die Coding-Sicht ist die Grundlage für alles, was später folgt – inklusive Tags und Barrierefreiheit.

  • 10 Minuten Lesezeit
  • Stand: Mai 2026

Was eine PDF-Datei wirklich ist

Ein PDF – kurz für Portable Document Format – ist auf Datei-Ebene ein hybrides Format: Der äußere Rahmen ist eine textbasierte, lesbare Syntax. Eingebettet darin liegen Streams – häufig komprimierte oder binär kodierte Datenblöcke für Schriften, Bilder oder Seiteninhalte. Ein PDF lässt sich mit einem Texteditor öffnen und in Teilen lesen, auch wenn die Streams selbst nur mit Decoder verständlich sind.

Standardisiert ist das Format als ISO 32000. Die aktuelle Fassung ist ISO 32000-2:2020(PDF 2.0). Die ältere, weiter verbreitete ISO 32000-1:2008(PDF 1.7) wird in der Praxis nach wie vor häufig verwendet. Beide Spezifikationen sind heute frei zugänglich – die PDF Association veröffentlicht sie als freely available.

Die vier Bestandteile einer PDF-Datei

Jede PDF-Datei hat denselben groben Aufbau – vier Abschnitte, von oben nach unten gelesen:

Aufbau einer PDF-Datei in vier Abschnitten Vertikal gestapelte Darstellung: Ganz oben der Header mit der Versionsangabe, darunter der Body als großer Block mit allen Objekten, danach die Cross-Reference-Tabelle als Index, ganz unten der Trailer mit Startverweis und der Markierung EOF. 1 · Header %PDF-2.0 Eine Zeile: Versionsangabe 2 · Body 1 0 obj << /Type /Catalog … >> endobj 2 0 obj << /Type /Pages … >> endobj 3 0 obj << /Type /Page … >> endobj Alle Objekte: Katalog, Seiten, Schriften, Bilder, Streams 3 · Cross-Reference-Tabelle (xref) Byte-Offset jedes Objekts 4 · Trailer + startxref + %%EOF Verweis auf xref, Root-Objekt, Dateigröße
Die vier Abschnitte einer PDF-Datei in physischer Lese-Reihenfolge. Reader starten in der Praxis jedoch am Ende mit %%EOF und arbeiten sich rückwärts: zuerst der Trailer, dann die xref-Tabelle, dann die referenzierten Objekte im Body.

Header

Die ersten Bytes der Datei sind eine Versionsangabe wie %PDF-1.7 oder %PDF-2.0 . Direkt danach folgt üblicherweise eine Zeile mit vier Bytes über dem Wert 128 (binär kodiert), die signalisiert: Diese Datei enthält binäre Daten und darf nicht als reine Textdatei behandelt werden.

Body

Im Body liegen alle Objekte, aus denen die PDF-Datei besteht: der Katalog, der Seitenbaum, die einzelnen Seiten, Schriften, Bilder, Content Streams und vieles mehr. Jedes Objekt hat eine eindeutige Nummer und eine Version (Generation), zusammen die indirekte Referenz.

Cross-Reference-Tabelle (xref)

Die xref-Tabelle ist der Index der Datei: Für jedes indirekte Objekt steht hier der Byte-Offset vom Dateianfang. Damit kann ein Reader gezielt zu einem Objekt springen, ohne die ganze Datei sequenziell zu lesen. In PDF 2.0 ersetzen häufig Cross-Reference-Streams die klassische Tabelle – funktional ist das identisch, nur kompakter und komprimierbar.

Trailer

Der Trailer schließt die Datei ab. Er nennt das Root-Objekt (den Katalog), optional ein Info-Objekt, die Anzahl der Objekte und den Byte-Offset zur xref-Tabelle. Die allerletzten Zeichen einer konformen PDF-Datei sind startxref , der Byte-Offset und %%EOF als Endemarkierung.

Die acht Objekttypen

Alle Inhalte in einer PDF-Datei sind aus acht Grundtypen aufgebaut. Diese Typen sind die Bausteine, aus denen sich der gesamte Body zusammensetzt – Katalog, Seiten, Annotationen, Bilder und Schriften sind am Ende immer Dictionaries , manchmal mit angehängten Streams.

Die acht Objekttypen aus ISO 32000-2
Typ Beispiel Wofür
Boolean true , false Ja/Nein-Werte in Dictionaries
Numeric 42 , -1.75 Ganz- und Fließkommazahlen, Koordinaten, Größen
String (Hallo) , <48616C6C6F> Text, in literaler oder hexadezimaler Form
Name /Type , /Pages Schlüssel in Dictionaries, Bezeichner
Array [0 0 612 792] Geordnete Listen, z. B. MediaBox
Dictionary << /Type /Catalog >> Schlüssel-Wert-Tabellen, das Rückgrat des Formats
Stream << /Length 123 >> stream … endstream Binär-Blöcke: Content, Bilder, Schriften
Null null „Kein Wert"

Der wichtigste dieser Typen ist das Dictionary. Es besteht aus Paaren von Names und Werten, eingerahmt von << … >> . Fast jedes höhere PDF-Konstrukt ist ein Dictionary mit einem /Type -Eintrag, der den Inhalt klassifiziert ( /Catalog , /Pages , /Page , /Font , /StructTreeRoot und so weiter).

Indirekte Objekte und der Verweis-Mechanismus

Objekte im Body sind in der Regel indirekte Objekte – sie haben eine Nummer und können von anderen Stellen referenziert werden. Die Syntax ist einfach:

Indirektes Objekt
1 0 obj << /Type /Catalog    /Pages 2 0 R >> endobj

Die Zahlen 1 0 sind Objekt-Nummer und Generation. Der Eintrag 2 0 R ist eine indirekte Referenz auf das Objekt mit Nummer 2, Generation 0. So entstehen Verweisketten: Der Katalog verweist auf den Seitenbaum, der Seitenbaum auf die einzelnen Seiten, eine Seite auf ihren Content Stream, ihre Schriften, ihre Bilder.

Die Cross-Reference-Tabelle ist das, was diese Referenzen schnell auflösbar macht: Sie speichert für jede Objektnummer den Byte-Offset. Beim Öffnen einer PDF-Datei beginnt ein Reader deshalb fast immer am Ende – liest %%EOF , springt zur durch startxref angegebenen xref-Position und arbeitet sich von dort zu Trailer und Katalog vor.

Der PDF-Objektbaum: vom Trailer zu Inhalt und Ressourcen Hierarchisches Diagramm mit fünf Ebenen. Ganz oben das Trailer-Dictionary als Einstiegspunkt der Datei. Davon zweigen zwei Pfeile ab: einer zum Document Catalog, einer zum Document Information Dictionary mit den Datei-Metadaten. Vom Document Catalog gehen zwei Pfeile ab: einer zum Page Tree, einer zum Document Outline mit den Lesezeichen. Vom Page Tree gehen Pfeile zu Page 1 und Page 2. Von jeder Page wiederum jeweils zwei Pfeile zu Page Contents und Page Resources. Die Backbone-Boxen Trailer, Catalog und Page Tree sind karmin akzentuiert; die anderen Boxen sind weiß mit dunkler Kontur. Trailer Dictionary Document Catalog Document Information Dictionary Page Tree Document Outline (Bookmarks) Page 1 Page 2 Page 1 Contents Page 1 Resources Page 2 Contents Page 2 Resources Backbone: Einstieg + Root + Seitenbaum Weitere referenzierte Objekte
Der PDF-Objektbaum am minimalen Beispiel: Vom Trailer Dictionary am Datei-Ende führt der Weg über den Document Catalog (das Root-Objekt) in den Page Tree , von dort zu den einzelnen Seiten und schließlich zu ihren Contents und Resources. Karmin akzentuiert ist die Backbone-Linie, an der ein Reader sich beim Öffnen der Datei entlanghangelt. Darstellung nach John Whitington: PDF Explained (O’Reilly, 2011).

Content Streams und Resources

Eine einzelne Seite ist ein Dictionary mit dem Typ /Page . Sie verweist auf zwei zentrale Bausteine:

  • /Contents – einen oder mehrere Content Streams. Das sind binäre (meist komprimierte) Blöcke mit der eigentlichen Seitenbeschreibung : kleine Befehle, die sagen, wo Text gezeichnet wird, wo Linien verlaufen, wo Bilder platziert sind.
  • /Resources – ein Dictionary mit allen Mitteln, die der Content Stream braucht: Schriften ( /Font ), Bilder und Formulare ( /XObject ), Farbräume ( /ColorSpace ), Muster ( /Pattern ) und mehr. Sie werden im Content Stream über ihren Resource Name referenziert – etwa /F1 für eine bestimmte Schrift.

Innerhalb eines Content Streams werden Befehle in einer eigenen, sehr kompakten Operator-Syntax verwendet – Text-Operatoren, Pfad-Operatoren, Transformationen. Diese Schicht ist Thema eines eigenen Artikels.

Mini-Content-Stream
% Text-Block: "Hallo" in Schrift F1, 12 pt, an Position (72, 720) BT   /F1 12 Tf   72 720 Td   (Hallo) Tj ET

Dieses Beispiel zeigt das Grundmuster der gesamten PDF-Seitenbeschreibung: Sehr kurze Operatoren, in Postfix-Notation , jeweils einzeln in einer Zeile. BT / ET umrahmen ein Text-Objekt, Tf setzt Schrift und Größe, Td verschiebt die Schreibposition, Tj zeichnet die Zeichenkette.

Wo Barrierefreiheit ins Spiel kommt

Die bisher beschriebene Struktur sagt einem Reader, wie eine Seite aussieht – nicht, was sie bedeutet. Eine Überschrift und ein normaler Absatz sehen im Content Stream praktisch gleich aus: Texte werden mit denselben Operatoren gezeichnet, eine größere Schrift ist nur ein anderer Wert nach Tf . Für rein visuelle Darstellung reicht das.

Damit eine PDF-Datei auch für Screenreader, Suche und Wiederverwendbarkeit funktioniert, ergänzt das Format eine parallele Strukturebene: den Struktur-Baum. Er hängt am Katalog unter dem Schlüssel /StructTreeRoot und ist ein Baum aus Struktur-Elementen – etwa /H1 , /P , /Figure , /Table , /Form oder /Link .

Diese Strukturelemente verweisen über Marked-Content-IDs auf konkrete Bereiche im Content Stream. Im Content Stream selbst werden diese Bereiche durch die Operatoren BDC (Begin Dictionary Content) und EMC (End Marked Content) abgegrenzt. So entsteht die Verbindung zwischen was steht da (Content Stream) und was ist es (Strukturelement im Struktur-Baum).

Mythen-Prüfung

Drei verbreitete Missverständnisse

„Eine PDF-Datei ist im Wesentlichen PostScript." Nicht mehr. Die Content-Stream-Operatoren erinnern an PostScript, aber PDF hat keine Programmierschleifen, keine prozeduralen Konstrukte und kein dynamisches Stack-Verhalten auf Datei-Ebene. Es ist ein deklaratives Format mit einem klar spezifizierten Objekt-Modell.

„Reader lesen die Datei von vorne nach hinten." In der Regel nicht. Reader beginnen am Ende mit %%EOF , lesen rückwärts den Trailer, lokalisieren die xref-Tabelle und springen dann gezielt zu den benötigten Objekten. Genau dieses Random-Access-Modell macht das Format „streamfähig" – ohne dass man die Datei komplett laden müsste.

„Tags und Layout sind das Gleiche." Nein. Die visuelle Darstellung lebt im Content Stream, die semantische Struktur im Struktur-Baum am Katalog. Verbunden sind beide nur über Marked-Content-IDs. Wer Layout fixiert, ohne den Struktur-Baum zu pflegen, erzeugt eine PDF, die optisch funktioniert und für Assistive-Technologie blind bleibt.

Was du daraus mitnimmst

Drei Punkte, mit denen sich die meisten späteren PDF-Themen besser sortieren lassen:

  • PDF ist ein hybrides Format aus Text-Syntax und binären Streams. Die Text-Syntax ist mit jedem Editor sichtbar – wer in die Streams hineinschauen möchte, dekomprimiert sie z. B. mit qpdf --qdf .
  • Alles ist am Ende ein Dictionary. Katalog, Seiten, Schriften, Annotationen, Strukturelemente – immer ein Dictionary, oft mit einem zugehörigen Stream. Dieses Muster ist das wichtigste Werkzeug, um Spec-Stellen schnell zu lesen.
  • Layout und Semantik laufen parallel. Der Content Stream zeichnet die Seite, der Struktur-Baum beschreibt ihre Bedeutung. Beide treffen sich über Marked-Content-IDs. Barrierefreiheit ist die Aufgabe, beide Bäume miteinander in Einklang zu bringen.

Wer diese Grundlagen kennt, kann später deutlich gezielter über Tagging, Content-Stream-Operatoren oder Barrierefreiheitsprüfungen sprechen – statt mit der Datei als „Black Box" zu hantieren.