尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
OCRmyPDF 批量处理实战:用 Python 脚本给扫描 PDF 批量添加可搜索文本层
OCRmyPDF 批量处理实战用 Python 脚本给扫描 PDF 批量添加可搜索文本层【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF手上一堆扫描版 PDF得挨个打开工具、选文件、等识别、存结果既耗时又容易漏。OCRmyPDF 的批量处理脚本就是为这个场景准备的它会递归找出目录下的每一个 PDF一次性加上可搜索的 OCR 文本层同时自动跳过已经含文本的文件并把原始文件归档备份。接下来带你从零跑通这个脚本讲清楚关键参数再绕开几个常见坑。快速上手第一步获取项目先把 OCRmyPDF 仓库克隆到本地批量脚本就在misc/batch.py你不需要改动项目源码直接调用即可。git clone https://gitcode.com/GitHub_Trending/oc/OCRmyPDF第二步安装依赖脚本把 OCRmyPDF 当库来调用import ocrmypdf所以系统里要先装好它各发行版都用系统包管理器直接装即可。apt install ocrmypdf第三步最小命令跑通完成前两步后进入项目目录直接运行批处理脚本。不传参数时脚本默认处理当前目录Path()下的所有 PDF日志写到项目根目录的ocr-tree.log。python3 misc/batch.py第四步换目录、换日志路径如果要处理别处的扫描件把目录作为第一个参数传入想把日志写到别处再传第二个参数。两个参数都可以省略按需组合。python3 misc/batch.py /data/scans /data/scans/ocr-run.log核心能力拆解递归扫描深层文件夹里的 PDF 一个不漏你的扫描件很少整齐地放在一个目录里通常按客户、年份、项目分了好多层子文件夹。脚本用start_dir.glob(**/*.pdf)递归遍历整棵目录树按扩展名收集文件。哪怕一个 PDF 藏在第四层子目录里也会被找到并排进处理队列你不用自己维护文件清单。智能跳过已有文本的 PDF 不会被重复识别一批文件里经常混着已经识别过的。脚本在处理前先调用ocrmypdf.pdfa.file_claims_pdfa()检测文件是否已含文本层命中就跳过就算检测漏网OCRmyPDF 抛出的PriorOcrFoundError也会被脚本捕获并记录。效果是你可以放心地对同一个目录反复运行已处理的文件不会浪费时间也不会被二次加工。归档备份原始扫描件自动留底处理后你不想失去原始扫描件。脚本顶部的archive_dir变量指定备份根目录处理前会用shutil.copy2把原文件复制过去缺失的目录会自动创建复制前先经filecompare对比归档件和原件一致就跳过。效果是每份被处理的 PDF 都能找回原始版本识别出问题时可以从备份重新处理。异常容忍个别坏文件跳过不拖垮整批扫描件里总有些刺头加密的、带数字签名的、本身已标记tagged的 PDF。脚本逐类捕获EncryptedPdfError、DigitalSignatureError、TaggedPDFError等异常把跳过原因写进日志后继续下一个文件。效果是一个坏文件不会中断整批任务跑完后翻日志就知道哪些被跳过、为什么跳过。关键代码与参数速览批处理的核心就是misc/batch.py里这一个循环不到三十行for filename in start_dir.glob(**/*.pdf): logging.info(fProcessing {filename}) if ocrmypdf.pdfa.file_claims_pdfa(filename)[pass]: logging.info(Skipped document because it already contained text) else: archive_filename archive_dir str(filename) if len(archive_dir) 0 and not filecompare(filename, archive_filename): logging.info(fArchiving document to {archive_filename}) try: shutil.copy2(filename, posixpath.dirname(archive_filename)) except OSError: Path(posixpath.dirname(archive_filename)).mkdir(parentsTrue) shutil.copy2(filename, posixpath.dirname(archive_filename)) try: result ocrmypdf.ocr(filename, filename, deskewTrue) logging.info(result) except ocrmypdf.exceptions.EncryptedPdfError: logging.info(Skipped document because it is encrypted) # 其余 PriorOcrFoundError、DigitalSignatureError 等异常同理捕获白话解读glob(**/*.pdf)负责递归找文件file_claims_pdfa(...)返回pass说明文件已有文本层直接跳过。真正的识别由ocrmypdf.ocr(filename, filename, deskewTrue)完成定义在 src/ocrmypdf/api.py 中——两个文件名相同表示原地覆盖输出直接写回原文件deskewTrue表示先校正倾斜的页面再识别歪斜扫描件的文本层会更准OCRmyPDF 支持的其他参数如language、image_dpi也能在这里按需加上。另外两个变量值得留意archive_dir默认是/pdfbak改成空字符串就关闭备份日志以追加模式filemodea写入每次运行都会继续往下记。场景实战财务把一年发票扫描件变成可检索档案你是财务每月收到上百份发票扫描件月底被追问某笔报销时只能逐份翻找。把某个月的扫描 PDF 丢进一个目录跑一遍python3 misc/batch.py所有发票都会带上可搜索文本层原件同步归档。收益是可以验证的之后在 PDF 阅读器里按金额、供应商关键词直接搜索定位不再靠肉眼翻页。研究团队整库扫描文献一次到位研究生手头有一批扫描版论文 PDF想复制引用原文做笔记但复制出来是空白。把整个文献目录树交给批处理脚本已含文本的文件自动跳过扫描件统一识别重复运行也安全。收益是处理完可以直接选中、复制 PDF 里的文字省去重新敲引用的时间。档案部门数字化整柜纸质档案档案室有成箱的纸质档案扫描件要求原件绝对不动。把archive_dir改到内网归档盘的路径脚本会先把原件复制进归档目录、再原地做 OCR整个流程有日志可追溯。收益是原始扫描件始终完好在位数字化后的文件即可入库、检索、长期保存。避坑指南加密文件被静默跳过日志里只有半句话现象任务跑完个别文件没变化日志里只有Skipped document because it is encrypted。原因脚本对需要密码的 PDF 是刻意跳过不会尝试解密。解法在ocr-tree.log中搜索encrypted定位文件先给这些文件去掉密码再单独对它们所在目录重跑一次python3 misc/batch.py /data/scans/decrypted备份目录 /pdfbak 权限不足或相对路径拼错位置现象备份文件没出现在预期位置甚至报权限错误。原因有两个其一archive_dir默认硬编码为/pdfbak这是个系统级路径脚本虽会自动创建缺失目录但你对根目录可能没有写权限其二备份路径是archive_dir str(filename)直接字符串拼接第一个参数传相对路径时拼出来的结果不是你以为的路径。解法不需要备份就改成archive_dir 需要备份则换成你有写权限的绝对路径且第一个参数始终传绝对路径python3 misc/batch.py /data/web/scans日志文件悄悄变大位置也容易找错现象ocr-tree.log越跑越大或者你一直在 misc 目录里翻不到它。原因日志默认追加写入且默认位置是项目根目录脚本所在目录的上一级下的ocr-tree.log。解法给第二次运行传一个独立的日志路径按批次分开记录旧文件也不再互相干扰python3 misc/batch.py /data/web/scans /data/web/scans/ocr-batch-01.log收尾一个misc/batch.py就覆盖了递归查找、智能跳过、备份归档、异常容忍、全程留痕开头那堆需要挨个处理的扫描件交给它跑一遍即可。如果你的文件更多、想并发加速仓库里还有现成资料可以继续读docs/batch.md官方批处理文档含用 GNU Parallel 并发跑ocrmypdf的示例misc/batch.py脚本本体注释里明确欢迎你按需改写脚本文件头那句 You should edit this script to meet your needs 就是这个意思——改两行变量它就是你的专用工具。【免费下载链接】OCRmyPDFOCRmyPDF adds an OCR text layer to scanned PDF files, allowing them to be searched项目地址: https://gitcode.com/GitHub_Trending/oc/OCRmyPDF创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Java+SpringBoot+WMS系统实战:构建高确定性仓储管理系统

