烹饪手册

基本示例

帮助!

ocrmypdf 具有内置帮助。

ocrmypdf --help

添加 OCR 层并转换为 PDF/A

ocrmypdf input.pdf output.pdf

添加 OCR 层并输出标准 PDF

ocrmypdf --output-type pdf input.pdf output.pdf

创建一个 PDF/A,将所有彩色和灰度图像转换为 JPEG

ocrmypdf --output-type pdfa --pdfa-image-compression jpeg input.pdf output.pdf

原地修改文件

文件仅在 OCRmyPDF 成功执行时才会被覆盖。

ocrmypdf myfile.pdf myfile.pdf

纠正页面旋转

OCR 将尝试自动纠正每个页面的旋转。这有助于修正包含横向和纵向页面混合的扫描作业。

ocrmypdf --rotate-pages myfile.pdf myfile.pdf

您可以增加(减少)参数 --rotate-pages-threshold 以使页面旋转更具(更少)侵略性。阈值是 OCR 引擎对文档图像应更改(与保持不变相比)的置信度的比率。默认值相当保守;在某些文件上,除非非常确定当前旋转错误,否则可能根本不会尝试旋转。较低的值 2.0 将产生更多的旋转,以及更多的误报。运行 -v1 以查看每个页面的置信度级别,从而了解您的文件是否有更好的值。

如果页面“只是稍微偏离水平”,就像歪斜的图片一样,那么您需要 --deskew--rotate-pages 用于主要角度错误的情况。

非英语的 OCR 语言

除非另有说明,否则 OCRmyPDF 假定文档是英语。如果使用了错误的语言,OCR 质量可能会很差。

ocrmypdf -l fra LeParisien.pdf LeParisien.pdf
ocrmypdf -l eng+fra Bilingual-English-French.pdf Bilingual-English-French.pdf

必须安装所有指定语言的语言包。请参阅 Installing additional language packs <lang-packs>

不幸的是,Tesseract OCR 引擎在语言未知时无法检测语言。

生成包含 OCR 文本的 PDF 和文本文件

这将生成一个名为“output.pdf”的文件和一个名为“output.txt”的伴随文本文件。

ocrmypdf --sidecar output.txt input.pdf output.pdf

注意

伴随文件包含 OCRmyPDF 找到的 OCR 文本。如果文档包含已经有文本的页面,该文本将不会出现在伴随文件中。如果使用了选项 --pages,则只有执行了 OCR 的页面才会包含在伴随文件中。如果由于 --skip-big--tesseract-timeout 等选项跳过了某些页面,这些页面将不会在伴随文件中。

如果您不想生成输出 PDF,请使用 --output-type=none 避免生成。将输出文件名设置为 -(即重定向到标准输出)。

要从 PDF 中提取所有文本,无论是由 OCR 生成还是其他方式,请使用 Poppler 的 pdftotextpdfgrep 等程序。

对图像进行 OCR,而不是 PDF

选项:使用 Tesseract

如果您从图像开始,可以直接使用 Tesseract 将图像转换为 PDF

tesseract my-image.jpg output-prefix pdf
# When there are multiple images
tesseract text-file-containing-list-of-image-filenames.txt output-prefix pdf

Tesseract 的 PDF 输出相当不错——在某些情况下,OCRmyPDF 在内部使用它。然而,OCRmyPDF 具有 Tesseract 不具备的许多功能,例如图像处理、元数据控制和 PDF/A 生成。

选项:使用 img2pdf

您也可以使用 img2pdf 等程序将图像转换为 PDF,然后将结果通过管道传递给 ocrmypdf 运行。- 告诉 ocrmypdf 读取标准输入。

img2pdf my-images*.jpg | ocrmypdf - myfile.pdf

img2pdf 被推荐使用,因为它在不转码图像的情况下生成 PDF 方面做得非常出色。

选项:使用 OCRmyPDF(仅限单张图像)

为方便起见,OCRmyPDF 也可以自行将单张图像转换为 PDF。如果图像的分辨率(每英寸点数,DPI)未设置或不正确,可以使用 --image-dpi 覆盖。(1 英寸等于 2.54 厘米,1 dpi ≈ 0.39 dpcm)。

ocrmypdf --image-dpi 300 image.png myfile.pdf

如果您有多张图像,必须使用 img2pdf 将图像转换为 PDF。

图像处理

如果需要,OCRmyPDF 会对 PDF 的每一页执行一些图像处理。对每个页面应用相同的处理。建议用户在图像处理后检查文件,因为这些命令可能会移除期望的内容,特别是对于低质量扫描件。

  • --rotate-pages 尝试确定每个页面的正确方向,并在必要时旋转页面。

  • --remove-background 尝试检测并移除灰度或彩色图像中的嘈杂背景。单色图像会被忽略。不应将其用于包含彩色照片的文档,因为它可能会移除照片。

  • --deskew 将纠正以倾斜角度扫描的页面,将其旋转回原位。

  • --clean 使用 unpaper 在 OCR 前清理页面,但不更改最终输出。这使得 OCR 不太可能在背景噪声中查找文本。

  • --clean-final 使用 unpaper 在 OCR 前清理页面,并将清理后的页面插入到最终输出中。您需要检查每个页面,以确保 unpaper 没有移除重要内容。

注意

在许多情况下,图像处理会将 PDF 页面光栅化为图像,可能导致质量损失。

警告

--clean-final--remove-background 在某些图像中可能会留下不希望出现的视觉伪影,因为它们的算法存在不足。使用这些选项后应目视检查文件。

示例:OCR 并纠正文档倾斜(歪斜扫描)

