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

Python使用tabula提取PDF数据时Colab与本地环境的依赖报错问题

Colab环境解决方案
  • 首先执行如下命令安装缺失的JAI依赖包,Colab预装了Java环境,只需将对应jar包放入tabula-py的依赖目录即可:
# 1. 自动获取tabula-py的安装路径
import tabula
import os
tabula_path = os.path.dirname(tabula.__file__)

# 2. 下载JPEG2000格式解析所需的JAI依赖jar包
!wget -P $tabula_path https://repo1.maven.org/maven2/com/github/jai-imageio/jai-imageio-core/1.4.0/jai-imageio-core-1.4.0.jar
!wget -P $tabula_path https://repo1.maven.org/maven2/com/github/jai-imageio/jai-imageio-jpeg2000/1.4.0/jai-imageio-jpeg2000-1.4.0.jar
  • 依赖安装完成后重启Colab运行时即可生效。
本地运行依赖安装方案
  • 前置要求:本地已安装Java 8及以上版本,且已配置好JAVA_HOME环境变量
  • 安装方式1:执行和Colab一致的Python代码获取tabula-py安装路径,手动将下载好的jai-imageio-core、jai-imageio-jpeg2000两个jar包放入该路径下即可
  • 安装方式2:无需移动jar包,调用read_pdf时增加参数指定依赖路径:
tb.read_pdf(
    # 其他原有参数不变
    java_options=["-cp", "/本地存放jai jar包的目录/*"]
)
代码修复优化

原有代码未对解析结果做合法性判断,当部分页面解析失败返回空结构时会触发IndexError,修改后代码如下:

import tabula as tb
import PyPDF2
from PyPDF2 import PdfFileReader

box = [2,0,4,13]
fc = 28.28       
for i in range(len(box)):
    box[i] *= fc

for filename in files:
    # 改用with语句自动管理文件句柄
    with open(filename,'rb') as pdftemp:
        pdfReader = PyPDF2.PdfFileReader(pdftemp)
        pagestmp = pdfReader.getNumPages()
        pages = [i+3 for i in range(pagestmp-2)] # 跳过前2页

    # 增加silent参数减少不必要的警告输出
    regions_raw = tb.read_pdf(filename, pages=pages, area=[box], output_format="json", silent=True)
    regions = []
    for item in regions_raw:
        data = item.get('data', [])
        # 多层判断避免空结构索引报错
        if data and len(data) > 0 and len(data[0]) > 0:
            regions.append(data[0][0].get('text', ''))
    print(regions)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:57:01