Java+SpringBoot+WMS系统实战:构建高确定性仓储管理系统

简介:这是一套面向计算机专业本科生及初级Java全栈开发者的毕业设计级WMS仓库管理系统实战资源,聚焦仓储业务全流程数字化管理需求,覆盖入库、出库、库存盘点、订单处理及移动端协同等核心场景。压缩包共含百余个文件,主体为Sprin…

📅 2026/10/31 8:31:10
5分钟跑通 ntfy 部署:Docker、云服务器、本地源码三条路径实战指南

5分钟跑通 ntfy 部署:Docker、云服务器、本地源码三条路径实战指南

5分钟跑通 ntfy 部署:Docker、云服务器、本地源码三条路径实战指南 【免费下载链接】ntfy Send push notifications to your phone or desktop using PUT/POST 项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy ntfy 是一个轻量级消息推送服务&#x…

📅 2026/9/6 20:02:51
提示词靠感觉写?4 步把 prompt-optimizer 变成你的提示词模板库

提示词靠感觉写?4 步把 prompt-optimizer 变成你的提示词模板库

提示词靠感觉写?4 步把 prompt-optimizer 变成你的提示词模板库 【免费下载链接】prompt-optimizer An AI prompt optimizer for writing better prompts and getting better AI results. 项目地址: https://gitcode.com/GitHub_Trending/pro/prompt-optimizer …

