PyMuPDF 是什么
PyMuPDF(导入名 fitz)是常用的 PDF 解析库:逐页取文本、按块取坐标、识别基础表格,速度较快、依赖较少,适合处理带文本层的电子版 PDF。它同时支持渲染页面为图片,常用于「先判断是否是扫描件,再决定是否走 OCR」的预处理判断。
基本信息
| 安装 | pip install pymupdf,导入名为 fitz |
|---|---|
| 适用 | 有文本层的电子版 PDF |
| 不适用 | 纯扫描图片版 PDF,取文本结果为空 |
| 常用方法 | get_text、get_text("blocks")、find_tables、get_pixmap |
逐页提取
逐页提取
import fitz # PyMuPDF,安装包名 pymupdf
doc = fitz.open("manual.pdf")
print("页数", doc.page_count)
page = doc[0]
print(page.get_text("text")[:200])
for b in page.get_text("blocks")[:3]: # (x0, y0, x1, y1, text, ...)
print(b[:4], repr(b[4][:40]))基础表格识别
基础表格识别
tabs = page.find_tables()
if tabs.tables:
rows = tabs[0].extract() # 二维列表
print(rows[:2])典型用法
- 批量入库:遍历每页取文本,按页码写入切片元数据,便于引用定位
- 版面判断:先用 get_text 的结果长度判断是否扫描件,为空则转走 OCR
- 多栏重排:取 blocks 模式的坐标,按先上后下、先左后右重新排序
- 单页转图片:get_pixmap 渲染高清图用于人工核对或送 OCR
- 定位取证:按坐标回定位到原页面区域,用于人工复核疑难切片
取文本模式对照
| 模式 | 返回内容 | 适用 |
|---|---|---|
| text | 纯文本,阅读顺序按内部规则 | 快速预览、简单文档 |
| blocks | 带坐标的文本块 | 多栏重排、版面分析 |
| dict | 含字体、字号、行结构的完整信息 | 精细处理、标题识别 |
| words | 逐词与坐标 | 需要精确行内定位时 |
get_text 支持 text、blocks、dict 等模式;要按阅读顺序重排多栏内容时优先用 blocks 或 dict 配合坐标。
扫描版 PDF 直接取文本会是空字符串或极短内容,这不是解析失败;先判断文本层是否存在,再决定是否接入 OCR。
入库流程建议
- 逐页提取时把文件名与页码写进元数据,后续引用才能回到具体页面
- 先统计每页文本长度,长度异常偏低的页多半是扫描页,单独列出转走 OCR
- 表格页单独用表格接口处理,避免表格文字被当作正文混进段落
- 多栏文档用坐标重排后再切分,否则左右栏内容会交错在一起
- 批量任务记录失败页清单,便于人工复核,而不是整份文档重跑一遍