🧩Objekte: die Bausteine jeder PDF
Alles in einer PDF-Datei – Seiten, Schriften, Bilder, Metadaten – ist aus wenigen Grundtypen gebaut (ISO 32000-1, 7.3). Die Syntax stammt von PostScript, ist aber keine Programmiersprache: es gibt keine Variablen, Schleifen oder Prozeduren.
true false
Die Schlüsselwörter true und false, z. B. /NeedAppearances true.
123 -98 +17 34.5 -.002 4.
Ganzzahlen und Dezimalzahlen mit Punkt. Keine Exponentenschreibweise (1e3 ist ungültig) und kein Hex.
(Hallo \(Welt\)) (Zeile\nZwei) (\101\102)
In runden Klammern; balancierte Klammern sind erlaubt, sonst \(. Escapes \n \r \t \b \f \\ und Oktal \ddd. Strings sind Bytefolgen, keine Unicode-Texte.
<48656C6C6F> <901FA>
Zwei Hex-Ziffern je Byte, Leerraum wird ignoriert. Bei ungerader Anzahl gilt die fehlende letzte Ziffer als 0 (<901FA> = 90 1F A0).
/Type /Page /Lime#20Green
Beginnt mit /, eindeutiger Bezeichner (wie ein Symbol). Sonderzeichen als #xx (seit PDF 1.2). Namen sind Groß-/Kleinschreibungs-sensitiv.
[0 0 595 842] [3 0 R (x) /N]
Geordnete Liste beliebiger Objekte in [ ], auch gemischt und verschachtelt.
<< /Type /Font /BaseFont /Helvetica >>
Schlüssel-Wert-Paare in << >>; Schlüssel sind immer Namen. Ein Eintrag mit Wert null gilt als nicht vorhanden. /Type sagt, was das Dictionary darstellt.
<< /Length 41 /Filter /FlateDecode >> stream …Bytes… endstream
Dictionary + beliebig lange Bytefolge. /Length = Anzahl Bytes, /Filter = Kodierung (FlateDecode = zlib, DCTDecode = JPEG …). Streams sind immer indirekte Objekte.
null
Das Null-Objekt. Eine Referenz auf ein nicht existierendes Objekt wird ebenfalls als null behandelt.
5 0 obj (Inhalt) endobj … /Font 5 0 R …
n g obj … endobj gibt einem Objekt Nummer und Generation. 5 0 R verweist darauf – wie ein Zeiger. Die xref-Tabelle löst die Nummer in einen Byte-Offset auf.
🧪Tokenizer & Parser zum Ausprobieren
✂️Leerraum und Begrenzer
( ) < > [ ] { } / % – sie beenden ein Token. Deshalb ist /Type/Page dasselbe wie /Type /Page.% bis Zeilenende. Ausnahmen mit Bedeutung: %PDF-n.m und %%EOF.