FontBox升级至3.0.4后Type2CharString.getType2Sequence()替代方案咨询
动机
我正尝试使用pdf2dom在PDFBOX 3中生成HTML文件。
已完成事项
- 更新了pdf2dom的pom依赖
- 更新了gfxassert的pom依赖
- 更新了fontverter的pom依赖
- 删除部分代码及测试类以完成编译
- 已实现PDF转HTML功能,代码位于项目对应路径
问题咨询
将FontBox从2.0.27版本升级至3.0.4版本后,Type2CharString.getType2Sequence()方法已不存在。请问应如何改写以下代码中的对应逻辑?
原代码(出自CffFontAdapter.java):
public List<CffGlyph> getGlyphs() throws IOException { List<CffGlyph> glyphs = new ArrayList<CffGlyph>(); for (GlyphMapReader.GlyphMapping mapOn : getGlyphMaps()) { CffGlyph glyph = createGlyph(); Type2CharString charStr = font.getType2CharString(mapOn.glyphId); // glyph.readType2Sequence(charStr.getType2Sequence()); glyph.map = mapOn; glyph.charStr = charStr; glyphs.add(glyph); } return glyphs; }
解决方案
在FontBox 3.x版本中,Type2CharString.getType2Sequence()方法已被移除,取而代之的是父类CharString提供的getSequence()方法,该方法会返回字符指令序列,功能与原方法一致。
修改后的代码如下:
public List<CffGlyph> getGlyphs() throws IOException { List<CffGlyph> glyphs = new ArrayList<CffGlyph>(); for (GlyphMapReader.GlyphMapping mapOn : getGlyphMaps()) { CffGlyph glyph = createGlyph(); Type2CharString charStr = font.getType2CharString(mapOn.glyphId); // 替换为getSequence()方法 glyph.readType2Sequence(charStr.getSequence()); glyph.map = mapOn; glyph.charStr = charStr; glyphs.add(glyph); } return glyphs; }
如果CffGlyph.readType2Sequence方法的参数类型与getSequence()返回的List<Object>不兼容,你需要检查该方法的定义,做必要的类型转换。若getSequence()无法满足需求,也可以调用getInstructions()方法获取原始指令字节数组,自行解析为对应序列。
内容的提问来源于stack exchange,提问作者Tugalsan Karabacak
相关产品推荐
相关产品推荐

