在线部署
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 渲染方面能力较弱。