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 только перечисляет шрифты, установленные для всех пользователей.