OCRmyPDF实现批量可搜索PDF/A生成并提取侧文本全流程指南
环境准备与依赖安装
为确保在Colab或本地Ubuntu上顺利运行,本文首先通过apt-get安装了 Tesseract、Ghostscript、unpaper、pngquant、poppler-utils、qpdf 等系统工具,并使用pip升级到最新的ocrmypdf、img2pdf与pillow<12。可选的jbig2enc编译过程也在脚本中给出,以便在需要更高压缩率时生成更小的PDF文件。
合成扫描PDF用于演示
利用 Pillow 生成三页包含文本的 A4 图像,并在其中一页加入倾斜与噪点,随后通过 img2pdf 将 PNG 合并为仅含图像的 PDF(scanned_input.pdf),实现“无文本层”的扫描文档。该步骤为后续 OCR 效果提供了可对照的真实文本来源。
基础 OCR:去倾斜与自动旋转
rc, dt = ocrmypdf.ocr(
input_file, out_basic,
language=["eng"],
deskew=True,
rotate_pages=True,
)
运行结果显示 OCR 完成时间约 1 秒,输出文件 out_basic.pdf 仍为普通 PDF,已具备可搜索文本层。
高级 PDF/A 输出与侧文件导出
在生产环境中往往需要符合 PDF/A‑2 标准并保留文档元数据。示例代码加入了 --optimize 3、--output-type pdfa-2、--sidecar 等参数,同时设置图像质量、标题、作者等元信息,实现了合规的归档文件:
rc, dt = ocrmypdf.ocr(
input_file, out_adv,
language=["eng"],
deskew=True,
rotate_pages=True,
optimize=3,
jpg_quality=80,
png_quality=80,
output_type="pdfa-2",
sidecar=sidecar,
title="OCRmyPDF Colab Tutorial",
author="Tutorial",
subject="Demonstration of OCRmyPDF",
keywords="ocr, pdf, tesseract, ocrmypdf",
)
随后使用 pdftotext 与侧文件对比,计算了词汇召回率(约 96%),验证了 OCR 的完整性。
参数调优与图像清理
- Tesseract 引擎模式:通过
tesseract_oem=1与tesseract_pagesegmode=3提升英文识别速度。 - unpaper 清理:开启
--clean与--clean-final,在噪声较大的页面上显著降低误识率。 - 自动方向校正:
--rotate-pages能在 90° 旋转的扫描页上自动检测并纠正。
内存模式与单图像 OCR
示例展示了使用 BytesIO 将 PDF 完全在 RAM 中处理,避免磁盘 I/O;以及将单张 PNG 直接转为可搜索 PDF 的简化流程,适用于移动端或微服务场景。
批量处理文件夹
通过遍历 batch_in 目录,批量调用 ocrmypdf.ocr,并将每个文件输出至 batch_out。脚本记录了每个文件的 OCR 状态、耗时以及生成文件大小,便于后续成本评估。
新版 Typed OcrOptions API(v17+)
若使用最新的 OCRmyPDF 版本,可构造 OcrOptions 对象一次性传入全部参数,提升代码可读性并获得更严格的类型检查。
结论
本文从环境搭建、样例生成、基础到高级 OCR 参数、批量处理、内存模式以及新版 API 全面演示了 OCRmyPDF 在文档数字化中的实战价值。通过合理的参数调优与 PDF/A 合规输出,企业可以在保证搜索可用性的同时满足合规归档需求,实现从纸质文档到结构化知识库的高效转化。