pdfplumber 是什么
pdfplumber 把 PDF 拆到字符级别,可以取文本、表格以及线条与矩形等版面对象,还能看到每个字符的坐标与字体。它的速度不如底层库快,但调试表格结构、核对单元格位置时更直观,适合对解析精度要求高、需要人工介入的文档处理场景。
基本信息
| 安装 | pip install pdfplumber |
|---|---|
| 适用 | 有文本层的电子版 PDF,尤其是带表格的报告与报表 |
| 常用对象 | page.chars、page.lines、page.rects、page.extract_tables |
| 局限 | 纯扫描件没有文本层,必须先做 OCR |
文本与表格
文本与表格
import pdfplumber
with pdfplumber.open("report.pdf") as pdf:
page = pdf.pages[0]
print(page.extract_text())
for t in page.extract_tables():
print(t[:2]) # 行列表,单元格可能为 None查看字符与框线
查看字符与框线
chars = page.chars[:3] # 每个字符带坐标与字体
lines = page.lines[:3] # 表格框线
tables = page.find_tables()
print(tables[0].bbox) # 表格区域坐标使用要点
- 先用 find_tables 看表格被识别成几块,再决定是否调 table_settings
- 单元格返回 None 是常态,入库前必须补默认值并做类型校验
- 跨页表格要按页拼接并去掉重复表头,否则表格会被切成两段
- 按坐标把表格区域从正文里剔除,避免同一内容在正文与表格里各出现一次
- 解析结果抽样打印到日志,便于批量任务回溯异常页
与同类工具的分工
| 工具 | 强项 | 典型用途 |
|---|---|---|
| pdfplumber | 字符级坐标与框线调试 | 表格结构核对、疑难页排查 |
| PyMuPDF | 速度快、接口全 | 大批量正文提取与版面判断 |
| 专用表格工具 | 按线框或无框模式批量抽表 | 成册报表转 CSV |
extract_tables 支持 table_settings 调整线策略;无线框表格常需调参数,或者改用按空白分布推断列的方案。
表格数据直接入库前要做列对齐检查:列错位会让答案引用到错误数字,这类错误比检索不到更难被发现。
与快速解析库的搭配
- 大批量正文提取交给更快的库处理,把本库留给疑难页排查
- 解析结果异常时,用字符坐标对照另一套输出,判断是版式问题还是代码问题
- 表格统一走同一套抽取逻辑,避免同一份文档里的表格因工具不同而格式不一致
- 把调好的表格参数按文档模板分类保存,同类报表直接复用
- 解析脚本保留原始坐标输出,入库后发现错位时能回查是哪一步出的问题