在Java中渲染字体:java.awt.Font行为不正确

时间:2012-04-02 14:27:21

标签: java fonts awt glyph

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

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

我将问题跟踪到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;
             }
         }

所以,我的问题是:

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

1 个答案:

答案 0 :(得分:0)

我相信你现在已经解决了这个问题,但是对于那些将来偶然发现这个页面的人,我会推荐sfntly library。它是谷歌的免费java库,允许您编辑非常容易使用的基于sfnt的字体。如果您以其他方式解决了问题,请通过更新来启发我们。感谢。