You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 16:32:42