如何将扫描的PDF转换为带有文字的PDF?

我已经将大约80页扫描成灰度PDF(图像格式)。文件最终大小约为70MB,非常庞大。
现在我正在寻找一种方法,将灰度图像PDF文件转换为简单的黑白文本PDF文件。
我已经尝试了很多次使用“gs”,但没有成功(只有几个百分比的恢复)。 如果有专家有什么想法,请告诉我。

1你需要一些OCR工具。看看Tesseract:http://ubuntuforums.org/showthread.php?t=880471 - Nikita U.
4如果您有兴趣将PDF图像保持原样,并在其上添加文本,请参考问题在PDF中添加OCR信息 - colan
如果你能够贴出一个链接(例如)一个页面的示例,我们就可以测试解决方案... - Rmano
这不是一个OCR解决方案,但http://askubuntu.com/a/3387/16395非常有帮助(尽管72dpi有点低,我用120的效果更好)。 - Rmano
YAGF在Ubuntu 16.04上正常工作吗?如果我加载图像或PDF文档,程序会无任何错误信息中止。 在Ubuntu 14.04上我没有遇到问题。 H.Roos - Hubert Roos
8个回答

gImageReader是一个简单的GTK+前端界面,用于tesseract-ocr。
sudo apt-get install gimagereader tesseract-ocr

对德文的内容感到抱歉。


5你还应该安装文档的语言以提高OCR识别能力,使用sudo apt-get install tesseract-ocr-[lang]命令,将lang替换为语言代码,如deu表示德语,por表示葡萄牙语等。 - estibordo
1这个软件很丑陋。可用性为零。虽然它试图完成工作,但无法读取简单的电子表格样式的表格。只是错过了包含它们的页面。 - Max Yudin
这对我来说效果很好。只需将 PDF 文件拖入,点击顶部的“全部识别”按钮。对于一页的 PDF,我只等了几秒钟,结果就会在右侧出现一个新的第三个窗格上。此窗格中的纯文本如有需要可以进行编辑,并通过点击“保存输出”按钮保存。您还可以使用鼠标突出显示特定区域,并右键单击。 - user643722

你可以试试pdfocr。
 sudo add-apt-repository ppa:gezakovacs/pdfocr
 sudo apt-get update
 sudo apt-get install pdfocr

执行语法是
 pdfocr -i input.pdf -o output.pdf

其中input.pdf是输入文件的名称,output.pdf是输出文件的名称。

默认情况下,它使用Tesseract。要安装它:

 sudo apt-get install tesseract-ocr

pdfocr 创建了一个嵌入的文本层。


太棒了!有趣的是,在执行上述步骤后,该文件现在可以在Adobe Acrobat DC中进行搜索,但无法在Preview中进行搜索。 - lukeaus
2该存储库不支持xenial。 - Max N
如果在xenial上安装wily版本的pdfocr,可以尝试安装旧版本的pdfocr。要做到这一点,请将"deb http://ppa.launchpad.net/gezakovacs/pdfocr/ubuntu wily main"和"deb-src http://ppa.launchpad.net/gezakovacs/pdfocr/ubuntu wily main"添加到/etc/apt/sources.list中,然后运行"sudo apt update"和"sudo apt-get install pdfocr"命令。 - rafmunozf
3pdfocr是一个脚本,用于自动化以下过程:
  1. 使用pdftk将PDF文件拆分为单独的页面
  2. 使用pdfimages提取图像数据
  3. 使用cuneiform进行OCR(光学字符识别)
  4. 使用hocr2pdf将检测到的文本嵌入回PDF文件中
  5. 使用pdftk合并文件。(引用自https://ubuntuforums.org/showthread.php?t=1456756)
- Tommy Trussell

看一下OCRmyPDF,它的效果很好。

pdfsandwich

它在安装时加载了tesseract和其他内容。这是一个简单的一步解决方案,可以进行脚本编写。它可以使用hocr2pdf来创建一个纯文本PDF,但它现在还没有准备好用于主流市场。默认情况下使用tesseract并创建一个"三明治"式的PDF:图像 + 下方的文本。
嵌入的图像可以通过类似以下命令来移除:
gs -o ocr_noIMG.pdf -sDEVICE=pdfwrite -dFILTERIMAGE ocr_image.pdf

但是文本被隐藏了,所以看起来像一页空白的页面。
将PDF加载到LibreOffice Draw中,就能显示出文本,并且可以手动删除图像。

关于ImageMagick / Ghostscript安全问题导致identify-im6.q16出现“未授权”错误,我们应该采取什么措施?类似于这样的错误:imagemagick - convert:not authorized aaaa @ error/constitute.c/ReadImage/453 - Stack Overflow - nealmcb

你可以尝试使用shrinkpdf来减小文件大小,然后使用ocr.sh来添加文本层。

对于 @A.B. 在 Ubuntu 14.04 上建议的图形界面,您应该按照以下步骤进行:

在 Ubuntu 14.04 上安装 OCR Tesseract

或者无论如何,将其添加到存储库列表中:

sudo add-apt-repository ppa:sandromani/gimagereader
sudo apt-get update

在这之前的工作:
sudo apt-get install gimagereader

我在寻找将扫描的PDF转换为可选择文本的方法时,偶然遇到了这个问题。后来我发现了一个叫做pdfsandwich的工具,使用效果非常好,令我惊讶的是它在之前的回答中并没有详细介绍。
更多信息请参考:http://www.tobias-elze.de/pdfsandwich/ 它在幕后使用了由Google赞助的tesseract光学字符识别库,但简化了PDF处理和创建步骤。
截至2020年12月,它已经包含在官方的Ubuntu软件源中。安装方法如下:
sudo apt update && sudo apt install pdfsandwich

处理一个名为input.pdf的PDF文件:
pdfsandwich input.pdf

默认情况下,您的输出将显示为类似于input_ocr.pdf的内容。
在Ubuntu 20.04上,由于Ghostscript权限问题,最初无法正常工作。可以通过在/etc/ImageMagick-6/policy.xml中添加XML注释(<!-- xxx -->)来解决此问题(在我的文件中,这些是第90至95行)。
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="PS2" />
  <policy domain="coder" rights="none" pattern="PS3" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />

此修复的参考资料:https://www.itechlounge.net/2020/09/web-imagickexception-attempt-to-perform-an-operation-not-allowed-by-the-security-policy-pdf/

阅读文档:

man pdfsandwich

其实我发现最好的是使用命令pdftotext sudo apt install poppler-utils 非常简单而且高效,只需运行pdftotext -layout xxx.pdf即可保留原始布局作为文本。

Recoll在其索引中使用pdftotext,我不知道具体原因和方式。 - pierrely