使用tabula-py时出现Apache PDFBox警告的解决方法咨询
问题描述
使用tabula-py解析PDF时出现以下警告:
Apr 24, 2024 10:15:55 AM org.apache.pdfbox.pdmodel.PDDocument importPage
WARNING: inherited resources of source document are not imported to destination page
Apr 24, 2024 10:15:55 AM org.apache.pdfbox.pdmodel.PDDocument importPage
WARNING: call importedPage.setResources(page.getResources()) to do this
已尝试重新安装tabula-py、更新Java版本,问题仍未解决。
解决方案
1. 快速屏蔽警告(推荐)
这个警告来自tabula-py底层依赖的PDFBox库,不影响表格提取的核心功能,直接屏蔽Java日志的警告输出即可。在Python代码开头添加以下配置:
import os import tabula # 设置JVM日志级别为ERROR,屏蔽WARNING信息 os.environ["JAVA_OPTS"] = "-Dorg.slf4j.simpleLogger.defaultLogLevel=error" # 之后正常调用tabula的解析方法 df = tabula.read_pdf("your_file.pdf", pages="all")
2. 预处理PDF文件(解决根源问题)
警告的本质是PDF页面继承了文档级的资源,未单独嵌入页面。可以用Ghostscript或PDF编辑工具重新生成PDF,强制嵌入所有页面资源:
使用Ghostscript的命令行处理:
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dNOPAUSE -dBATCH -dPDFSETTINGS=/prepress -sOutputFile=processed.pdf input.pdf
用处理后的processed.pdf再进行tabula解析,大概率不会再触发警告。
3. 更新底层依赖的tabula-java版本
tabula-py依赖tabula-java,而tabula-java使用的PDFBox版本可能存在该警告。可以手动下载最新版的tabula-java jar包,指定tabula-py使用它:
import tabula # 替换为你下载的最新tabula-java.jar路径 tabula.JAR_PATH = "/Users/yourname/Downloads/tabula-java-1.0.5-jar-with-dependencies.jar" # 正常执行解析操作 df = tabula.read_pdf("your_file.pdf")
内容的提问来源于stack exchange,提问作者Mohammed H Abbadi

