到目前为止,我所遇到的是我能想到的 Oracle 的 Java 字体渲染库中的一个“错误”。在某些字体(如嵌入在 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 数据,以便我可以将字符(代码点)映射到字形代码?