7

如何解决 Java 中自定义字体的问题?

例如,我的应用程序使用字体,并非在所有计算机上。如果客户端计算机上不存在它,我可以以某种方式将它包含在编译的可执行文件中,然后从那里调用它吗?

还有什么其他选择?我可以将所有字体字符作为图像(之前,在某些图形应用程序中),然后为每个字符显示图像......可以吗?

4

2 回答 2

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;
}
于 2011-05-05T18:13:48.107 回答
7

您可以在应用程序中包含字体并“即时”创建它

InputStream is = this.getResourceAsStream(font_file_name);
Font font = Font.createFont(Font.TRUETYPE_FONT, is);
于 2011-05-05T18:11:46.517 回答