首页/AI/RAG 与向量库速查/PyMuPDF 提取 PDF 文本与坐标

PyMuPDF 提取 PDF 文本与坐标

PyMuPDF(导入名 fitz)是常用的 PDF 解析库:逐页取文本、按块取坐标、识别基础表格,速度快、依赖少,适合电子版 PDF 的文本抽取。

RAG 与向量库速查AI更新于 2026-10-13

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
  • 表格页单独用表格接口处理,避免表格文字被当作正文混进段落
  • 多栏文档用坐标重排后再切分,否则左右栏内容会交错在一起
  • 批量任务记录失败页清单,便于人工复核,而不是整份文档重跑一遍

易错点

  • fitz 是 PyMuPDF 的历史导入名,与同名渲染项目无关,安装命令是 pip install pymupdf
  • 扫描版 PDF 直接取文本是空的,需要走 OCR 或版面解析工具
  • 多栏排版直接按默认顺序取文本,左右栏内容交错,切片语义混乱
  • 把页码丢在循环外,入库后无法回定位到原文页面

数据来源与参考

  • PyMuPDF 官方文档(pymupdf.readthedocs.io)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