找回密码
 立即注册
首页 业界区 业界 实用代码工具:Python打造PDF选区OCR / 截图批量处理工 ...

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

距佰溘 3 小时前
  1. # 前言
  2. 在日常办公和开发中,我们经常会遇到这样的需求:从大量PDF文件的**指定区域**提取文本(比如发票的日期、金额,报表的关键指标),或者对指定区域进行截图并汇总到Excel中。手动逐个处理效率极低,而通用的PDF OCR工具又无法精准定位区域。
  3. **代码已开源在Github :[https://github.com/ChenAI-TGF/PDF_SnapOCR](https://github.com/ChenAI-TGF/PDF_SnapOCR)**
  4. 今天给大家分享一款我开发的Python工具——**PDF区域OCR/截图逐个处理工具**,它完美解决了上述痛点,支持手动审核+全自动批量处理,还内置了区域拖动缩放、Excel自动导出等实用功能,并且配备完善的UI界面,使用门槛极低。下面详细拆解它的功能和实现原理。先看一下整个程序的界面:
  5. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3e6a07550480477e8aa95bb2b807e3fb.png)
  6. # 一、工具核心功能详解
  7. 这款工具基于`tkinter`构建可视化界面,整合了`PyMuPDF`(PDF处理)、`easyocr`(OCR识别)、`openpyxl`(Excel导出)等库,功能覆盖从PDF区域选择到结果汇总的全流程,具体如下:
  8. ## 1. 核心处理能力
  9. | 功能点 | 详细说明 |
  10. |--------|----------|
  11. | 精准区域OCR识别 | 可框选PDF任意区域进行文字提取,支持中文+英文识别;内置OpenCV图像预处理(灰度化、自适应阈值、形态学操作),提升识别准确率 |
  12. | 区域截图保存 | 支持将框选区域保存为图片,自动处理路径和文件名冲突(UUID生成唯一名称),避免特殊字符导致的保存失败 |
  13. | 自定义日期格式化 | 针对OCR识别的日期文本,可按不同规则自动格式化(例:20251209 → 2025年12月09日),用户可自行设置,支持实时预览格式化效果 |
  14. ## 2. 交互与操作体验
  15. ### 区域可视化管理 :
  16. 框选的区域会在PDF预览界面显示(不同类型有不同颜色:OCR=蓝色/截图=绿色,选中=红色)
  17. 支持**拖动**(边线控制点)和**缩放**(右下角控制点),操作直观
  18. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2d5645c35d3f41b6b920e5afd610e9f6.png)
  19. ### 区域模板继承
  20. 为第一个PDF设置的区域会自动保存为模板,切换后续PDF时自动继承,无需重复框选;修改区域后模板实时更新,同时 支持**拖动**(边线控制点)和**缩放**(右下角控制点)上一个PDF保存下来的模版
  21. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/cf8be9208f114baaa1fcc5483782e890.png)
  22. ### 手动模式 - OCR结果审核与修改 :
  23. 处理当前PDF后,所有OCR识别结果会生成**可编辑输入框**,支持手动审核、修正识别错误(截图模式仅显示保存路径)
  24. 编辑后的结果实时生效,点击「保存并下一个」可将修改后的内容写入Excel,同时自动切换到下一个PDF文件
  25. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/ace8716e488f41f0ad5761e41c488348.png)
  26. ### 全自动模式 - 一键批量处理所有PDF :
  27. 切换到全自动模式后,基于已设置的区域模板,点击「批量处理所有PDF」可**后台线程执行**(不卡死界面),避免单线程卡顿
  28. 实时显示处理进度(当前处理第N个/总数量 + 文件名),每处理10个文件自动保存一次Excel,防止数据丢失
  29. 处理完成后弹窗提示结果文件路径,全程无需人工干预
  30. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/031559e3bf054e5e8375e8596dd1da43.png)
  31. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/13a1f3093f7340d686e4349d43ffe550.png)
  32. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c2ecba22c9a740069e45dd044e4c7fdc.png)
  33. ### 结果导出 - Excel一体化存储(文本+截图) :
  34. 纯文本结果(OCR识别/修改后内容)与截图文件**一体化写入Excel**,截图自动插入对应单元格并适配尺寸(最大宽度150px,等比例缩放)
  35. 自动调整Excel列宽/行高适配内容,截图区域单元格标注清晰,文本区域可直接编辑
  36. 结果文件保存在PDF文件夹下(命名:PDF处理结果.xlsx),关闭程序时才清理临时截图文件,确保Excel中图片正常显示
  37. ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9f9c5deb37374da28c463eeb4d8b1b16.png)
  38. # 二、环境准备与安装
  39. 使用前需安装以下依赖库,建议在虚拟环境中执行:
  40. ```bash
  41. # 核心依赖
  42. pip install pymupdf easyocr openpyxl
  43. # 辅助依赖(数据处理/图像/界面)
  44. pip install pandas opencv-python pillow numpy tkinter
复制代码
注意:tkinter通常随Python自带,若缺失可根据系统安装(如Ubuntu:sudo apt-get install python3-tk)。
三、代码核心原理简析

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


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


  • 画布(Canvas)绑定鼠标事件(点击/拖动/释放),实现区域框选、拖动、缩放功能;
2.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的预览。
3.png

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


  • 在PDF预览画布上按住鼠标左键拖动,框选需要处理的区域;
  • 在右侧“区域设置”面板:

    • 输入“区域名称”(如“开票日期”“金额”);
    • 选择“处理方式”(OCR识别/截图保存);
    • 若选OCR,可勾选“是否进行日期格式化”,实时预览格式化效果;

  • 点击“添加当前区域”,区域会显示在画布上,同时出现在“已选区域”列表中;
  • 如需调整区域:点击画布上的区域(变红),可拖动位置或拖动右下角控制点缩放。
4.png

步骤4:选择处理模式

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


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


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

打开生成的Excel文件:

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

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

  • 工具核心价值:精准定位PDF区域+灵活的处理模式+智能Excel导出,解决批量PDF处理的效率问题;
  • 核心技术栈:PyMuPDF(PDF)+easyocr(OCR)+openpyxl(Excel)+tkinter(GUI);
  • 易用性设计:区域模板继承、快捷键、状态栏提示、自动清理临时文件,降低使用门槛。
如果日常工作中需要处理大量PDF的指定区域,这款工具能极大提升效率,建议根据实际需求微调日期格式化规则或OCR预处理参数,适配不同场景的PDF文件。
[code][/code]
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册