🔬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.