实用代码工具:Python打造PDF选区OCR / 截图批量处理工具(支持手动/全自动模式)

简介: 一款基于Python的PDF区域OCR与截图工具,支持精准框选、文字识别、图片截取及Excel一键导出。内置手动审核与全自动批量处理模式,结合PyMuPDF、easyocr等技术,实现高效、可视化的PDF数据提取,适用于发票、报表等场景,显著提升办公效率。

前言

在日常办公和开发中,我们经常会遇到这样的需求:从大量PDF文件的指定区域提取文本(比如发票的日期、金额,报表的关键指标),或者对指定区域进行截图并汇总到Excel中。手动逐个处理效率极低,而通用的PDF OCR工具又无法精准定位区域。

代码已开源在Github :https://github.com/ChenAI-TGF/PDF_SnapOCR

今天给大家分享一款我开发的Python工具——PDF区域OCR/截图逐个处理工具,它完美解决了上述痛点,支持手动审核+全自动批量处理,还内置了区域拖动缩放、Excel自动导出等实用功能,并且配备完善的UI界面,使用门槛极低。下面详细拆解它的功能和实现原理。先看一下整个程序的界面:

main_window.png

一、工具核心功能详解

这款工具基于tkinter构建可视化界面,整合了PyMuPDF(PDF处理)、easyocr(OCR识别)、openpyxl(Excel导出)等库,功能覆盖从PDF区域选择到结果汇总的全流程,具体如下:

1. 核心处理能力

功能点 详细说明
精准区域OCR识别 可框选PDF任意区域进行文字提取,支持中文+英文识别;内置OpenCV图像预处理(灰度化、自适应阈值、形态学操作),提升识别准确率
区域截图保存 支持将框选区域保存为图片,自动处理路径和文件名冲突(UUID生成唯一名称),避免特殊字符导致的保存失败
自定义日期格式化 针对OCR识别的日期文本,可按不同规则自动格式化(例:20251209 → 2025年12月09日),用户可自行设置,支持实时预览格式化效果

2. 交互与操作体验

区域可视化管理 :

框选的区域会在PDF预览界面显示(不同类型有不同颜色:OCR=蓝色/截图=绿色,选中=红色)
支持拖动(边线控制点)和缩放(右下角控制点),操作直观
main_window1.png

区域模板继承

为第一个PDF设置的区域会自动保存为模板,切换后续PDF时自动继承,无需重复框选;修改区域后模板实时更新,同时 支持拖动(边线控制点)和缩放(右下角控制点)上一个PDF保存下来的模版

main_window2.png

手动模式 - OCR结果审核与修改 :

处理当前PDF后,所有OCR识别结果会生成可编辑输入框,支持手动审核、修正识别错误(截图模式仅显示保存路径)
编辑后的结果实时生效,点击「保存并下一个」可将修改后的内容写入Excel,同时自动切换到下一个PDF文件

main_window3.png

全自动模式 - 一键批量处理所有PDF :

切换到全自动模式后,基于已设置的区域模板,点击「批量处理所有PDF」可后台线程执行(不卡死界面),避免单线程卡顿
实时显示处理进度(当前处理第N个/总数量 + 文件名),每处理10个文件自动保存一次Excel,防止数据丢失
处理完成后弹窗提示结果文件路径,全程无需人工干预

main_window4.png
main_window5.png
main_window6.png

结果导出 - Excel一体化存储(文本+截图) :

纯文本结果(OCR识别/修改后内容)与截图文件一体化写入Excel,截图自动插入对应单元格并适配尺寸(最大宽度150px,等比例缩放)
自动调整Excel列宽/行高适配内容,截图区域单元格标注清晰,文本区域可直接编辑
结果文件保存在PDF文件夹下(命名:PDF处理结果.xlsx),关闭程序时才清理临时截图文件,确保Excel中图片正常显示

main_window7.png

二、环境准备与安装

使用前需安装以下依赖库,建议在虚拟环境中执行:

# 核心依赖
pip install pymupdf easyocr openpyxl
# 辅助依赖(数据处理/图像/界面)
pip install pandas opencv-python pillow numpy tkinter

注意:tkinter通常随Python自带,若缺失可根据系统安装(如Ubuntu:sudo apt-get install python3-tk)。

三、代码核心原理简析

工具的代码结构清晰,分为基础配置工具函数主应用类程序入口四部分,核心原理简单拆解如下:

