Der FontManager
Dokumentenformate wie beispielsweise PDF können Schriftarten referenzieren, die zum Einen im Dokument selbst nicht eingebettet sind und zum Anderen der zur Anzeige verwendeten Anwendung oder dem Betriebssystem nicht bekannt sind. Diese Dokumente erwarten jedoch von der anzeigenden Anwendung, dass die eingesetzten Schriftarten bekannt sind, vorliegen und interpretiert werden können.
Java verarbeitet Schriftarten über die API des Abstract Window
Toolkit (AWT) und ist für Maßnahmen, die in Fällen wie oben
ergriffen werden müssen, nicht flexibel genug. Die jadice document platform beinhaltet daher eine
eigene Fontengine. Schriftarten können darüber unabhängig von der
java.awt.Font
-Implementierung geladen, indexiert und
verarbeitet werden. Das Konzept liest in bestimmten Verzeichnissen alle darin
verfügbaren unterstützten Schriftarten (siehe Liste „Unterstützte Schriftartenformate“) aus und indexiert
sie anhand deren Namen und bestimmten Eigenschaften. Der FontManager
hat die
Möglichkeit, nicht eingebettete und nicht installierte aber dennoch verwendete
Schriftarten zu ersetzen und dabei trotzdem eine dem Original möglichst ähnlich
aussehende Schriftart zur Anzeige auszuwählen.
Weiterhin gibt es die Funktionalität die Indexdaten zwischenzuspeichern um die Startzeit der Anwendung zu verkürzen. Der Caching-Mechanismus serialisiert alle Indexdaten und schreibt sie in das temporäre Verzeichnis des Benutzers.
jadice document platform ist in Standardumgebungen in der Lage den FontManager
automatisch zu
konfigurieren. In „Automatische Konfiguration“ sind
die Vorraussetzungen beschrieben unter denen der Automatismus funktioniert. In
solchen Fällen ist kein Eingreifen oder Anpassen der Integration notwendig. Sobald
die Umgebung vom Standard abweicht, kann über eine manuelle Konfiguration (siehe
„Manuelle Konfiguration“) direkter
Einfluss auf den FontManager
genommen werden.
TrueType (
.TTF
)Compact Font Format (CFF, PostScript-Fontformat)
Type-1-Font (PostScript-Fontformat)
Type-3-Font (PostScript-Fontformat)
Die Auswahl der Verzeichnisse zur Indexierung funktioniert weitgehend automatisch und muss in den meisten Umgebungen nicht angepasst werden. Die automatische Konfiguration und Indexierung wurde für die folgenden Systeme implementiert:
- Mac OS X
Auf Apple's Supportseiten wird genau definiert in welchen Verzeichnissen sich Schriftarten befinden:
~/Library/Fonts/
/Library/Fonts/
/Network/Library/Fonts/
/System/Library/Fonts/
/System Folder/Fonts/
- Microsoft Windows
Das Systemverzeichnis wird über die Umgebungsvariable
windir
ermittelt. Ist dies nicht erfolgreich wird nach Standardverzeichnissen gesucht. Aktuelle Windows-Betriebssysteme platzieren im System installierte Schriftarten üblicherweise unterC:\Windows\Fonts
, ältere unterC:\WINNT\Fonts
. In Windows gibt es die Möglichkeit Schriftarten zu verlinken und in beliebigen anderen Verzeichnissen zu platzieren. Diese Schriftarten sind nicht automatisch indexierbar und sollten über die manuelle Konfiguration in den Indexierungsprozess eingebunden werden (siehe „Manuelle Konfiguration“).- Linux
Die weit verbreiteten Linux-Distributionen und deren grafische Systeme nutzen in der Regel fontconfig. Die automatische Konfiguration versucht die XML-Datei
/etc/fonts/fonts.conf
zu lesen. Sie enthält Informationen über Verzeichnisse, die Schriftarten enthalten. Die Verzeichnisse sind in<dir>
-Elementen definiert. Diese Elemente werden ausgelesen und alle existenten und lesbaren Verzeichnisse werden indexiert. Ist die XML-Datei nicht unter oben genanntem Pfad auffindbar, muss manuell konfiguriert werden (siehe „Manuelle Konfiguration“).
Sobald die im Abschnitt „Automatische Konfiguration“ genannten
Vorraussetzungen nicht gegeben sind oder die Standardkonfiguration nicht
ausreicht, kann eine manuelle Konfiguration durchgeführt werden.
FontManagerFactory
bietet Möglichkeiten zur manuellen Erzeugung und
Konfiguration eines FontManager
s. Die Erzeugung wird auf Basis eines Arrays
mit Verzeichnissen vorgenommen. Im Anschluss kann der FontManager
als
Standardinstanz über setDefaultInstance(..)
in
FontManagerFactory
gesetzt werden. Alternativ ist es möglich den erzeugten
FontManager
in einem FontManagerReaderSettings
-Objekt zu setzen und dieses
dem Ladevorgang eines Dokuments zu übergeben (siehe „Einlesen von Dokumentdaten“).
Speziell für Linux-Distributionen, welche mit fontconfig arbeiten, aber die
fonts.conf
entweder an anderer Stelle zu finden ist
oder in mehrere Dateien aufgeteilt wurde, steht eine API für die Interpretation
der fontconfig XML-Dateien zur Verfügung. Dies wird über die Methode
parseFontConfig(..)
der FontManagerFactory
ermöglicht. Als Ergebnis erhält man ein Array mit Verzeichnissen, welche in der
fontconfig XML-Datei hinterlegt wurden.
Der Caching-Mechanismus arbeitet generell automatisch. In speziellen Fällen
kann es erforderlich werden, dass der Cache neu aufgebaut wird. Auf das
Verhalten kann bei der Erzeugung eines FontManager
beziehungsweise
FontManagerHandle
Einfluss genommen werden, indem man den gewünschten
Booleschen Wert als Argument der Methode create(File[],
boolean)
übergibt.
Für eine detaillierte Beschreibung des Verhaltens von hier erwähnten Klassen und Methoden sei auf die Javadoc verwiesen.
Einige vorbereitete Beispiele finden sie unter „Beispiele zu FontManager
“