2014-03-27 2 views
10

Я перечислил все доступные шрифты в системе, вызвав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 я вижу шрифт «Система». Однако в 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> 

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

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

+0

Из интереса, не работает ли 'graphicsEnvironment.getAvailableFontFamilyNames()' возвращать полный список? –

+0

Нет, это не так. – kukis

+0

[вы можете проверить с помощью] (http://stackoverflow.com/a/9022901/714968) или вы можете зарегистрировать новый шрифт из Java (http://stackoverflow.com/a/18462739/714968) то вы можете увидеть, правильно ли установлены все корты CP1250/1 в Native OS. – mKorbel

ответ

3

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

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

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

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

http://cooltext.com/Fonts-Gothic

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

0

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

  1. Это установит все основные шрифты в вашу виртуальную машину Java: Суд APT-получить установку msttcorefonts
  2. После этого, вы можете проверить эти установленные шрифты на:/USR/доли/шрифты/TrueType/msttcorefonts
0

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

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

Java font documentation

Смежные вопросы