1. 界面构建:tkinter

  • 使用tkinter+ttk构建可视化界面,分为“顶部操作栏”(模式切换、按钮、进度)、“顶右侧操作栏”、“中间预览区”(PDF画布+区域设置)、“结果编辑区”、“底部状态栏”;

main_window10.png

  • 画布(Canvas)绑定鼠标事件(点击/拖动/释放),实现区域框选、拖动、缩放功能;

main_window11.png

  • 全局快捷键绑定(bind_all),确保F2键在任意控件焦点下都能触发。

2. PDF处理:PyMuPDF(fitz)

  • 打开PDF并读取第一页(fitz.open(pdf_path)[0]);
  • 计算Canvas与PDF页面的缩放比例,实现PDF预览的等比例适配;
  • 通过page.get_pixmap(clip=rect)提取指定区域的像素数据,转换为OpenCV/PIL可处理的图像格式。

3. OCR识别:easyocr + OpenCV

  • easyocr.Reader(['ch_sim', 'en'])初始化中英双语识别器;
  • OpenCV对区域图像预处理(灰度化、自适应阈值、形态学开运算),减少噪声提升识别率;
  • 自定义format_date_text函数实现日期格式化,异常时返回原始文本,保证程序健壮性。

4. 批量处理:多线程

  • 批量处理逻辑放在独立线程(threading.Thread)中执行,避免主线程(界面)卡死;
  • 通过root.after(0, 回调函数)更新UI状态(进度、提示),符合tkinter的线程安全规则。

5. Excel导出:openpyxl + pandas

  • pandas.DataFrame存储OCR文本结果,dataframe_to_rows写入Excel;
  • openpyxl.drawing.image.Image插入截图,自动缩放图片尺寸并调整单元格大小;
  • 文本结果与截图路径分离存储,确保Excel导出时文本和图片一一对应。

四、工具使用教程(分步演示)

步骤1:启动工具

运行代码,若依赖齐全会弹出主界面,底部状态栏显示“就绪 - 请选择PDF文件夹开始操作”。

步骤2:选择PDF文件夹

点击“选择PDF文件夹”,选中存放待处理PDF的文件夹,工具会自动加载所有PDF文件(仅后缀为.pdf的文件),并显示第一个PDF的预览。

main_window8.png

步骤3:设置处理区域(核心)

  1. 在PDF预览画布上按住鼠标左键拖动,框选需要处理的区域;
  2. 在右侧“区域设置”面板:
    • 输入“区域名称”(如“开票日期”“金额”);
    • 选择“处理方式”(OCR识别/截图保存);
    • 若选OCR,可勾选“是否进行日期格式化”,实时预览格式化效果;
  3. 点击“添加当前区域”,区域会显示在画布上,同时出现在“已选区域”列表中;
  4. 如需调整区域:点击画布上的区域(变红),可拖动位置或拖动右下角控制点缩放。

main_window9.png

步骤4:选择处理模式

模式A:手动模式(逐个审核)

  1. 点击“处理当前PDF”,工具会识别所有区域并显示结果(OCR结果可直接编辑);
  2. 确认结果无误后,点击“保存并下一个”,结果写入Excel并切换到下一个PDF;
  3. 重复上述步骤,直到所有PDF处理完成。

模式B:全自动模式(批量处理)

  1. 确保第一个PDF的区域设置完成(模板已保存);
  2. 切换到“全自动模式(批量处理)”,点击“批量处理所有PDF”;
  3. 确认后工具开始批量处理,顶部进度标签显示当前处理进度;
  4. 处理完成后会弹出提示,结果保存到PDF文件夹下的“PDF处理结果.xlsx”。

步骤5:查看结果

打开生成的Excel文件:

  • OCR识别的文本直接显示在单元格中;
  • 截图自动插入对应单元格,单元格大小已适配图片尺寸;
  • 所有PDF的结果按行排列,列名为区域名称,第一列为PDF文件名。

五、总结与扩展

这款工具完美解决了PDF指定区域文本提取和截图汇总的痛点,兼顾“手动审核的精准性”和“批量处理的高效性”,适用于财务、行政、数据处理等多个场景。

  1. 工具核心价值:精准定位PDF区域+灵活的处理模式+智能Excel导出,解决批量PDF处理的效率问题;
  2. 核心技术栈:PyMuPDF(PDF)+easyocr(OCR)+openpyxl(Excel)+tkinter(GUI);
  3. 易用性设计:区域模板继承、快捷键、状态栏提示、自动清理临时文件,降低使用门槛。

