烹饪手册
基本示例
帮助!
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 的 pdftotext
或 pdfgrep
等程序。
对图像进行 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。
不推荐
我们不建议使用 ImageMagick 或 Ghostscript 将图像转换为 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 会在不发出警告的情况下使现有数字签名失效。