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)
关键修改说明
- 调整裁剪区域右边界:将
980改为990,确保「Serial Number」列完全包含在裁剪范围内。 - 添加单元格内容清洗逻辑:使用
' '.join(cell.split())自动去除多余换行和空格,将多行内容合并为单行。
内容的提问来源于stack exchange,提问作者Mark k
相关产品推荐
相关产品推荐

