Apache FontBox中的字形名称和GeneralPath(PDFBox)

时间:2017-10-23 21:03:32

标签: java apache path pdfbox glyph

我正在使用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的对象。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

只需更换以下电话:

GeneralPath glyphPath = otfFont.getPath(name);

为此:

GeneralPath glyphPath = otfFont.getCFF().getFont().getPath(name);

这解决了我使用OpenType字体的问题。