AI Skills(智能体技能)

用 Python 批量提取 PDF 指定区域文字并导出 Excel:从框选到全自动运行

如果你手头有一批格式相同的 PDF,比如发票、对账单、货运单或月度报表,每次都要从固定位置复制日期、金额、单号,再粘贴进 Excel,那么这类工作很适合交给一款基于 Python 的开源小工具完成。它把 PDF 预览、区域框选、OCR 识别、区域截图和 Excel 导出放在同一个 tkinter 界面里,底层用 PyMuPDF 渲染页面和裁剪区域,用 easyocr 处理中英文识别,用 openpyxl 写入表格。你只需要在第一份文件上把区域框一次,之后就能选择逐个审核或全自动批处理,最终得到一份按文件顺序排列的结果表。相比通用 OCR 软件对整页做识别、再靠正则去猜字段位置,框选区域的方式更贴近“我知道我要哪一块”的实际需求。

PDF 预览界面中用矩形框选中发票金额区域的示意

先搞清楚这类工具解决的是什么问题

整页 OCR 的流程是“识别全部文字,再从结果里找字段”,问题在于 PDF 的版式并不稳定:同一个金额栏,在不同文件里可能因为扫描偏移、页眉页脚变化或者表格换行而落到不同位置。一旦你用正则表达式或“第几行第几个词”来定位,换一批文件就很容易错位。

按区域提取的思路正好相反:位置由你人工确定,工具只负责把这一块图像交给 OCR。这样做的代价是它默认所有 PDF 的版式一致,收益是识别范围被压到最小,干扰文字少,准确率和稳定性通常更好。搜索资料中的这款工具还额外做了两件事:框选区域时可以拖动和缩放,方便微调;识别前用 OpenCV 做灰度化、自适应阈值和形态学处理,让扫描件里偏淡的字更容易被识别出来。

需要提醒的是,区域坐标依赖页面渲染尺寸。如果你中途更换了 PDF 的页面尺寸、缩放比例或扫描分辨率,之前框好的位置就可能偏移,这一点在后面的排错部分会展开。

安装准备:Python 环境和四个依赖

1. 准备 Python

建议使用 Python 3.9 以上的版本,并且养成在虚拟环境里安装依赖的习惯,避免和系统里其它项目冲突:

纯文本
mkdir pdf-region-ocr
cd pdf-region-ocr
python -m venv venv

激活虚拟环境,Windows 下执行 venvScriptsactivate,macOS 和 Linux 下执行 source venv/bin/activate。命令行前面出现 (venv) 就表示生效了。

2. 安装依赖库

根据这款工具的说明,它依赖以下库:

纯文本
pip install pymupdf easyocr openpyxl opencv-python
  • pymupdf 负责打开 PDF、渲染页面为图像、按矩形区域裁剪;
  • easyocr 负责文字识别,支持中文和英文;
  • openpyxl 负责把结果写入 .xlsx;
  • opencv-python 用于识别前的图像预处理。

easyocr 首次运行时会下载识别模型,体积不小,建议在网络稳定的环境下先跑一次,把模型缓存下来,之后再批量处理就不需要联网了。

3. 确认 tkinter 可用

界面是用 tkinter 写的,Windows 和 macOS 的官方 Python 安装包通常自带。如果启动时报 ModuleNotFoundError: No module named 'tkinter',Linux 下一般需要单独安装,例如 Ubuntu 系可以执行:

纯文本
sudo apt install python3-tk

安装完成后,把开源项目下载到本地,进入项目目录运行主程序入口(以项目实际文件名和启动说明为准)即可看到界面。

框选区域:一次框好,后面复用

打开界面后,通常是先选择 PDF 文件或包含 PDF 的文件夹,工具会把第一页渲染到预览区。接下来是核心动作:

  1. 在预览页上按住鼠标拖出一个矩形,覆盖你要提取的那块内容,比如发票右上角的开票日期。
  2. 如果位置不准,用边线上的控制点拖动调整,或者直接拖动整个框平移。
  3. 一个页面可以添加多个区域,每个区域对应结果表里的一列。日期、金额、发票号这类字段分别框一次即可。
  4. 注意区分区域类型。工具用不同颜色标示用途,比如蓝色代表 OCR 文字识别、绿色代表区域截图,选中的区域显示为红色。如果你要的是图片而不是文字,就把该区域设成截图类型。
  5. 框选完成后检查一下区域是否覆盖到了文字边缘,尤其是字迹贴近边框的扫描件,留出一点余量通常更稳。

这一步的细致程度直接决定后面返工的量。建议拿一份“最差”的样本做基准:字最淡的、扫描最歪的、版式最复杂的那一份。用它调好的框,对其它文件一般也够用。

配置输出:Excel 路径与日期格式

进入输出设置时,重点看两项。

第一项是结果文件位置和字段顺序。结果会写进一个 .xlsx 文件,每个区域占一列,每份 PDF 占一行,一般还会带上来源文件名,方便你回溯是哪份文件出的问题。

