在线部署

OCRmyPDF 被设计用作命令行工具,但它也可以在 Web 服务中使用。本文档描述了在 Web 服务中使用时的一些注意事项。

源代码仓库中提供了一个基本的 Web 服务实现,即 misc/webservice.py。这仅为演示质量,不适用于生产环境。

OCRmyPDF 未被设计用作公共 Web 服务,恶意用户可能在其中上传恶意 PDF。特别是,它不一定能抵御 PDF 恶意软件或导致拒绝服务的 PDF。有关安全的更多讨论,请参阅 安全

OCRmyPDF 依赖于 Ghostscript,因此,如果在在线部署中使用,应准备好遵守 Ghostscript 的 Affero GPL 许可证以及任何其他许可证。

撇开这些担忧不谈,OCRmyPDF 的一个副作用是它可能会偶然地清理包含某些类型恶意软件的 PDF。它使用 pikepdf/libqpdf 修复 PDF,这可以纠正作为攻击一部分的格式错误的 PDF 结构。当选择 PDF/A 输出(默认)时,输入 PDF 会由 Ghostscript 部分重建。使用 --force-ocr 时,所有页面都会被栅格化并重新转换为 PDF,这可能会删除嵌入图像中的恶意软件。

限制 CPU 使用

OCRmyPDF 会尝试使用所有可用的 CPU 和存储,因此执行 nice ocrmypdf 或使用 --jobs 参数限制作业数量可以确保服务器保持响应。另一种选择是在 Docker 容器、虚拟机或云实例中运行 OCRmyPDF 作业,这些环境可以施加自己的 CPU 使用限制,并在作业未能完成时被“从轨道上”终止。

临时存储需求

OCRmyPDF 在工作时会占用大量临时存储空间,其大小与栅格化 PDF 所需的总像素数成比例。一张 8.5×11 英寸彩色页面在 300 DPI 下的栅格图像未压缩时需要 25 MB;OCRmyPDF 将中间结果保存为 PNG,但这仍然意味着根据平均压缩率,每个中间结果需要大约 9 MB。每页还需要多个中间结果,具体取决于给定的命令行。一个经验法则是,文件中的每页允许 100 MB 的临时存储空间——这意味着如果可能会发送一个 500 页的文件,小型云服务器或小型虚拟机分区应配置充足的额外空间。

要更改临时目录,请参阅 临时目录 (tmpdir)

在 Amazon Web Services 或其他云厂商上,考虑将临时目录设置为临时存储

超时设置

为防止 OCR 作业时间过长,请考虑设置 --tesseract-timeout 和/或 --skip-big 参数。--skip-big 参数尤其有用,如果您的 PDF 包含标准页面大小且附有大型图像的文档,因为通常大型图像无论如何都不值得进行 OCR。

文档管理系统

如果您正在寻找完整的文档管理系统,请考虑 paperless-ngx,这是一个使用 OCRmyPDF 自动进行 OCR 并归档文档的 Web 应用程序。

商业 OCR 替代方案

作者还提供专业服务,包括 OCR 和围绕 PDF 构建数据库,并乐意提供咨询。

Abbyy Cloud OCR 是一个可行的商业替代方案,带有 Web 服务 API。Amazon Textract、Google Cloud Vision 和 Microsoft Azure Computer Vision 提供高级 OCR 功能,但在 PDF 渲染方面能力较弱。