Um einen Text auf die Seite schreiben zu können, müssen wir erst eine Schrift auswählen. Dies geschieht mittels der Anweisung Tf
. Die Anweisung erwartet zwei Parameter:
Es können alle Schriften verwendet werden, die im Fontdictionary aufgelistet sind. Als Parameter muss der Name verwendet werden, der auch im Fontdictionary verwendet wurde. Die Schriftgrösse ist in Point, wie auf dem Computer üblich.
Beispiel:
/F1 10 Tf
Wir verwenden hier die Schrift, welche als /F1
im Fontdictionary steht, in der Schriftgrösse 10pt.
Darzustellende Texte werden in sogenannte Textobjekte eingeschlossen. Das hat nichts mit den normalen PDF-Objekten zu tun, sondern bezeichnet einen Bereich innerhalb einer Seitenbeschreibung, die einen einzelnen Text umfasst. Ein Textobjekt beginnt mit der Anweisung BT
und endet mit der Anweisung ET
. Fürs Erste erstellen wir für jede Zeile (bei Tabellen für jede Zelle) ein Textobjekt.
Das Innere von Textobjekten besteht im einfachsten Fall aus zwei Anweisungen. Eines für die Position des Textes, und eines für den Text selbst.
Die Position des Textes wird mit der Anweisung Td
festgelegt. Dieses platziert den „Cursor“. Dies ist der Punkt ganz links auf der Grundlinie, auf welcher der Text geschrieben werden soll. Die Anweisung verlangt zwei Parameter.
Beispiel:
72 72 Td
Dadurch wird der Cursor ein Zoll vom linken und vom unteren Rand entfernt platziert.
Für die eigentliche Darstellung ist die Anweisung Tj
zuständig. Diese verlangt lediglich einen Parameter, nämlich den darzustellenden Text als String im Zeichensatz der gewählten Schrift. Die Anweisung platziert zudem nach der Textausgabe den Cursor rechts neben das letzte Zeichen auf der Grundlinie. Dadurch kann ein direkt anschliessender Text innerhalb des Textobjekts auch ohne eine Td
Anweisung gesetzt werden.
Beispiel:
(Hallo Welt) Tj
Dadurch wird der Text „Hallo Welt“ geschrieben.
Und jetzt alles zusammen:
/F1 10 Tf BT 72 72 Td (Hallo Welt) Tj ET
Ein Beispiel mit sich ändernder Schriftgrösse:
/F1 10 Tf BT 72 72 Td (Hallo ) Tj /F1 20 Tf (Welt!) Tj ET
Wie man sieht, kann die Schrift auch inmitten des Textobjekts umgestellt werden. Und da die Y-Koordinate die Höhe der Grundlinie angibt, kann man verschiedene Schriftgrössen auf derselben Zeile recht problemlos mischen.
Etwas problematisch sind hier symbolische Schriften, da diese jeweils eine schriftspezifische Zeichenkodierung haben. Die Tj
Anweisung akzeptiert neben normalen Strings aber auch Hexstrings, so dass wir diese verwenden können. Im Hexstring müssen wir einfach die gewünschten Zeichencodes in Hexadezimalschreibweise notieren.
Beispiel:
<2B> Tj
Damit können wir im Grunde bereits beliebige Texte ausgeben. Sobald wir mehr wollen als sehr simple Formatierungen, bekommen wir aber Probleme: Zunächst einmal müssen wir jede Zeile einzeln setzen, und folglich die Worte selbst auf Zeilen aufteilen. Desweiteren ist es nicht möglich, Text automatisch rechtsbündig oder zentriert auszurichten. Um diesen Effekt zu erreichen, müssen wir den linken Rand des Textes verschieben. Sowohl für die Berechnung der Zeilenumbrüche wie auch der Ausrichtung benötigen wir die Breite des dargestellten Textes.
Zum Glück sind die Breiten aller Zeichen der Standardschriften ebenfalls standardisiert. Wir müssen lediglich die Breiten der enthaltenen Zeichen ermitteln und zusammenzählen. Später, wenn wir zusätzliche Schriften einbetten, können wir die Informationen in den Schriftdateien verwenden, um die Breiten der einzelnen Zeichen zu ermitteln.
Im Anhang findet sich eine Liste der Zeichenbreiten.
Vorsicht Umsteiger: Der einfache ASCII-Bindestrich (Code 0x2D) ist in PDF anders als im Postscript Standard für ISO Latin-1!
Diskussion