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

如何正确读取PDF文件指定区域的文本内容?

PDF指定区域文本提取可行方案

方案1:PyMuPDF定向坐标提取(适配原生可编辑PDF,精度最高)

这个方案可以完全避开PyPDF2裁剪无效的问题,不需要修改PDF页面结构,直接通过坐标过滤提取目标区域内容:

  • 核心逻辑:PyMuPDF读取文本时支持通过clip参数指定提取范围,只会返回落在指定矩形区域内的文本,不存在区域外内容漏过滤的问题。
  • 参考实现代码:
import fitz
# 安装命令:pip install pymupdf

# 加载目标PDF
pdf_doc = fitz.open("target.pdf")
# 选择需要处理的页码,索引从0开始
target_page = pdf_doc[0]
# 定义目标区域坐标:格式为(区域左边界x, 区域上边界y, 区域右边界x, 区域下边界y),PDF默认坐标原点在页面左下角,单位为印刷点
target_area = fitz.Rect(72, 650, 522, 720)
# 直接提取指定区域内的文本
extract_result = target_page.get_text(clip=target_area)
  • 坐标获取方式:可以先调用target_page.get_text("blocks")打印页面所有文本块的坐标与对应内容,对照定位目标区域的坐标范围即可。

方案2:优化流程的区域OCR识别(适配扫描版PDF、原生提取乱码的PDF)

之前Pytesseract运行失败基本是两类原因:一是只安装了Python的pytesseract包装库,没有安装Tesseract识别引擎本体;二是PDF转图、裁剪的中间步骤出问题,导致图片格式不符合识别要求。可以直接在渲染PDF阶段就截取目标区域,减少中间出错概率:

  • 参考实现代码:
import fitz
import pytesseract
from PIL import Image
# 前置要求:先安装Tesseract识别引擎本体,Windows系统如果没配置环境变量,需要手动指定程序路径
# pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

pdf_doc = fitz.open("target.pdf")
target_page = pdf_doc[0]
target_area = fitz.Rect(72, 650, 522, 720)
# 直接渲染目标区域为300DPI的图片,跳过整页渲染、二次裁剪步骤
area_pixmap = target_page.get_pixmap(clip=target_area, dpi=300)
# 转换为PIL图片对象
area_img = Image.frombytes("RGB", [area_pixmap.width, area_pixmap.height], area_pixmap.samples)
# 识别时需要中文就指定chi_sim语言包,中英文混合就用chi_sim+eng
ocr_result = pytesseract.image_to_string(area_img, lang="chi_sim+eng")
  • 排查技巧:如果OCR还是报错,先随便找一张本地普通PNG图片跑识别测试,先确认Tesseract本体安装、环境变量配置正常,再调整PDF渲染参数。

避坑提醒:PyPDF2的cropbox属性设计目的是调整页面可视/打印范围,不会实际删除裁剪区域外的内容流,所以提取文本时会带出区域外的“不可见内容”,这是库本身的设计逻辑,不是使用方法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:15:38