如何将带有 OCR 文本的扫描 PDF 转换为没有 OCR 文本的 PDF?

Tim*_*Tim 10 pdf ghostscript evince

我有一个扫描的 PDF 文件,带有低质量的 OCR 文本。

我想要一个没有 OCR 文本的 PDF 文件。

如何将带有 OCR 文本的扫描 PDF 转换为无 OCR 文本的 PDF?

我在想有什么办法可以在不改变每页的宽度和高度以像素为单位,不改变每页每英寸的像素的情况下,尽可能地恢复OCR之前的原始扫描PDF文件?

某种光栅化再次有帮助吗?光栅化会再次降低图像质量吗?

几种尝试:

  1. 我在 Evince 中使用打印文件,我认为cups-pdf它使用了,它不会删除 OCRed 文本。
  2. 以下命令 usinggs也不会删除 OCRed 文本(我想我还没有找到如何gs正确使用):

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 \
       -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf toc.pdf
    
    Run Code Online (Sandbox Code Playgroud)

Ant*_*hon 5

有多种方法可以去除文件中的 OCR 文本。

  1. 从 PDF 导出扫描的图像并重新组合它们。您可以pdfimages用于提取(从poppler-utils包中)和convert(从imagemagick)将它们转换回:

    pdfimages toc.pdf toctmp
    convert toctmp*.pbm newtoc.pdf
    
    Run Code Online (Sandbox Code Playgroud)
  2. 打印为 PDF(支持来自 的 PDF cups-pdf

PDF 对于扫描图像来说是一种可怕的格式,但经常使用,因为它可以在一个文件中包含多个页面。然而,存储格式通常是不合适的(对于扫描)JPEG 格式。从 PDF 恢复原始图像(没有原始扫描的 PDF 文件这样的东西)可能无法完成,因为从扫描图像制作 PDF 是最常见的扫描后质量降低步骤。您可以尝试使用pdfimage(或pdftoppm)从 PDF 中获取图像,但处理 PDF 图像的OCR 软件已经知道如何从这些 PDF 中获取最佳(唯一)质量的图像,您不太可能采取一些措施来改进那。

问题可能在于您的扫描软件,而不是 OCR 软件。如果您仍然拥有原始材料,请将其再扫描到多页 TIFF(lzw 压缩),这比包含 JPEG 时转换为 PDF 的任何内容都提供更好的 OCR。


Kur*_*fle 5

如果我必须这样做,我将如何删除 OCR 编辑的文本...

首先,您需要知道,PDF 中经过 OCR 处理的文本不是图层,而是一种特殊的文本渲染模式。以下来自官方 PDF 规范的屏幕截图列出了所有可用的文本渲染模式:

有关更多背景信息,请参阅我在 StackOverflow 上的这些答案:


现在对于我设想的程序:

0. 备份您的原始 PDF 文件

'nuff 说...

1. 用于qpdf解压大部分 PDF 对象

qpdf是一个漂亮的命令行工具,可以将大多数 PDF 转换为更容易通过文本编辑器(或通过sed)进行操作的形式:

qpdf                       \
  --qdf                    \
  --object-streams=disable \
    input.pdf              \
    editable.pdf
Run Code Online (Sandbox Code Playgroud)

2.搜索PDF代码包含的点 3 Tr

editable.pdf存在“不可见”(即既未填充也未描边)文本中的所有点都由初始定义标记

3 Tr
Run Code Online (Sandbox Code Playgroud)

将这些更改为现在阅读

1 Tr
Run Code Online (Sandbox Code Playgroud)

这应该使以前隐藏的文本可见。字形将以粗轮廓显示,覆盖原始扫描页面图像。

它看起来会非常难看。

保存编辑后的 ​​PDF。

3.更改TjTJ文本抚摸运营商“无操作”

每当准备呈现文本字符串时,负责执行此操作的实际操作符名为Tjor TJ

注意所有这些。用tJ和替换它们tj。这会将它们变成“无操作”:它们在 PDF 源代码中根本没有意义;没有 PDF 查看器或处理器会“理解”它们。(在替换 PDF 源代码中的内容时注意不要更改字节数,否则可能会导致它“损坏”。)

保存 PDF 文件。

4. 现在检查 PDF 文件的外观

PDF 现在应该看起来又“干净”了。重命名的文本运算符对于 PDF 查看器和任何 PDF 解释器都没有任何意义。

5. 使用 Ghostscript 创建最终的 PDF

此命令应该可以实现您想要的:

gs                        \
  -o final.pdf            \
  -sDEVICE=pdfwrite       \
  -dPDFSETTINGS=/prepress \
   editable.pdf
Run Code Online (Sandbox Code Playgroud)

最后一步editable.pdf用作输入。它输出final.pdf. 输出将删除所有文本痕迹。输入仍然文本,尽管是“无法使用”的形式,因为操作员重命名。由于 Ghostscript 不“理解”重命名的运算符,因此默认情况下它会简单地跳过它们。