纠正倾斜

ocrmypdf --deskew input.pdf output.pdf

图像处理命令可以组合使用。选项给出的顺序无关紧要。OCRmyPDF 始终按相同顺序应用图像处理流程的步骤(旋转、移除背景、纠正倾斜、清理)。

ocrmypdf --deskew --clean --rotate-pages input.pdf output.pdf

不要实际对我的 PDF 进行 OCR

如果您设置 --tesseract-timeout 0,OCRmyPDF 将应用其图像处理而不执行 OCR(通过导致 OCR 超时)。如果您只希望应用图像处理或 PDF/A 转换,这很有效。

ocrmypdf --tesseract-timeout=0 --remove-background input.pdf output.pdf

v14.1.0 版本有变动: 在此版本之前,--tesseract-timeout 0 会阻止 Tesseract 的其他用途(例如纠正倾斜)工作。现在不再如此。如果需要,请使用 --tesseract-non-ocr-timeout 控制非 OCR 操作的超时。

从我的 PDF 中移除所有文本或 OCR

这听起来有点奇怪,但 OCRmyPDF 可以完全剥离 PDF 中的所有文本信息,并将其重建为一个“图像包”PDF。

ocrmypdf --tesseract-timeout 0 --force-ocr input.pdf output.pdf

为什么您会想这样做?也许您的 PDF 的 OCR 无法产生有用的结果,并且您只是想去除所有 OCR 信息。此命令也会移除第三方工具生成的 OCR。

优化图像而不执行 OCR

您也可以优化所有图像而不执行任何 OCR

ocrmypdf --tesseract-timeout=0 --optimize 3 --skip-text input.pdf output.pdf

仅处理特定页面

您可以要求 OCRmyPDF 仅对特定页面应用 图像处理 和 OCR。

ocrmypdf --pages 2,3,13-17 input.pdf output.pdf

连字符表示页面范围,逗号分隔页码。如果您喜欢使用空格,请将所有页码用引号括起来:--pages '2, 3, 5, 7'

如果您的页码列表包含重复或重叠的页面,OCRmyPDF 将发出警告。OCRmyPDF 目前不考虑文档页码,例如书中引言部分使用的罗马数字。它只是简单地计算从开始算起的虚拟纸张数量。如果您的页面列表不是按数字顺序排列的,OCRmyPDF 会为您排序。

无论 --pages 参数为何,除非您禁用这些选项,否则 OCRmyPDF 将优化文件中的所有页面/图像并将其转换为 PDF/A。这两个步骤都是“整文件”操作。在此示例中,我们只想对标题进行 OCR,并在其他方面尽可能少地更改 PDF

ocrmypdf --pages 1 --output-type pdf --optimize 0 input.pdf output.pdf

重做现有 OCR

要对使用其他 OCR 软件或旧版 OCRmyPDF 和/或 Tesseract 进行过 OCR 的文件重做 OCR,您可以使用 --redo-ocr 参数。(通常,如果被要求修改已进行 OCR 的文件,OCRmyPDF 将报错退出。)

这对于希望利用 Tesseract 精度改进来处理之前使用早期版本 Tesseract 和 OCRmyPDF 进行过 OCR 的文件的用户可能会有所帮助。

ocrmypdf --redo-ocr input.pdf output.pdf

此方法将在不光栅化、不降低质量或不移除矢量内容的情况下替换 OCR。如果文件包含纯数字文本和 OCR 的混合,数字文本将被忽略,OCR 将被替换。因此,此模式与图像处理选项不兼容,因为它们会改变文件的外观。

在某些情况下,无法检测或替换现有 OCR。例如,OCRmyPDF v2.2 或更早版本生成的文件在内部表示为具有可见文本,其上绘制了不透明图像。这种情况无法检测到。

如果 --redo-ocr 不起作用,您可以使用 --force-ocr,这将强制光栅化所有页面,可能降低质量或丢失矢量内容。

提高 OCR 质量

图像处理 功能可以提高 OCR 质量。

旋转页面和纠正倾斜有助于确保在 OCR 开始前页面方向正确。移除背景和/或清理页面也可以改善结果。可以指定 --oversample DPI 参数以在尝试 OCR 前将图像重采样到更高分辨率;这也可以改善结果。

如果输入图像的分辨率不正确,OCR 质量会受到影响(因为检查可能字体时使用的像素尺寸范围也会不正确)。

PDF 优化

默认情况下,OCRmyPDF 会在 OCR 完成后尝试对 PDF 内的图像执行无损优化。即使没有找到 OCR 文本,也会执行优化。

参数 --optimize N(简写形式 -O)控制优化,其中 N 的范围是 0 到 3(含),类似于 GCC 编译器中的优化级别。-O1 是默认值。

更多详细信息,请参阅有关 PDF 优化 的章节。

ocrmypdf --optimize 3 in.pdf out.pdf  # Make it small

一些用户可能会考虑启用有损 JBIG2。请参阅:jbig2-lossy

注意

即使在使用 --optimize 1 时,图像处理和 PDF/A 转换也可能对您的 PDF 图像引入有损转换。

数字签名 PDF

OCRmyPDF 无法保留 PDF 中的数字签名并同时向其添加 OCR。默认情况下,无论其他设置如何,它都会拒绝修改已签名的 PDF。您可以使用 --invalidate-digital-signatures 覆盖此行为;顾名思义,任何数字签名都将失效。

OCRmyPDF 无法打开使用数字证书加密的文档。

14.4.0 版本之前的 OCRmyPDF 会在不发出警告的情况下使现有数字签名失效。