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]
...
установленные шрифты (извините за польскую ОС):
почему это?
другое дело, что в 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, скачать шрифты здесь
или шрифты Microsoft true Type.
да, JVM не содержит всех шрифтов. Вам нужно установить все основные шрифты вручную. Если вы используете Linux, это должно помочь вам:
- это установит все основные шрифты на ваш JVM: sudo apt-get install msttcorefonts
- после этого вы можете проверить эти установленные шрифты по адресу:/usr/share/fonts/truetype / msttcorefonts
пожалуйста, обратитесь к этой странице. Существует два типа шрифтов. 1. Физический шрифт 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]);
}
}