📅 2026/9/12 4:47:23
MORE NEWS

更多资讯

📰

电工证维修年审丢了怎么补办 网上查询流程全解析

电工证维修年审丢了怎么补办 网上查询流程全解析 你是不是学历不高,担心电工证维修年审根本报不上名?别急,今天我以郑州金水区房建工程从业者的角度,来跟你唠唠电工证维修年审那些事,从怎么补办到怎么网上查询,再到考试内容和备考建议,全部给你说透。…

📰

建筑业特种工年龄要求揭秘:证书过期了不知道怎么复审延期怎么办

建筑业特种工年龄要求揭秘:证书过期了不知道怎么复审延期怎么办 证书过期了不知道怎么复审延期,这种情况在特种作业操作证持证人群中非常常见。很多人拿到证后,因为工作变动、项目间隙或者忽略了有效期,一不留神就错过了复审时间。尤其是对于建筑业特种工…

📰

工地太忙根本没时间复习考试?发改电工证全国通用怎么办?

工地太忙根本没时间复习考试?发改电工证全国通用怎么办? ### 为什么工地电工都抢着考发改电工证? 你是不是也经常在工地干得满身汗,一抬头就看到“发改电工证”几个字?别急,这不是什么新玩意儿,这是国家统一认证的特种作业操作证, 全国通用…

📰

防爆电工证图片怎么弄?官方报名入口全攻略来了

防爆电工证图片怎么弄?官方报名入口全攻略来了 证书过期了不知道怎么复审延期,怕被单位开除、怕查出问题、怕影响项目进度,这种焦虑我懂,每年都有不少持证人因为不了解【官方报名入口】的复审流程而踩坑。防爆电工证图片在手,不代表你就了解证书的使用规…

📰

考电工证需要多少分过全国通用怎么考最靠谱

考电工证需要多少分过全国通用怎么考最靠谱 你现在手里没证,干不了活,连面试都进不去,这事儿搁谁身上都急。电工证是 全国通用…

📰

北仑市电工证复审怎么操作?真实经历教你避开中介坑

北仑市电工证复审怎么操作?真实经历教你避开中介坑 不知道去哪报名怕被中介坑?我身边有位南阳劳务班组的负责人老李,去年就因为电工证复审被中介坑了一笔钱,差点耽误了班组的施工进度。他后来告诉我,自己去北仑市应急管理相关部门网站查了相关政策,才终…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