ABBYY OCR 批量转换
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_e2ff9e78/abbyy-ocr。
技能介绍
要解决的问题
扫描版 PDF 的文本层通常缺失或错乱,想把它变成可编辑的 DOCX,只能依赖 OCR。手工在 ABBYY FineReader 15 里逐个打开、导出,面对几十上百份文件时是纯粹的体力活;而直接写脚本循环调用 FineCmd.exe,又会遇到进程中途被杀、单个文件转换失败导致整批任务中断、重跑时重复处理已完成文件等问题。这个技能把批量转换包装成一个带故障恢复能力的流水线。
核心能力
- 批量扫描:递归遍历
ROOT_DIR下的所有 PDF,在同目录生成同名 DOCX。 - 断点续传:通过
_abbyy_checkpoint.json记录每个文件的状态(ok/skip/fail),重启后自动跳过已完成的文件。 - 三层防崩溃架构:
- 第 1 层是检查点机制,进程被杀后重新运行即可从断点继续;
- 第 2 层注册了 SIGINT/SIGTERM 信号处理器,按 Ctrl+C 会先保存进度再干净退出;
- 第 3 层是自看门狗,异常退出后最多自动重启 10 次,间隔 5 秒,另有独立看门狗每 60 秒检查一次进程存活。
- 单文件重试:每个 PDF 转换失败后自动重试最多
MAX_RETRIES次,避免偶发 OCR 错误中断整批任务。 - 可配置语言:
OCR_LANG支持ChinesePRC、English、Japanese、Mixed等参数。
适用边界与注意点
- 仅适用于 Windows,且需要已安装 ABBYY FineReader 15 并持有合法许可证,
ABBYY_FINECMD默认指向C:\Program Files\ABBYY FineReader 15\FineCmd.exe。 FineCmd.exe必须通过 Pythonsubprocess调用,直接用 Bash 调用可能返回非零退出码却无任何输出。- 路径含中文或空格时,必须使用原始字符串(
r"...")或正斜杠。 - 单文件转换耗时取决于页数,平均 15~30 秒;
FILE_TIMEOUT默认 900 秒,超大文件需自行调整。 - 每个转换会生成以
_开头的临时 XML 报告文件,成功后自动删除;检查点文件_abbyy_checkpoint.json不要手动删除,除非确实想从头开始。 - 转换失败时优先排查三项:FineCmd 路径是否正确、许可证是否有效、PDF 文件是否损坏。
- 基础版脚本不带断点续传等保护机制,只适合小批量、一次性的转换场景。
使用场景
- 数百份扫描版合同需要一次性 OCR 转成 DOCX,担心长任务中途被系统或人为中断导致进度全丢
- 档案数字化项目中多个子目录的扫描 PDF 需要递归批量转换,并保留断点文件以便反复续跑
- 转换大批量 PDF 时个别文件偶发 OCR 失败,希望自动重试而不是整批任务跟着中断
- 对单个扫描 PDF 做中文 OCR 导出 DOCX 时,需要自定义识别语言和超时时间后跑批
适合人员
- 负责档案数字化的 Windows 运维工程师,需要长时间无人值守批量跑 OCR 并依赖断点续传兜底
- 律师事务所或企业行政部门的文档管理员,手上有成百上千份扫描合同需要转成可编辑 DOCX 归档
- 熟悉 Python 的后端开发者,想用 subprocess 封装 FineReader 命令行搭建内部转换流水线
- 经常处理多语言扫描件的项目成员,需要根据文件类型切换 OCR 语言参数跑批