我正在使用Apache FontBox来获取字体指标。我从一个字形中获取一个GeneralPath,然后从那里得到一些信息,如字形的高度。
我试图从OpenType字体中的字形名称中获取一个GeneralPath对象。如果我使用此表单,我会得到准确的字形信息(路径)。
GeneralPath glyphPath = otfFont.getPath("uni24C8");
System.out.println(glyphPath.getBounds2D().getMaxY()); //Ok...
但是,如果我尝试从Unicode代码中获取字形名称,我会得到字形的incorret信息:
int glyphID = otfFont.getUnicodeCmap().getGlyphId(0x0075);
String name = otfFont.getCFF().getFont().getCharset().getNameForGID(glyphID);
GeneralPath glyphPath = otfFont.getPath(name);
System.out.println(glyphPath.getBounds2D().getMaxY()); //Incorrect...
实际上,FontBox找不到与给定名称匹配的字形。例如,以下调用返回false。
otfFont.hasGlyph(otfFont.getCFF().getFont().getCharset().getNameForGID(glyphID));
我做错了什么? 每当我直接使用" uni0075"等名称时或" uni24C8",我得到正确的值。但我不知道如何从GlyphId中获取这些名称。
Ps。:otfFont是OpenTypeFont的对象。
提前谢谢。
答案 0 :(得分:0)
我找到了解决方案。
只需更换以下电话:
GeneralPath glyphPath = otfFont.getPath(name);
为此:
GeneralPath glyphPath = otfFont.getCFF().getFont().getPath(name);
这解决了我使用OpenType字体的问题。