如何使用 pdfsandwich 向 pdf 添加 OCR 功能的同时保持 pdf 图像不变?

如何使用 pdfsandwich 向 pdf 添加 OCR 功能的同时保持 pdf 图像不变?

我正在尝试将 OCR 添加到 PDF 中,并使用pdfsandwich这样做。问题是 pdfsandwich 在执行 OCR 时会处理图像,从而改变文档的外观。

有什么方法可以确保 PDF 图像保持完全不变?如果 pdfsandwich 无法做到这一点,那么使用其他应用程序来实现这一点也是可以接受的。

之前的示例: 前

示例之后: 后

通过 pdfsandwich 运行 pdf 后,您可以轻松看到质量的下降。

我查看了 pdfsandwich 文档,没有找到有关保持图像不变的任何内容。

答案1

我联系了 pdfsandwich 的创建者 Tobial Elze,询问我的问题。他们的回复如下:

我完全明白你的意思,也同意这是一个有用的功能。目前无法充分保留原始图像,因为 pdfsandwich 调用 Tesseract 来创建最终的 pdf,它内部执行一些超出 pdfsandwich 范围和控制范围的处理。

默认情况下,pdfsandwich 将输入图像转换为黑白,如您在自己的示例中所见。您可以通过选项 -rgb 强制其使用颜色(对于彩色图像)或像您的情况一样通过选项 -gray 强制其使用灰度,从而更接近原始图像。您可能希望在您的示例中尝试后者,看看它是否有所改善。

除此之外,如果您发现 pdfsandwich 在 OCR 之前的“改进”功能并没有改善图像,反而使其变得更糟,您可以通过选项 -nopreproc 关闭所有预处理。

我希望这能有所帮助?

因为我的 PDF 已经是灰度的,所以只需添加标志-gray似乎就可以保留原始质量。-rgb是彩色图像的等效标志。

答案2

我也有过同样的愿望,因为 pdfsandwich 严重压缩了微小的 PDF 图像,导致 PDF 文件大小膨胀。下面是我处理单页 PDF 的复杂方法已经清理过,方便进行 OCR 处理

  1. 备份原始 PDF。如果你弄乱了,你还有备份。
  2. 跑步pdfimages -list original.pdf
  3. 使用计算器将图像的宽度和高度相乘。假设图像为 192 × 643。将其相乘,我们得到 123456。我们将在下一步中使用它。
  4. 跑步pdfsandwich -nopreproc -maxpixels 123456 original.pdf

现在我们有了包含要替换图片的 OCR PDF。这部分有点棘手。

  1. 跑步pdfimages -list original.pdf
  2. 记下原始 PDF 中的对象编号。假设是 123。下面我们将使用它。
  3. 跑步pdfimages -list original_ocr.pdf
  4. 记下 OCRed PDF 中的对象编号。假设是 456。我们在下面使用它。
  5. 在可以正确处理复制和粘贴二进制数据的文本编辑器中打开原始 PDF 和 OCR 后的 PDF。
  6. 123 0 obj在原始 PDF 中找到此行。复制下面的那条线以及所有后续行,直到下一endobj行。
  7. 456 0 obj在 OCR 的 PDF 中找到该行。删除下面的那条线以及所有后续行,直到下一行endobj。通过粘贴从原始 PDF 中复制的内容来替换您删除的行。
  8. 将 OCRed PDF 保存为新文件名。
  9. 在 PDF 查看程序中打开上一步中的新文件名,检查您是否可以看到该页面,以及 OCR 文本是否存在,ETC
  10. 关闭文本编辑器而不保存。

相关内容