我尝试向一些 pdf 文件添加文本层,以便使它们可搜索。德语 Ubuntu wiki 解释了此技术:http://wiki.ubuntuusers.de/pdfsandwich. 安装依赖项后
sudo apt-get install imagemagick exactimage ghostscript tesseract-ocr
它pdfsandwich
本身应该很简单
pdfsandwich test.pdf
但是我得到:
Input file: "test.pdf"
Output file: "test_ocr.pdf"
Number of pages in inputfile: 272
Parallel processing with 8 threads started.
Processing page order may differ from original page order.
Processing page 137.
Processing page 171.
Processing page 1.
PProcessing page Processing pProcessing page rocess35.
age 239.
Processing page 69.
205.
ing page 103.
sh: 1: cannot open /tmp/pdfsandwich4e375e.html: No such file
随后出现了更多cannot open ...
警告。检查我的/tmp
目录后发现,这些*.html
文件不是对应的*.txt
文件。tesseract 似乎没有以 hocr 格式输出。我阅读了 tesseract 的手册页,并尝试通过创建一个名为 tesseract-config 的配置文件来强制 hocr 输出
hocr true
(我尝试了各种变体)并启动 pdfsandwich
pdfsandwich -tesso tesseract-config test.pdf
但这似乎没有改变任何东西。有什么想法可以让 pdfsandwich 产生正确的输出吗?
注意相关问题如何在 gscan2pdf 中将 OCR 文本添加到原始 pdf?和将 OCR 信息添加到 PDF。但是我需要处理许多 pdf 文件,因此我需要一个可以自动化的命令行解决方案。
答案1
事实证明,配置文件的格式随着当前的 ubuntu 版本的 tesseract(3.02.01)而发生了变化:http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdata/configs/hocr?r=526. 现在可以使用单行配置文件指示 Tesseract 以 hocr 格式输出tesseract-config
:
tessedit_create_hocr 1
-tesso
正如问题中所述,可以通过将选项传递给来指示 tesseract 读取配置文件pdfsandwich
:
pdfsandwich -tesso tesseract-config test.pdf
答案2
出现此错误的原因是 tesseract 更改了 hocr 的默认文件扩展名,导致其与 pdfsandwich <0.1.0 不兼容。对于 tesseract 3.02 和 pdfsandwich <0.1.0,修改 tesseract 选项文件并使用 -tesso 将其传递给 pdfsandwich 会有所帮助。
Tesseract 3.03 是 Ubuntu 14.04 中的默认 tesseract 版本,它大幅改变了 hocr 处理,使其与 hocr2pdf 部分不兼容,因此“-tesso”修复通常会导致文本层与扫描的图像不匹配。相反,需要使用 tesseract 本身而不是 hocr2pdf 来生成每一页 pdf 文件。
Pdfsandwich >=0.1.0 自动识别 tesseract 版本并选择适当的方式与 tesseract 交互,这样所有这些错误就不会再发生。