【问题标题】:Rendering fonts in Java: java.awt.Font doesn't behave correctly在 Java 中渲染字体:java.awt.Font 行为不正确
【发布时间】:2012-04-16 05:17:27
【问题描述】:

到目前为止,我所遇到的是我能想到的 Oracle 的 Java 字体渲染库中的一个“错误”。在某些字体(如嵌入在 PDF 文件中的字体)中,使用了一些不规则的字符代码,并且它们具有与之关联的字形。

在这种情况下(属于制表符、回车符和换行符的字符代码 9、10 和 13)尝试使用 java.awt.Font.createGlyphVector 方法获取字形向量时,不会返回正确的字形,但它适用于其他所有情况。

我在 Java 中跟踪 CMap 实现的问题,其代码类似于:

         char getGlyph(int charCode) {
             if (charCode < 256) {
                 if (charCode < 0x0010) {
                     switch (charCode) {
                     case 0x0009:
                     case 0x000a:
                     case 0x000d: return CharToGlyphMapper.INVISIBLE_GLYPH_ID;
                     }
                 }
                 return (char)(0xff & cmap[charCode]);
             } else {
                 return 0;
             }
         }

所以,我的问题是:

  • 这真的是一个错误吗?
  • 有人知道如何解决这个问题吗?
  • 有没有办法从 True Type 字体中提取 CMAP 数据,以便将字符(代码点)映射到字形代码?

【问题讨论】:

    标签: java fonts awt glyph


    【解决方案1】:

    我相信您现在已经找到了问题所在,但是对于那些将来偶然发现此页面的人,我会推荐sfntly library。它是 google 的一个免费 java 库,允许您编辑非常易于使用的基于 sfnt 的字体。如果您以其他方式解决了您的问题,请告知我们更新。谢谢。

    【讨论】:

      猜你喜欢
      • 2015-11-23
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多