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

使用Tika解析RTF文件时有序列表编号丢失问题求助

解决Tika解析RTF有序列表丢失编号的问题

使用Tika解析包含有序列表的RTF文件时,列表项的编号会被替换为空白字符,原使用代码如下:

InputStream is = new FileInputStream("files/rtf_auto.rtf");
AutoDetectParser autoDetectParser = new AutoDetectParser();

BodyContentHandler contentHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
autoDetectParser.parse(is, contentHandler, metadata, new ParseContext());

System.out.println(contentHandler);

以下是可行的解决建议:

  • 使用RTF专用解析器:AutoDetectParser对RTF格式的列表支持不够完善,直接改用RTFParser做针对性解析,示例代码:
InputStream is = new FileInputStream("files/rtf_auto.rtf");
RTFParser rtfParser = new RTFParser();

BodyContentHandler contentHandler = new BodyContentHandler();
Metadata metadata = new Metadata();
rtfParser.parse(is, contentHandler, metadata, new ParseContext());

System.out.println(contentHandler);
  • 自定义ContentHandler处理列表事件:如果专用解析器仍未解决问题,可以自定义处理器捕获列表相关的SAX事件,手动生成有序列表编号。示例实现:
class CustomListHandler extends BodyContentHandler {
    private int orderedListCounter = 0;
    private boolean inOrderedList = false;

    @Override
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        if ("orderedlist".equals(localName)) {
            inOrderedList = true;
            orderedListCounter = 1;
        } else if ("listitem".equals(localName) && inOrderedList) {
            write(orderedListCounter + ". ");
            orderedListCounter++;
        }
        super.startElement(uri, localName, qName, atts);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if ("orderedlist".equals(localName)) {
            inOrderedList = false;
        }
        super.endElement(uri, localName, qName);
    }
}

使用时将BodyContentHandler替换为CustomListHandler即可。

  • 升级Tika版本:旧版本Tika存在RTF列表解析的bug,建议升级至最新稳定版(如2.x系列),新版本通常会修复这类格式兼容问题。

内容的提问来源于stack exchange,提问作者bricked

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:40:54