第二项是日期格式化。扫描件里的日期常常是 20251209 这种连写形式,直接进表格不便排序和统计。工具提供了自定义格式化规则,可以把识别出的文本按你的规则转换成 2025年12月09日 之类的样式,并且支持实时预览。设置时建议用几份不同写法的样本试一下,确认规则不会把 2025-12-09 和 2025.12.09 这类变体弄错。

截图类区域的处理略有不同,工具会自动生成唯一文件名来避免重名覆盖,也会规避特殊字符导致的保存失败。你只需要指定截图存放的目录。

批量运行:先手动审核,再全自动

工具提供了两种模式,这个设计值得按顺序用一遍,而不是直接上全自动。

模式一:手动审核(逐个确认)

每处理完一份 PDF,界面会停下来展示识别结果,你可以核对这一份的文字是否对、截图是否对,确认无误再进入下一份。适合两种情况:第一次跑一批新类型文件;或者这批文件数量不多但错一个就麻烦,比如涉及金额的报销和结算。

模式二:全自动(批量跑完)

确认前几份的框选位置和格式规则都稳定之后,切换到全自动模式,选择文件夹,工具会按顺序处理完全部 PDF,直接汇总到 Excel,中途不需要人工干预。这才是真正省时间的环节:几十上百份文件的重复复制粘贴,变成点一次按钮。

多份 PDF 批量处理后汇总为一张 Excel 表格的流程示意

结果校验与常见坑

跑完不要直接交付,至少抽检一部分。以下是几个容易出问题的地方。

识别准确率不是恒定的。 easyocr 对清晰印刷体表现较好,但遇到低分辨率扫描、倾斜页面、表格线穿过文字、印章遮盖等情况,错字漏字仍会出现。手写体、艺术字和小字号数字的风险更高。如果某个字段对准确性要求高,建议保留手动审核模式,或者在 Excel 里加一列人工复核标记。

页面尺寸和渲染比例变了,框就废了。 同一批文件应当来自同一个模板、同一套扫描参数。如果混进了不同尺寸的页面,或者你在预览时改过缩放,区域坐标就可能偏移,表现为识别结果整体错位。处理前先确认这批文件的页面尺寸一致。

首次运行会下载模型。 网络不通或代理设置有问题时,easyocr 会在初始化阶段卡住或报错。先单独跑一次让它把模型缓存好,再进入批量流程。

路径里有中文和空格。 输出目录和源文件夹尽量用简短路径,避免深层嵌套。截图文件名由工具自动生成唯一标识,但目录本身如果有权限问题,写文件会静默失败,跑完发现少了截图就是这类原因。

别把整个流程当成零维护。 这批文件处理完,规则和区域配置通常只对当前模板有效。下一批换了版式,重新框一次区域比硬调参数更省事。

适合谁用,不适合谁用

如果你的场景是“固定版式的 PDF、固定位置的几个字段、数量多、重复度高”,比如发票信息登记、报表指标汇总、运单信息录入,这套框选加 OCR 加 Excel 导出的组合能明显减少手工劳动,而且全程本地运行,文件不上传到第三方服务。

如果你要做的是整页全文检索、复杂表格结构还原、或者每份文件版式都不一样,那按区域提取就不是合适的工具,应该考虑表格结构识别类的库或者更强的文档解析方案。先判断自己的任务属于哪一类,再决定要不要投入时间装环境,会比盲目上手更划算。

热门话题

52okp 是一名关注人工智能、开源软件与效率工具的技术内容创作者,长期实践 Stable Diffusion、ComfyUI、AI 智能体、MCP、Codex 和各类开源项目。通过实际安装、配置与测试,整理可复现的操作教程、问题排查方法和工具使用经验。

登录用户才能发表评论! 登录账户

取消回复

评论列表 (1条):

加载更多评论 Loading...

延伸阅读:

如何挑选自动文件整理工具:按隐私要求、规则复杂度和上手成本做试用

文件越堆越多,手动整理耗时费力,但自动工具选错更麻烦:规则型配置死板,云端AI又不得不把内容交给第三方。这篇教程不按功能...

52okp
2026-10-09

用苹果快捷指令批量缩小照片:选择图片、调整尺寸并另存副本

用手机临时提交一批材料时,最容易被卡住的往往不是内容本身,而是照片体积超限:单张能传,十几张一起传就提示过大,或者平台要...

52okp
2026-10-13

用 Python 按模板生成办公报告:从 Excel 数据到 Word 文档的自动填充

每周把 Excel 项目进度、负责人和日期重复填进 Word 周报,既费时也容易漏项;Python 可以按模板批量生成文...

52okp
2026-09-26

在 VS Code 中搭建 Python 办公自动化环境:从解释器选择到依赖安装

文章以 VS Code 和 Python 为基础,讲解办公自动化项目的完整环境搭建流程:准备编辑器、解释器与 Pytho...

52okp
2026-09-22

用 7-Zip 分卷压缩并校验大文件:设置分卷大小、密码和解压检查

大文件受网盘、邮箱附件或 FAT32 单文件限制时,7-Zip 可按指定大小分卷,并为 7z 格式设置 AES-256 ...

52okp
2026-10-04
    返回顶部