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

Apache Tika解析doc/docx/pdf文件返回空白文本问题求助

问题原因

1. 依赖配置错误(核心原因)

Apache Tika 2.x版本中,tika-parsers-standard-package属于POM类型依赖,你未在依赖声明中指定<type>pom</type>,导致该依赖下的所有解析器实现Jar包没有被引入项目,Tika无法加载对应文件类型的解析器,只能识别文件类型但无法提取文本。

2. 依赖版本冲突

Tika 2.1.0官方适配的POI版本为5.0.0,你手动指定了POI 5.1.0版本,会导致类版本不兼容,进一步影响解析器初始化。

3. 输入流操作逻辑错误

  • parser.parse()执行完成后输入流已经被完全读取,流指针处于EOF位置,此时调用detect方法无法读取到有效数据
  • 若输入流不支持mark/reset,自动类型检测时读取流头部字节后,流指针不会复位,后续解析会从偏移位置开始读取,导致解析失败

解决方案

第一步:修正依赖配置

移除手动添加的POI相关依赖,直接使用Tika标准包传递的适配版本POI,同时指定解析器包的类型为pom,修正后的依赖如下:

<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-core</artifactId>
    <version>2.1.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tika</groupId>
    <artifactId>tika-parsers-standard-package</artifactId>
    <version>2.1.0</version>
    <type>pom</type>
</dependency>

第二步:修正解析代码逻辑

调整流操作顺序,增加流指针复位逻辑,修正后的代码如下:

public String parseToPlainText(InputStream inputStream) {
    // 确保输入流支持mark/reset,不支持则包装为BufferedInputStream
    if (!inputStream.markSupported()) {
        inputStream = new BufferedInputStream(inputStream);
    }
    // 标记流起始位置,预留足够大的读取上限避免mark失效
    inputStream.mark(Integer.MAX_VALUE);

    BodyContentHandler handler = new BodyContentHandler(Integer.MAX_VALUE);
    AutoDetectParser parser = new AutoDetectParser();
    Metadata metadata = new Metadata();
    ParseContext parseContext = new ParseContext();
    String content = "";
    try {
        // 先检测MIME类型,检测完成后复位流指针
        MediaType mediaType = parser.getDetector().detect(inputStream, metadata);
        System.out.println("检测到文件类型:" + mediaType);
        inputStream.reset();

        // 执行解析
        parser.parse(inputStream, handler, metadata, parseContext);
        content = handler.toString();
    } catch (IOException | SAXException | TikaException e) {
        logger.error("文件解析失败", e);
    } finally {
        try {
            inputStream.close();
        } catch (IOException e) {
            logger.error("流关闭失败", e);
        }
    }
    return content;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:09:11