食谱

基本示例

帮助!

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

必须为所有指定的语言安装语言包。请参阅 安装额外的语言包

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

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

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

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

注意

sidecar文件包含由OCRmyPDF找到的OCR文本。如果文档包含已经有文本的页面,这些文本将不会出现在sidecar中。如果使用了--pages选项,只有那些进行了OCR的页面才会包含在sidecar中。如果某些页面因为像--skip-big--tesseract-timeout这样的选项而被跳过,这些页面将不会出现在sidecar中。

如果您不想生成输出的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

不要实际OCR我的PDF

如果你设置--tesseract-timeout 0,OCRMmyPDF将应用其图像处理而不执行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编译器中的优化级别。

等级

评论

--optimize 0

禁用优化。

--optimize 1

启用无损优化,例如将图像转码为更高效的格式。同时压缩PDF中的其他未压缩对象,并启用PDF中更高效的“对象流”。 (如果使用了--jbig2-lossy,则会使用有损的JBIG2优化。使用有损JBIG2的决定与标准优化设置是分开的。)

--optimize 2

以上所有内容,并启用有损优化和颜色量化。

--optimize 3

以上所有内容,并启用更积极的优化并针对较低的图像质量。

当有JBIG2编码器可用且安装了pngquant时,优化效果会更好。如果缺少这些组件中的任何一个,那么某些类型的图像将无法优化。

可用的优化类型可能会随着时间的推移而扩展。默认情况下, OCRmyPDF 会压缩 PDF 内部的数据流,并将低效的压缩模式更改为更现代的版本。像 qpdf 这样的程序可以用来更改编码,例如检查 PDF 的内部结构。

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

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

注意

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

数字签名的PDF

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

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

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