如何从未建立索引的 PDF 中提取文本?全是文本,但我无法搜索或选择任何内容。我正在运行 Kubuntu,而 Okular 没有此功能。
答案1
我已经成功使用 BSD 许可的楔形文字的 Linux 移植OCR 系统。
似乎没有可用的二进制包,因此您需要从源代码构建它。确保安装了 ImageMagick C++ 库,以便支持几乎任何输入图像格式(否则它只接受 BMP)。
虽然除了简短的 README 文件外,它似乎基本上没有文档记录,但我发现 OCR 结果相当不错。它的优点是它可以输出 OCR 文本的位置信息自动化光学字符识别格式,这样就可以将文本放回到 PDF 文件隐藏层中的正确位置。这样您就可以创建“可搜索”的 PDF,然后从中复制文本。
我用过hocr2pdf从原始的纯图像 PDF 和 OCR 结果中重新创建 PDF。遗憾的是,该程序似乎不支持创建多页 PDF,因此您可能需要创建一个脚本来处理它们:
#!/bin/bash
# Run OCR on a multi-page PDF file and create a new pdf with the
# extracted text in hidden layer. Requires cuneiform, hocr2pdf, gs.
# Usage: ./dwim.sh input.pdf output.pdf
set -e
input="$1"
output="$2"
tmpdir="$(mktemp -d)"
# extract images of the pages (note: resolution hard-coded)
gs -SDEVICE=tiffg4 -r300x300 -sOutputFile="$tmpdir/page-%04d.tiff" -dNOPAUSE -dBATCH -- "$input"
# OCR each page individually and convert into PDF
for page in "$tmpdir"/page-*.tiff
do
base="${page%.tiff}"
cuneiform -f hocr -o "$base.html" "$page"
hocr2pdf -i "$page" -o "$base.pdf" < "$base.html"
done
# combine the pages into one PDF
gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile="$output" "$tmpdir"/page-*.pdf
rm -rf -- "$tmpdir"
请注意,上述脚本非常简陋。例如,它不保留任何 PDF 元数据。
答案2
看看pdf转文本可以。如果你的机器上没有这个,你必须安装 poppler-utils 包
sudo apt-get install poppler-utils
您可能还会发现pdf 工具包使用。
pdf 软件完整列表这里在维基百科上。
编辑:自从你确实需要OCR 功能,我认为您必须尝试不同的方法。(例如,我找不到执行 OCR 的 Linux pdf2text 转换器)。
- 将 pdf 转换为图像
- 使用 OCR 工具将图像扫描为文本
将 pdf 转换为图像
gs:以下命令应该将多页 pdf 转换为单独的 tiff 文件。
gs -SDEVICE=tiffg4 -r600x600 -sPAPERSIZE=letter -sOutputFile=filename_%04d.tif -dNOPAUSE -dBATCH -- 文件名
ImageMagik 实用程序:SuperUser 网站上还有其他关于使用 ImageMagik 的问题,您可以使用这些问题来帮助您进行转换。
转换 foo.pdf foo.png
使用 OCR 将图像转换为文本
摘自维基百科OCR 软件列表
答案3
答案4
PDF珠子对我来说效果很好。这个帖子“将扫描的图像转换为单个 PDF 文件” 让我开始行动。对于黑白书籍扫描,您需要:
- 为 PDF 的每一页创建一个图像;上面的两个 gs 示例都可以使用
- 为每个页面生成 hOCR 输出;我使用了 tesseract(但请注意,Cuneiform 似乎效果更好)。
- 将图像和 hOCR 文件移动到新文件夹;文件名必须对应,因此 file001.tif 需要 file001.html,file002.tif 需要 file002.html,等等。
在新文件夹中,运行
pdfbeads * > ../Output.pdf
这会将整理好的 OCR PDF 放在父目录中。