java - 获取异常 FontFormatException Unsupported sfnt resources/fonts/OpenSansEmoji.ttf

标签 java fonts emoji truetype opentype

我在资源/字体文件夹中有 OpenSansEmoji.ttf 和其他字体,如 Proxima Nova Regular.otf,对于 Proxima Nova Regular.otf/Proxima Nova Alt Light.ttf,它没有给我异常(exception),OpenSansEmoji.otf 也没有,但是对于 OpenSansEmoji.ttf,它给了我以下异常,我该怎么办?

 Feb  25, 2015 10:37:31 AM java2d.utils.FontUtils getFont
    SEVERE: null
    java.awt.FontFormatException: Unsupported sfnt resources/fonts/OpenSansEmoji.ttf
        at sun.font.TrueTypeFont.init(TrueTypeFont.java:522)
        at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:191)
        at sun.font.SunFontManager.createFont2D(SunFontManager.java:2460)
        at java.awt.Font.<init>(Font.java:614)
        at java.awt.Font.createFont(Font.java:1023)
        at java2d.utils.FontUtils.getFont(FontUtils.java:53)
        at java2d.CrushCard.drawMessageString(CrushCard.java:311)
        at java2d.CrushCard.createCrushCard(CrushCard.java:134)
        at java2d.Java2D.main(Java2D.java:43)

我的代码在这里

  try {
            FontUtils.registerFonts(fonts);
        } catch (IOException | FontFormatException ex) {
            Logger.getLogger(Java2D.class.getName()).log(Level.SEVERE, null, ex);
        }



  public static void registerFonts(List<String> paths) throws IOException, FontFormatException {

        for (String path : paths) {
            String fName = "resources/fonts/" + path;
            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, new File(fName)));
        }
    }

最佳答案

根据维基百科,http://en.wikipedia.org/wiki/SFNT是一种字体的容器格式,由 TrueType 等使用。但是,Java 不支持所有 SFNT 字体,仅支持 TrueType。

来自 sun.font.TrueTypeFont javadoc:

TrueTypeFont is not called SFntFont because it is not expected to handle all types that may be housed in a such a font file.

基本上这意味着您的字体虽然以 .ttf 文件结尾,但实际上不是 TrueType,您不能使用它。可能是它是 OpenTypeFont,Java 不支持它。您可以尝试转换字体;谷歌显示了许多可能性。

关于java - 获取异常 FontFormatException Unsupported sfnt resources/fonts/OpenSansEmoji.ttf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28711720/

相关文章:

android - 如何更改 qml 应用程序中的字体系列?

encoding - 表情符号取值范围

java - 为什么我的 java -version 显示 "openjdk version "1.8.0_28 2""

java - 我可以在 Java 中更改 jpg 图像的分辨率吗?

java - Eclipse,插件首选项加载问题

java - 用户 'root' @'localhost' 的 c3p0 访问被拒绝(使用密码 yes)

google-chrome - Chrome 无法解码下载的字体 OTS 解析错误 : post: Failed to parse table

java - 如何使用 itext 创建包含 marathi 字体的 pdf 文件?

Python - 读取表情符号 Unicode 字符

java - 禁用文本输入的 Android 键盘 [仅限表情符号键盘]