我正在尝试将 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 处理:
- 备份原始 PDF。如果你弄乱了,你还有备份。
- 跑步
pdfimages -list original.pdf
- 使用计算器将图像的宽度和高度相乘。假设图像为 192 × 643。将其相乘,我们得到 123456。我们将在下一步中使用它。
- 跑步
pdfsandwich -nopreproc -maxpixels 123456 original.pdf
现在我们有了包含要替换图片的 OCR PDF。这部分有点棘手。
- 跑步
pdfimages -list original.pdf
- 记下原始 PDF 中的对象编号。假设是 123。下面我们将使用它。
- 跑步
pdfimages -list original_ocr.pdf
- 记下 OCRed PDF 中的对象编号。假设是 456。我们在下面使用它。
- 在可以正确处理复制和粘贴二进制数据的文本编辑器中打开原始 PDF 和 OCR 后的 PDF。
123 0 obj
在原始 PDF 中找到此行。复制下面的那条线以及所有后续行,直到下一endobj
行。456 0 obj
在 OCR 的 PDF 中找到该行。删除下面的那条线以及所有后续行,直到下一行endobj
。通过粘贴从原始 PDF 中复制的内容来替换您删除的行。- 将 OCRed PDF 保存为新文件名。
- 在 PDF 查看程序中打开上一步中的新文件名,检查您是否可以看到该页面,以及 OCR 文本是否存在,ETC。
- 关闭文本编辑器而不保存。