【发布时间】:2009-10-11 09:55:52
【问题描述】:
在 Java 中,我有在 OSX 上运行良好但在 linux 上运行良好的代码。此代码加载字体文件并使用 Font.createFont()。 代码如下:
log.debug("Loading ttf file AmericanTypewriter.ttf");
InputStream americanTypewriterInputStream = MyClass.class.getClassLoader().getResourceAsStream("AmericanTypewriter.ttf");
log.debug("File AmericanTypewriter.ttf loaded");
Font americanTypewriter = Font.createFont(Font.TRUETYPE_FONT, americanTypewriterInputStream);
log.debug("Font created");
americanTypewriter = americanTypewriter.deriveFont(16f); // Font size 16
log.debug("Font sized at 16");
如前所述,这在 OSX 上运行良好,但在 linux 上失败。 实际的 ttf 文件是我在 mac 上使用的:
fondu /Library/Fonts/AmericanTypewriter.dfont
并获取生成的 AmericanTypewriter.ttf 文件并将其添加到 java 资源路径。
我希望这也能在 linux 上工作,因为没有假设该字体已预先安装在主机上(我正在以编程方式添加它),但我可能错过了一些东西......你能帮忙吗?
日志如下所示:
11:30:59,418 DEBUG MyClass:167 - Loading ttf file AmericanTypewriter.ttf
11:30:59,419 DEBUG MyClass:167 - File AmericanTypewriter.ttf loaded
java.awt.FontFormatException: Font name not found
at sun.font.TrueTypeFont.init(TrueTypeFont.java:437)
at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:154)
at sun.font.FontManager.createFont2D(FontManager.java:1476)
at java.awt.Font.<init>(Font.java:454)
at java.awt.Font.createFont(Font.java:761)
...
编辑: 这里一定有我遗漏的东西。通过告诉 Java “看,这是 ttf 文件,其中包含您需要的所有信息”,这是否意味着它是独立于平台的,安装什么字体以及安装在哪里并不重要? ttf 文件中是否没有 java 需要的所有内容?
【问题讨论】: