OpenType ist eine Erweiterung des TrueType Dateiformats, welche von Microsoft und Adobe gemeinsam ins Leben gerufen wurde. Der Hauptunterschied zu seinem Vorgänger ist, dass die Beschreibung der einzelnen Zeichen nicht nur im TrueType Format sein kann, sondern auch im Type1 Format.
OpenType brachte auch eine Reihe anderer Erweiterungen, und manche aktuellen TrueType Schriften sind eigentlich OpenType Schriften. Allgemein spricht man aber nur von OpenType Schriften, wenn diese Type1 Zeichenbeschreibungen verwenden.
OpenType wird offiziell ab PDF 1.6 unterstützt. Inoffiziell sind die Schriften aber schon ab PDF 1.2 brauchbar.
OpenType Schriften mit TrueType Schriftdaten können wie TrueType Schriften eingebunden werden. Die beiden Formate sind zueinander kompatibel. Das heisst, als technischer Typ wird /TrueType
angegeben, im Schriftdeskriptor wird /FontFile2
verwendet, und im Schriftstream muss der zusätzliche /Length1
Eintrag gesetzt werden.
Bei OpenType Schriften mit Type1 Schriftdaten müssen wir zu einem Trick greifen. Die Schriftdaten befinden sich in einem Block innerhalb der Datei, der für sich alleine gestellt eine gültige CFF Datei mit Type1-Anweisungen ergibt. Um ihn zu verwenden wird als technischer Typ /Type1
angegeben, im Schriftdeskriptor wird /FontFile3
verwendet, und im Schriftstream muss der zusätzliche Eintrag /Subtype /Type1C
stehen. Der Inhalt des Schriftstreams ist nicht die komplette OpenType Datei, sondern nur der Inhalt des CFF-Blocks (siehe unten).
OpenType Schriften fassen Schriftdaten und Metadaten in einer Datei zusammen. Die Dateiendung ist typischerweise TTF, wenn die Schriftdaten im TrueType Format sind, und OTF, wenn sie im Type1 Format sind.
Was die Dateistruktur betrifft, so entspricht OpenType weitgehend TrueType. Ich werde darum nicht die ganzen Angaben wiederholen, sondern lediglich auf die für uns relevanten zwei Unterschiede hinweisen:
Der erste Unterschied ist die Signatur am Anfang der Datei. Diese sollte bei OpenType ebenfalls <00 01 00 00> sein, falls die Schriftdaten im TrueType Format sind, oder aber der ASCII-String „OTTO“, falls sie im Type1 Format sind.
Der zweite Unterschied betrifft nur Schriften mit Type1 Schriftdaten. Bei diesen Schriften finden sich die Schriftdaten in einem „CFF “ Block (das vierte Zeichen ist ein Leerzeichen). Den Inhalt dieses Blocks müssen wir extrahieren, und für das Streamobjekt verwenden.
Bei PDF 1.6 kann auch die gesamte OpenType Datei eingebunden werden. Im Streamobjekt wird dann /Subtype
auf /OpenType
gesetzt (statt auf /Type1C
). Allerdings bringt dies meines Wissens keinerlei Vorteile, und vergrössert das PDF unnötig.
Diskussion