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

Apache Tika处理非零字节PDF时抛出ZeroByteFileException异常求助

Apache Tika 2.8.0处理扫描PDF时抛出ZeroByteFileException异常

使用Apache Tika 2.8.0处理一个PDF扫描件时遇到异常,该文件大小为1752059字节,共5页,可正常打开,但Tika抛出ZeroByteFileException提示输入流必须大于0字节,且Tika能正常处理其他同类扫描件。

执行的命令及输出如下:

java -jar tika-app-2.8.0.jar somefile
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="pdf:PDFVersion" content="1.4"/>
<meta name="xmp:CreatorTool" content="Scanner System"/>
<meta name="pdf:hasXFA" content="false"/>
<meta name="access_permission:modify_annotations" content="true"/>
<meta name="access_permission:can_print_degraded" content="true"/>
<meta name="dcterms:created" content="2023-06-07T19:43:16Z"/>
<meta name="dcterms:modified" content="2023-06-07T18:54:49Z"/>
<meta name="dc:format" content="application/pdf; version=1.4"/>
<meta name="xmpMM:DocumentID" content="uuid:dbd46d32-696b-4b6f-abc1-b2cbb0485ede"/>
<meta name="pdf:docinfo:creator_tool" content="Scanner System"/>
<meta name="access_permission:fill_in_form" content="true"/>
<meta name="pdf:docinfo:modified" content="2023-06-07T18:54:49Z"/>
<meta name="pdf:hasCollection" content="false"/>
<meta name="pdf:encrypted" content="false"/>
<meta name="xmp:CreateDate" content="2023-06-07T14:43:16Z"/>
<meta name="Content-Length" content="1752059"/>
<meta name="pdf:hasMarkedContent" content="false"/>
<meta name="Content-Type" content="application/pdf"/>
<meta name="xmp:ModifyDate" content="2023-06-07T14:54:49Z"/>
<meta name="xmp:MetadataDate" content="2023-06-07T14:54:49Z"/>
<meta name="pdf:producer" content="Scanner System Image Conversion"/>
<meta name="access_permission:extract_for_accessibility" content="true"/>
<meta name="access_permission:assemble_document" content="true"/>
<meta name="xmpTPg:NPages" content="5"/>
<meta name="resourceName" content="128f506f-639a-4083-830b-01d3a8501008.data.2023-07-20-18-07-24.154bb614-26e3-cf83-5be2-fd6c7da83ef1"/>
<meta name="pdf:hasXMP" content="true"/>
<meta name="access_permission:extract_content" content="true"/>
<meta name="access_permission:can_print" content="true"/>
<meta name="X-TIKA:Parsed-By" content="org.apache.tika.parser.DefaultParser"/>
<meta name="X-TIKA:Parsed-By" content="org.apache.tika.parser.pdf.PDFParser"/>
<meta name="access_permission:can_modify" content="true"/>
<meta name="pdf:docinfo:producer" content="Scanner System Image Conversion"/>
<meta name="pdf:docinfo:created" content="2023-06-07T19:43:16Z"/>
<title/>
</head>
<body><div class="page"><p/>
<div class="page"><p/>
<div class="page"><p/>
<div class="page"><p/>
<div class="page"><p/>
</body></html>Exception in thread "main" org.apache.tika.exception.TikaException: Unable to extract PDF content
    at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:130)
    at org.apache.tika.parser.pdf.PDFParser.parse(PDFParser.java:212)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:298)
    at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:298)
    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:199)
    at org.apache.tika.cli.TikaCLI$OutputType.process(TikaCLI.java:1071)
    at org.apache.tika.cli.TikaCLI.process(TikaCLI.java:493)
    at org.apache.tika.cli.TikaCLI.main(TikaCLI.java:256)
Caused by: java.io.IOException: Unable to end a page
    at org.apache.tika.parser.pdf.AbstractPDF2XHTML.endPage(AbstractPDF2XHTML.java:817)
    at org.apache.tika.parser.pdf.PDF2XHTML.endPage(PDF2XHTML.java:154)
    at org.apache.pdfbox.text.PDFTextStripper.processPage(PDFTextStripper.java:365)
    at org.apache.tika.parser.pdf.PDF2XHTML.processPage(PDF2XHTML.java:137)
    at org.apache.tika.parser.pdf.AbstractPDF2XHTML.processPages(AbstractPDF2XHTML.java:1370)
    at org.apache.pdfbox.text.PDFTextStripper.writeText(PDFTextStripper.java:238)
    at org.apache.tika.parser.pdf.PDF2XHTML.process(PDF2XHTML.java:108)
    ... 7 more
Caused by: org.apache.tika.exception.ZeroByteFileException: InputStream must have > 0 bytes
    at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:185)
    at org.apache.tika.parser.pdf.AbstractPDF2XHTML.doOCROnCurrentPage(AbstractPDF2XHTML.java:559)
    at org.apache.tika.parser.pdf.AbstractPDF2XHTML.endPage(AbstractPDF2XHTML.java:806)
    ... 13 more

文件信息:

ls -alt somefile
-rw------- 1 1000 1000 1752059 Jul 20 18:07 somefile

解决方案

问题原因

该异常是Tika在尝试对PDF页面执行OCR(光学字符识别)时,生成的页面图像输入流为空导致的。可能的诱因包括:PDF页面存在损坏的图像对象、Tika与PDFBox的OCR集成逻辑存在版本兼容问题、或PDF文件的内部结构存在非常规的图像存储方式。

处理步骤

  • 临时绕过OCR:执行Tika时添加--no-ocr参数,跳过OCR流程,优先获取文件元数据和结构:
    java -jar tika-app-2.8.0.jar --no-ocr somefile
    
  • 升级Tika版本:2.8.0版本可能存在PDF图像处理的已知bug,升级到最新稳定版可修复部分兼容性问题。
  • 修复PDF文件:使用qpdf工具检查并修复PDF的结构问题:
    1. 检查文件完整性:
      qpdf --check somefile
      
    2. 修复损坏结构:
      qpdf somefile fixed_somefile
      
      再用Tika处理修复后的fixed_somefile。
  • 验证页面图像可用性:使用Apache PDFBox的PDFRenderer手动提取页面图像,确认是否能正常获取图像数据,以此判断是文件本身问题还是Tika的OCR逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:17:04