2011-05-05 5 views
7

Как исправить проблему с пользовательскими шрифтами в Java?Пользовательские шрифты в Java

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

Что такое другие альтернативы? Я мог бы сделать все шрифты символами как изображения (раньше, в некоторых графических приложениях), а затем отображать изображение для каждого символа ... это нормально?

ответ

18

Вот метод утилита я использую, чтобы загрузить файл шрифта из файла .ttf (может быть в комплекте):

private static final Font SERIF_FONT = new Font("serif", Font.PLAIN, 24); 

private static Font getFont(String name) { 
    Font font = null; 
    if (name == null) { 
     return SERIF_FONT; 
    } 

    try { 
     // load from a cache map, if exists 
     if (fonts != null && (font = fonts.get(name)) != null) { 
      return font; 
     } 
     String fName = Params.get().getFontPath() + name; 
     File fontFile = new File(fName); 
     font = Font.createFont(Font.TRUETYPE_FONT, fontFile); 
     GraphicsEnvironment ge = GraphicsEnvironment 
       .getLocalGraphicsEnvironment(); 

     ge.registerFont(font); 

     fonts.put(name, font); 
    } catch (Exception ex) { 
     log.info(name + " not loaded. Using serif font."); 
     font = SERIF_FONT; 
    } 
    return font; 
} 
+1

+1 для 'ge.registerFont (font);' – Serhiy

6

Вы можете включать шрифт с вашим приложением и создать его «на лету»

InputStream is = this.getResourceAsStream(font_file_name); 
Font font = Font.createFont(Font.TRUETYPE_FONT, is); 
Смежные вопросы