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

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

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

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

...
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 шрифт "Система" недоступен.

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

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

Часть образца XML файла, созданного BIRT:

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

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

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

Ответ 1

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

JAVA_HOME/JRE/Lib/шрифты

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

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

http://cooltext.com/Fonts-Gothic

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

Ответ 2

Вы можете попробовать это?, и убедитесь, что используете последний 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]);
        }
}

Ответ 3

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

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

Ответ 4

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

Документация по шрифтам Java

Ответ 5

На некоторых Windows-машинах есть две кнопки для установки шрифтов: Install For Me и Install For All Users. Java только перечисляет шрифты, установленные для всех пользователей.