基本示例
帮助!
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 引擎无法在语言未知时检测语言。
生成 PDF 和包含 OCR 文本的文本文件
这将生成一个名为 “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
# 当有多个图像时 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
为什么你会想这样做?也许你有一个 OCR 无法生成有用结果的 PDF,你只想删除所有 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 # 使其变小
一些用户可能会考虑启用有损 JBIG2。详见:有损模式 JBIG2。
注意
图像处理和 PDF/A 转换也可能会对你的 PDF 图像引入有损变换,即使在使用 --optimize 1
时也是如此。
数字签名的 PDF
OCRmyPDF 无法在保留数字签名的同时为 PDF 添加 OCR。默认情况下,无论其他设置如何,它都会拒绝修改已签名的 PDF。你可以使用 --invalidate-digital-signatures
覆盖此行为;顾名思义,任何数字签名都将失效。
OCRmyPDF 无法打开使用数字证书加密的文档。
在 14.4.0 版本之前,OCRmyPDF 会在没有警告的情况下使现有的数字签名失效。