Пользовательские шрифты в Java - PullRequest
7 голосов
/ 05 мая 2011

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

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

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

Ответы [ 2 ]

18 голосов
/ 05 мая 2011

Вот метод утилиты, который я использую для загрузки файла шрифта из файла .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;
}
7 голосов
/ 05 мая 2011

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

InputStream is = this.getResourceAsStream(font_file_name);
Font font = Font.createFont(Font.TRUETYPE_FONT, is);
...