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

pdfplumber提取PDF表格问题:漏列与多行单元格格式异常

PDF表格提取脚本问题修复方案

问题1:无法提取「Serial Number」列

你的裁剪区域box = (0, 35, 980, 565)右边界是980,但最后一条垂直分割线是984,这导致最后一列被裁剪区域截断,pdfplumber无法识别该列内容。只需将裁剪区域的右边界调整为大于等于984的值即可,比如990。

问题2:多行单元格内容拆分

提取时多行单元格的内容会被拆分为带换行/空格的片段,可通过遍历每个单元格,将换行符和多余空格替换为单个空格,合并成单行文本。

修改后的完整脚本

import pdfplumber

pdf_file = r"C:\Users\xxxx\Downloads\Active Aircraft Register.pdf"
# 调整裁剪区域右边界,包含最后一列
box = (0, 35, 990, 565)
explicit_vertical_lines = [18, 57, 127, 325, 518, 713, 830, 920, 984]

all_tables = []

with pdfplumber.open(pdf_file) as pdf:
    for page in pdf.pages:
        cropped_page = page.crop(bbox=box)
        table = cropped_page.extract_table(table_settings={
            "vertical_strategy": "explicit",
            "explicit_vertical_lines": explicit_vertical_lines,
            "horizontal_strategy": "text",
        })
        if table:
            # 处理多行单元格,合并为单行
            cleaned_table = []
            for row in table:
                cleaned_row = []
                for cell in row:
                    if cell:
                        # 替换换行符和多个空格为单个空格
                        cleaned_cell = ' '.join(cell.split())
                        cleaned_row.append(cleaned_cell)
                    else:
                        cleaned_row.append(None)
                cleaned_table.append(cleaned_row)
            all_tables.extend(cleaned_table)

# 检查提取结果
if not all_tables:
    print("未在PDF中找到表格。")
else:
    for row in all_tables[:10]:
        print(row)

关键修改说明

  1. 调整裁剪区域右边界:将980改为990,确保「Serial Number」列完全包含在裁剪范围内。
  2. 添加单元格内容清洗逻辑:使用' '.join(cell.split())自动去除多余换行和空格,将多行内容合并为单行。

内容的提问来源于stack exchange,提问作者Mark k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 19:52:42