Java не может видеть все установленные шрифты в системе

Я перечислил все доступные шрифты в системе, позвонив

    GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font[] fontNames = graphicsEnvironment.getAllFonts();
    for (Font s : fontNames) {
        System.out.println(s);
    }

на консоли я вижу много шрифтов, но список выглядит очень uncomplete. Например: моя ОС установила шрифт "System", но на выходе я не вижу этот шрифт:

...
java.awt.Font[family=Sylfaen,name=Sylfaen,style=plain,size=1]
java.awt.Font[family=Symbol,name=Symbol,style=plain,size=1]
java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=1]
...

установленные шрифты (извините за польскую ОС): enter image description here

почему это?

другое дело, что в WordPad я вижу шрифт "System". Однако в MS Word 2010 шрифт "System" не является доступный.

проблема не в этом конкретном" системном " шрифте. В Java установлено несколько шрифтов, но отсутствует.

изменить: Почему я спрашиваю? Мое приложение использует Birt Report Designer для создания .rpt файлы с шаблонами отчетов. Затем я использую эти файлы для визуализации компонентов Swing, таких как JLabel, JTextField и т. д. Основная проблема: пользователь может генерировать отчет с полями, которые используют шрифт, который Java Swing не может обрабатывать.

часть образца xml-файла, созданного by BIRT:

<property name="fieldName">Blablabla{Label}</property>
<property name="fontFamily">"System"</property>
<property name="fontSize">16pt</property>

наш запрос клиента указывает, что шрифт не может отличаться между сгенерированным отчетом и компонентами Java swing.

то, что я хочу сделать, это либо обрабатывать все системные шрифты в Java, либо исключать шрифты BIRT, которые java не может обрабатывать.

4 ответов


JVM не обязательно использует шрифты, установленные в вашей системе, он поставляется со своими собственными шрифтами, которые вы можете увидеть в

JAVA_HOME/jre/lib / шрифты

для использования шрифта с JVM вам нужно создать шрифты и добавить их в каталог выше или добавить каталог новых шрифтов в свой путь к классу.

кроме того, вы можете упаковать шрифты с файлом архива jar, скачать шрифты здесь

http://cooltext.com/Fonts-Gothic

или шрифты Microsoft true Type.


да, JVM не содержит всех шрифтов. Вам нужно установить все основные шрифты вручную. Если вы используете Linux, это должно помочь вам:

  1. это установит все основные шрифты на ваш JVM: sudo apt-get install msttcorefonts
  2. после этого вы можете проверить эти установленные шрифты по адресу:/usr/share/fonts/truetype / msttcorefonts

пожалуйста, обратитесь к этой странице. Существует два типа шрифтов. 1. Физический шрифт 2. Логический шрифт

Java font documentation


вы можете попробовать это?, и убедитесь, что вы используете последний JDK 7

public static void main(String[] args) 
{        
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String []fontFamilies = ge.getAvailableFontFamilyNames();
        for (int i = 0; i <fontFamilies.length; i++) 
        {
            System.out.println(fontFamilies[i]);
        }
}