在线部署

OCRmyPDF 设计为命令行工具使用,但它也可以在网络服务中使用。本文档描述了这样做时的一些考虑事项。

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

OCRmyPDF 并非设计用于作为公共网络服务,恶意用户可能会上传选择的PDF。特别是,它不一定能安全抵御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页的文件,小型云服务器或小型虚拟机分区应配置足够的额外空间。

要更改临时目录,请参阅 更改临时存储位置

在亚马逊网络服务或其他云供应商上,考虑将您的临时目录设置为临时存储

超时设置

为了防止OCR任务过长,考虑设置 --tesseract-timeout 和/或 --skip-big 参数。如果你的PDF包含标准页面大小的文档,如附有大图像的报告,--skip-big 特别有用 - 通常大图像不值得进行OCR处理。

文档管理系统

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

商业OCR替代方案

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

Abbyy Cloud OCR 是一个可行的商业替代方案,提供网络服务 API。Amazon Textract、Google Cloud Vision 和 Microsoft Azure Computer Vision 提供了先进的 OCR 功能,但在 PDF 渲染能力上较弱。