2011-01-04 10 views
1

ich auf einem Java-Programm arbeite, die XML-Dateien für die Zeichen überprüft, die keine Glyphe Darstellung in einer bestimmten Schriftart (mit Font.canDisplay()) haben solltenJava: Verwendung von OTF-Schriften Überprüfung, ob bestimmte Schriftart existiert

Die XML-Dateien sein utf-8 standardmäßig codiert. Entitäten im XML-Code werden analysiert und in einen char/int-Wert umgewandelt, bevor sie von canDisplay überprüft werden.

Um die Flexibilität zu bieten, übernimmt das Programm zwei Parameter:

  • Der Dateiname der XML-Datei
  • A Schriftname

Ich möchte, ob die angegebene Schriftart überprüfen existiert auf dem System, weil es sonst nicht viel Sinn gibt, canDisplay zu verwenden.

Soweit ich verstehe, unterstützt Java 6 OTF-Fonts. Wenn ich jedoch getAvailableFontFamilyNames() von java.awt. * Verwende, werden nur TTF-Fonts aufgelistet.

Ich würde gerne wissen, ob es eine Möglichkeit gibt zu überprüfen, ob eine OTF-Schriftart (durch seinen Namen gegeben) existiert. Und im Allgemeinen ist die Verwendung von OTF-Fonts in Java unter Windows praktisch.

Der Zweck von diesem: Wir verwenden renderX XEP, um xsl-fo in PDFs zu konvertieren. Ich würde gerne feststellen können, ob die xsl-fo-Datei Zeichen enthält, die nicht mit einer bestimmten Schriftart dargestellt werden können. XEP gibt keine Warnung aus und druckt nur Leerzeichen anstelle der Glyphen. Was es noch schlimmer macht, ist, dass es seine Berechnung des Abstands für begründeten Text zu verwechseln scheint, so dass Zeilen mit diesen leeren Leerzeichen länger oder kürzer als die aktuelle Blockgröße sind.

Ich weiß, dass es bestimmte Vorbehalte gibt, z.B. Ich müsste prüfen, ob ein Zeichen regulär, kursiv oder fett dargestellt werden soll, und dann nach einer Glyphe in dieser Schriftart suchen. Aber jetzt reicht ein allgemeinerer Ansatz, der überprüft, ob überhaupt ein Glyph für ein Zeichen in der regulären Schriftart vorhanden ist.

Antwort

0

Ich bekomme die .OTF-Fonts auch.

GraphicsEnvironment genv = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
    for (String ffname : genv.getAvailableFontFamilyNames()) { 
     System.out.println(ffname); 
    } 

Also entweder die spezifische Font-Datei ein Problem aufgetreten ist, ist die Schriftname unterscheidet sich von dem Dateinamen, oder man hat einen Parameter Locale zu getLocalGraphicsEnvironment hinzuzufügen.

Für lateinische Zeichen mit diakritischen Zeichen kann eine Unicode-Normalisierung (Java-Text) zum Abrufen des grundlegenden Buchstabencodes + diakritischen Kombinationscodes hilfreich sein. Etwas wie:

java.text.Normalizer.normalize(letter, java.text.Normalizer.Form.NFKD).replaceAll("\\p{M}", ""); 
Verwandte Themen