食谱
基本示例
帮助!
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的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
不要实际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编译器中的优化级别。
等级 |
评论 |
---|---|
|
禁用优化。 |
|
启用无损优化,例如将图像转码为更高效的格式。同时压缩PDF中的其他未压缩对象,并启用PDF中更高效的“对象流”。
(如果使用了 |
|
以上所有内容,并启用有损优化和颜色量化。 |
|
以上所有内容,并启用更积极的优化并针对较低的图像质量。 |
当有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之前的版本会在没有警告的情况下使现有的数字签名失效。