Vertikale Schreibrichtung

Chinesisch, Japanisch und Koreanisch schreibt man traditionell in Kolonnen von oben nach unten, wobei die Kolonnen von Rechts nach Links angeordnet werden. PDF bietet hierfür einen entsprechenden Modus an. Dabei wird logischerweise eine vertikale Grundlinie verwendet. Diese verläuft mittig durch die Kolonne. Die Kolonnenbreite und der Kolonnenabstand sind beide grundsätzlich identisch mit der gewählten Schriftgrösse. Für den Textsatz werden die normalen Anweisungen verwendet, wobei Td den Punkt ganz oben auf der Grundlinie definiert (oberhalb des ersten Zeichens).

Unterschneidung und Schriftfeatures

Unterschneidung und Ligaturen werden bei der vertikalen Schreibrichtung nicht verwendet. Zwar ist es möglich, eine Unterschneidung in der Schrift zu definieren, aber dies wird in der Regel ignoriert, da ostasiatische Schriftsysteme grundsätzlich keine Unterschneidung kennen. Alternativzeichen können hingegen ganz normal verwendet werden.

Es gibt zwei Schriftfeatures, welche alternative Zeichen für die vertikale Schreibrichtung definieren: „vert“ enthält nur ein paar Anpassungen wie umpositionierte Satzzeichen. „vrt2“ enthält alle Einträge des „vert“ Features, und zusätzlich rotierte Formen für lateinische Zeichen. Sind beide Features vorhanden, so sollte logischerweise nur eines verwendet werden.

Metriken

Anstelle der Zeichenbreite benötigen wir natürlich die Zeichenhöhe. Diese wird als negative Zahl angegeben, da ja nach von oben nach unten geschrieben wird. Darüber hinaus müssen wir für jedes Zeichen noch zwei weitere Werte ermitteln, und im PDF ablegen. Der Grund dafür ist eine Eigenheit von TrueType und OpenType:

Die einzelnen Buchstaben in der Schrift sind als Vektorgrafik definiert, und deren Koordinaten sind relativ zur horizontalen Grundlinie und der linken Kante des Zeichens. Damit der PDF Interpreter die Zeichen korrekt platzieren kann, muss er darum wissen, wie weit die Oberkante von der horizontalen Grundlinie, und wie weit die linke Kante von der Kolonnenmitte entfernt ist. Bei für die vertikale Schreibweise ausgelegten TrueType/OpenType Schriften sind diese Angaben vorhanden, ansonsten müssen wir mit Standardwerten arbeiten.

Zeichenhöhe und linker Rand

Für vertikale Schreibrichtung ausgelegte TrueType/OpenType Schriften haben zwei zusätzliche Blöcke „vhea“ und „vmtx“. Diese sind ähnlich aufgebaut, wie „hhea“ und „hmtx“. Sind die Tabellen nicht vorhanden, so können wir für alle Zeichen eine Zeichenhöhe von -1000‰, und einen Abstand vom linken Rand zur Kolonnenmitte von 500‰ annehmen.

der "vhea" Block

Dieser Block enthält unter anderem folgende Daten:

PostionGrösseTyp Wert
62 Byteint16 linker Rand
342 Byteuint16Anzahl GIDs mit expliziter Zeichenhöhe

Der linke Rand ist relativ zur Grundlinie angegeben, und folglich eine negative Zahl. In PDF wird eine positive Promillezahl erwartet, der Wert muss also in Promille umgerechnet und negiert werden.

der "vmtx" Block

Dieser Block enthält einen Eintrag für jede GID mit expliziter Zeichenhöhe. Ähnlich wie beim „hmtx“ Block gilt auch hier der letzte Eintrag implizit für die restlichen Zeichen. Die Einträge sind folgendermassen aufgebaut:

PositionGrösseTyp Wert
02 Byteuint16Zeichenhöhe
22 Byteint16 Weissraum oben

Davon interessiert uns nur die Zeichenhöhe. Wie man sieht, ist die Zahl vorzeichenlos, und somit immer positiv. Für die Verwendung in PDF müssen wir sie in Promille umrechnen und negieren.

horizontale Grundlinie

OpenType Schriften mit Type1 oder CID Zeichenbeschreibungen (sprich: diejenigen mit „CFF “ Block) können einen „VORG“ Block enthalten, welcher für jedes Zeichen den Abstand der Grundlinie zur Oberkante des Zeichens definiert. Fehlt dieser, so kann man statt dessen die Oberlänge verwenden.

TrueType Schriften (einschliesslich OpenType Schriften mit TrueType Zeichenbeschreibungen) haben die Position der Oberkante relativ zur horizontalen Grundline im „glyf“ Block abgelegt. Leider ist es etwas umständlich, an diese Information heranzukommen. Die Position der Zeicheninformationen ist nämlich nicht im „glyf“ Block selbst, sondern im „loca“ Block abgelegt. Dieser wiederum kann in zwei Formaten sein, und das Format ist im „head“ Block abgelegt.