如果日常工作中需要处理大量PDF的指定区域,这款工具能极大提升效率,建议根据实际需求微调日期格式化规则或OCR预处理参数,适配不同场景的PDF文件。

目录
相关文章
|
8月前
|
JSON 数据可视化 API
实用程序:解放双手!Python 打造 PDF 手写模拟器,轻松搞定手写作业
一款基于Python的PDF手写模拟器,可批量将文字以逼真手写形式填入PDF指定区域。支持中英文独立配置、手写扰动效果调节、模板复用与实时预览,告别手动抄写。开源免费,操作简便,学生党必备!GitHub已开源,欢迎Star!
751 0
|
9月前
|
存储 Linux 数据处理
实用程序:基于Python+Tkinter开发表格比对&整理工具
一款基于Python+Tkinter开发的免费开源Excel处理工具,支持表格差异比对与错乱行整理,完整保留图片,兼容.xlsx和.csv格式。操作简单,支持自定义比对列、多线程处理,解决日常办公中数据比对、行合并及图片丢失等痛点,适用于各类Excel数据清理场景。(239字)
712 12
|
8月前
|
数据采集 人工智能 文字识别
PDF 转 Markdown 神器:MinerU 2.5 (1.2B) 部署全攻略
MinerU是由OpenDataLab推出的开源PDF解析工具,支持精准布局分析、公式识别与表格提取。本文详解其2.5-2509-1.2B版本在Linux下的部署流程,涵盖环境搭建、模型下载、核心配置及实战应用,助你高效处理复杂PDF文档,提升AI数据清洗效率。
3706 3
|
7月前
|
人工智能 机器人 开发工具
2026年零基础云上及Docker本地部署OpenClaw(Clawdbot) 配置飞书机器人指南,也可集成Telegram、Discord(附避坑攻略)
2026年,OpenClaw(中文名为“数字龙虾”)凭借开源免费、灵活扩展的特性,成为AI助手领域的黑马,GitHub星标飙升至25万+,全球数十万开发者加入其生态。它不仅能实现对话交互,还能主动执行文件处理、自动化任务、多平台联动等复杂操作,堪称24小时在线的“私人AI管家”。但很多用户卡在部署环节——手动配置依赖、API密钥、渠道对接等步骤繁琐,非技术人员难以驾驭。
2374 0
|
5月前
|
JSON 文字识别 数据格式
MinerU + RAG 集成实战:从 PDF 结构化解析到精准检索
本文详解 MinerU 与 RAG 的深度集成:针对 PDF 解析导致的召回瓶颈(如双栏错序、公式表格丢失),展示如何用 MinerU 实现结构化抽取(Markdown/JSON)、提升 Top-1 召回率25%,并提供 LangChain/LlamaIndex 全链路实战代码与生产避坑指南。
1300 0
|
7月前
|
人工智能 缓存 文字识别
Python驱动的PDF信息提取与结构化输出:从文本到表格的全流程解析
本文详解Python处理PDF的三大场景:文本提取(PyPDF2/pdfplumber)、扫描件OCR(Tesseract+pdf2image)、表格结构化(Camelot/tabula),结合真实案例演示精准提取与自动化输出,助力合同、发票等业务数据高效数字化。(239字)
985 1
|
9月前
|
供应链 前端开发 安全
基于springboot的水果购物商城系统
本文探讨基于SpringBoot的水果购物系统设计与实现,分析传统水果销售模式的局限性,结合电子商务发展趋势,提出利用Java、MySQL、B/S架构等技术构建高效、安全的在线购水果平台,提升用户体验与运营效率。
|
存储 人工智能 测试技术
用AI提升测试效率:智能体平台的「需求文档管理」功能上线啦!
霍格沃兹测试开发学社推出AI智能体测试平台,全新「需求文档管理」功能助力高效测试准备。集中管理需求文档,支持多种上传方式,智能生成测试用例,提升测试效率与准确性,助力迈向智能化测试新时代。
|
9月前
|
搜索推荐 安全 BI
阿里云邮件推送支持哪些功能?附邮件群发费用价格表
阿里云邮件推送(DirectMail)是高效稳定的电子邮件群发服务,支持事务通知、批量营销等场景,具备高到达率与强系统稳定性。提供控制台、API、SMTP多种接入方式,无需自建服务器,开通即用。支持邮件模板、列表管理、个性化定制及多维度数据统计,助力企业精准触达用户。价格透明,按量付费,详情见官方页面。
709 5