🔬Byte-Explorer: Aufbau einer PDF-Datei

Eine minimal gültige PDF 1.7 mit einer Seite „Hello World“. Jeder Abschnitt ist anklickbar; alle Offsets werden beim Erzeugen berechnet und von Tests sowie von qpdf --check bestätigt. Die Datei lässt sich herunterladen und in jedem PDF-Betrachter öffnen.

HeaderBinärkommentarBody (Objekte)xrefTrailerstartxref%%EOF
Byte-Offset · Inhalt (Latin-1)Klick auf eine Zeile
Header

Header

Die erste Zeile nennt die PDF-Version (%PDF-1.7). Sie beginnt mit %, ist also formal ein Kommentar. Leser suchen danach am Dateianfang.

Start
0
Ende
8
Länge
9 B
Hex-Ansicht
00000 25 50 44 46 2D 31 2E 37 0A %PDF-1.7↵

📐Regeln, die man in den Bytes sieht

💡 Byte-Offsets zählen ab 0
Der Offset ist die Position des ersten Bytes von 1 0 obj, gezählt ab Dateianfang (Byte 0 = %). Zeilenenden zählen mit – ein LF ist 1 Byte, CR LF sind 2.
✅ xref-Einträge: exakt 20 Bytes
nnnnnnnnnn ggggg n + 2 Bytes Zeilenende (SP LF, SP CR oder CR LF). Feste Länge heißt: Eintrag k steht bei Tabellenstart + 20·k – ein Leser kann direkt hineinspringen.
💡 /Length zählt Stream-Bytes
Nach stream folgt CR LF oder LF, dann genau /Length Bytes. Das Zeilenende vor endstream gehört nicht dazu.
⚠️ Falscher Offset?
Stimmen Offsets nicht, ist die Datei formal defekt. Viele Leser „reparieren“ sie, indem sie die ganze Datei nach obj durchsuchen – deshalb öffnen sich kaputte PDFs oft trotzdem, nur langsamer.