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

如何解决Tabula读取PDF时的JSONDecodeError及参数错误问题

解决Tabula读取PDF时的JSONDecodeError及参数错误问题

问题根源

  • JSONDecodeError是因为部分PDF包含unicode_escape无法解析的特殊控制字符(如不可见控制码、非标准编码字符)
  • 使用rb模式触发参数错误,是因为tabula.read_pdf不支持直接传入二进制文件对象,参数类型/顺序不符合接口要求

解决方案

1. 多编码尝试+异常捕获

对每个文件依次尝试多种编码,捕获异常后自动切换编码,适配不同PDF的编码情况:

import tabula as tb
import os

pdf_dir = r"W:\test\Documentation\PDF\Folder"
# 常见兼容编码列表
candidate_encodings = ['unicode_escape', 'utf-8', 'latin-1', 'cp1252']

for filename in os.listdir(pdf_dir):
    file_path = os.path.join(pdf_dir, filename)
    print(f"正在处理: {filename}")
    processed = False
    
    for enc in candidate_encodings:
        try:
            dfs = tb.read_pdf(file_path, pages='all', encoding=enc)
            print(f"编码{enc}处理成功,提取到表格:")
            print(dfs)
            processed = True
            break
        except Exception as e:
            print(f"编码{enc}失败: {str(e)}")
    
    if not processed:
        print(f"{filename}所有编码尝试均失败,已跳过")

2. 手动清理JSON控制字符

绕开Tabula内置的JSON解析,先获取原始JSON字符串,移除无效控制字符后再解析:

import tabula as tb
import os
import json
import re

def sanitize_json(raw_json):
    # 移除JSON中不允许的控制字符
    return re.sub(r'[\x00-\x1F\x7F-\x9F]', '', raw_json)

pdf_dir = r"W:\test\Documentation\PDF\Folder"

for filename in os.listdir(pdf_dir):
    file_path = os.path.join(pdf_dir, filename)
    print(f"正在处理: {filename}")
    try:
        # 获取原始JSON输出
        raw_json_str = tb.read_pdf(file_path, pages='all', output_format='json', encoding='unicode_escape')
        cleaned_json = sanitize_json(raw_json_str)
        # 解析为JSON并转换为DataFrame
        json_data = json.loads(cleaned_json)
        dfs = tb.io.json.json_to_dataframe(json_data)
        print(f"处理成功,提取到表格:")
        print(dfs)
    except Exception as e:
        print(f"处理失败: {str(e)}")

3. 更新依赖环境

旧版本Tabula-py可能存在编码兼容bug,更新到最新版本,同时确保Java环境为1.8及以上:

pip install --upgrade tabula-py

注意事项

  • 用os.path.join()拼接文件路径,避免手动写分隔符导致的跨系统问题
  • 若部分PDF仍无法处理,可尝试用PDF编辑工具重新保存(如Adobe Acrobat),修复可能的文件格式问题

内容的提问来源于stack exchange,提问作者N.H.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:33:44