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的结构问题:- 检查文件完整性:
qpdf --check somefile - 修复损坏结构:
再用Tika处理修复后的qpdf somefile fixed_somefilefixed_somefile。
- 检查文件完整性:
- 验证页面图像可用性:使用Apache PDFBox的
PDFRenderer手动提取页面图像,确认是否能正常获取图像数据,以此判断是文件本身问题还是Tika的OCR逻辑问题。
内容的提问来源于stack exchange,提问作者Prashant Saraswat
相关产品推荐
相关产品推荐

