实用代码工具: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文件。

相关文章
|
7天前
|
数据采集 人工智能 安全
|
16天前
|
云安全 监控 安全
|
3天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
283 163
|
1天前
|
机器学习/深度学习 自然语言处理 机器人
阿里云百炼大模型赋能|打造企业级电话智能体与智能呼叫中心完整方案
畅信达基于阿里云百炼大模型推出MVB2000V5智能呼叫中心方案,融合LLM与MRCP+WebSocket技术,实现语音识别率超95%、低延迟交互。通过电话智能体与座席助手协同,自动化处理80%咨询,降本增效显著,适配金融、电商、医疗等多行业场景。
289 155
|
4天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:六十九、Bootstrap采样在大模型评估中的应用:从置信区间到模型稳定性
Bootstrap采样是一种通过有放回重抽样来评估模型性能的统计方法。它通过从原始数据集中随机抽取样本形成多个Bootstrap数据集,计算统计量(如均值、标准差)的分布,适用于小样本和非参数场景。该方法能估计标准误、构建置信区间,并量化模型不确定性,但对计算资源要求较高。Bootstrap特别适合评估大模型的泛化能力和稳定性,在集成学习、假设检验等领域也有广泛应用。与传统方法相比,Bootstrap不依赖分布假设,在非正态数据中表现更稳健。
218 112
|
10天前
|
SQL 自然语言处理 调度
Agent Skills 的一次工程实践
**本文采用 Agent Skills 实现整体智能体**,开发框架采用 AgentScope,模型使用 **qwen3-max**。Agent Skills 是 Anthropic 新推出的一种有别于mcp server的一种开发方式,用于为 AI **引入可共享的专业技能**。经验封装到**可发现、可复用的能力单元**中,每个技能以文件夹形式存在,包含特定任务的指导性说明(SKILL.md 文件)、脚本代码和资源等 。大模型可以根据需要动态加载这些技能,从而扩展自身的功能。目前不少国内外的一些框架也开始支持此种的开发方式,详细介绍如下。
750 5