Hinweis: Fehlt der „vhea“ und/oder „vmtx“ Block (und verwenden wir dementsprechend dort Standardwerte), so ist es oft besser, auch hier mit einem Standardwert zu arbeiten. Die Oberlänge bietet sich an.

der "VORG" Block

Dieser Block beginnt folgendermassen:

PositionGrösseTyp Wert
02 Byteuint16Version
22 Byteuint16Unterversion
42 Byteint16 Standardabstand horizontale Grundlinie
62 Byteuint16Anzahl Zeichen mit anderem Abstand

Danach folgt ein Eintrag für jedes Zeichen mit anderem Abstand:

PositionGrösseTyp Wert
02 Byteuint16GID
22 Byteint16 Abstand horizontale Grundlinie

Für alle Zeichen, bei denen nichts angegeben wurde, gilt logischerweise der Standardabstand. Der Abstand muss noch anhand der Skala in Promille der Schriftgrösse umgerechnet werden.

der "head" Block

Neben der schon bekannten Informationen ist auch das Format der „loca“ Tabelle abgelegt:

PositionGrösseTyp Wert
502 Byteint16Format „loca“ Block

Das Format kann 0 oder 1 sein.

der "loca" Block

Dieser Block hat einen Eintrag für jede GID, mit der Position der Zeichenbeschreibung im „glyf“ Block. Bei Format 0 sehen die Einträge so aus:

PositionGrösseTyp Wert
02 Byteuint16Position Zeichenbeschreibung

Bei Format 1 sehen die Einträge so aus:

PositionGrösseTyp Wert
04 Byteuint32Position Zeichenbeschreibung

Die Position ist jeweils relativ zum Anfang des „glyf“ Blocks.

der "glyf" Block

Dieser Block enthält alle Zeichenbeschreibungen. An der aus dem „loca“ Block ermittelten Position finden sich zunächst folgende Angaben:

PositionGrösseTyp Wert
02 Byteint16Anzahl Pfade
22 Byteint16linke Kante
42 Byteint16Unterkante
62 Byteint16rechte Kante
82 Byteint16Oberkante

Davon interessiert uns nur die Oberkante. Sie ist relativ zur horizontalen Grundlinie angegeben, und entspricht somit dem von uns gesuchten Abstand. Die Zahl muss nur noch in Promille der Schriftgrösse umgerechnet werden.

Einbindung in PDF

Darstellungsparameter

Wird hauptsächlich in der vertikalen Schreibrichtung geschrieben, und die Kolonnen von Rechts nach Links angeordnet, so sollte man im Darstellungsparameter /Direction die Schreibrichtung als „von Rechts nach Links“ angeben. Grund dafür ist, dass in diesem Fall auch die Seiten von Rechts nach Links angeordnet werden.

Schriftobjekte

Um den vertikalen Modus verwenden zu können, muss die Schrift über das Kompositschriftsystem eingebunden werden. Dabei muss das Kompositschrifobjekt und das Teilschriftobjekt leicht unterschiedlich definiert werden:

Im Kompositschriftobjekt muss der Eintrag /Encoding auf /Identity-V gesetzt werden. Dies bewirkt, dass der PDF Interpreter bei der Auswahl der Schrift in den vertikalen Modus umschaltet.

Im Teilschriftobjekt werden die Einträge /DW und /W weggelassen. Statt dessen gibt es zwei andere Einträge, von denen mindestens einer gesetzt sein muss:

/DW2Standardmetriken (vertikal)
/W2 Zeichenmetriken (vertikal)

/DW2 erwartet als Wert ein Array mit zwei Ganzzahlen. Die erste ist die standardmässige Distanz zwischen Oberkante und Grundlinie. Die zweite ist die standardmässige Zeichenhöhe. Es ist nicht möglich, eine standardmässige Distanz der linken Kante zur Kolonnenmitte festzulegen. Hierfür wird immer 500‰ angenommen.

/W2 erwartet ein Array, das gleich aufgebaut ist, wie das /W Array. /W2 unterscheided sich von /W nur insofern, dass anstelle der Ganzzahl mit der Zeichenbreite jeweils drei Ganzzahlen mit der Zeichenhöhe, dem Abstand der linken Kante von der Kolonnenmitte, und dem Abstand der Oberkante von der horizontalen Grundlinie erwartet werden.

Beispiel:

/DW2 [750 -1000]
/W2 [32 255 -800 500 700 256 [-1000 500 800 -900 500 750]]

Damit definieren wir, das die Zeichenhöhe grundsätzlich -1000‰ ist, und der Abstand zwischen Oberkante und horizontaler Grundlinie grundsätzlich 750‰ beträgt. Für die Zeichen 32 bis 255 definieren wir statt dessen eine Zeichenhöhe von -800‰ und einen Abstand von 700‰. Beim Zeichen 256 wird die Zeichenhöhe belassen, aber 800‰ als Abstand eingetragen, und beim Zeichen 257 schliesslich wird die Zeichenhöhe auf -900‰ gesetzt, während der Abstand belassen wird. Die Differenz zwischen linker Kante und Kolonnenmitte wird überall auf 500‰ gesetzt.