假设您有 2 个“扫描”的 pdf 文件。
- 很大,但没有文本层。
- 较小(图像质量较低),但具有正确的文本层。
两个文件都包含平等的图像,仅在压缩方面有所不同。
目标是嵌入相同的文本层到第一个 pdf。
“仅对第一个文件进行 OCR” 不是解决方案。我知道 Acrobat(和一些其他工具)能够在不改变图像层的情况下进行 OCR,但我对它们的 OCR 质量不满意。
因此,我看到两种可能的方法:
- 以某种方式导出导入文本层
- 以某种方式替换图像层中的图像。
对于第一种方法,我什么也没找到。对于第二种方法,我发现了两种非常接近的工具hocr2pdf和pdf转文本,但据我所知,这还不够。:(
PS:使用示例:
我刚刚发现了另一个例子,这种操作在系统上很有用。
如果您扫描了 pdf-1(无文本层),并使用“jpg”图像压缩,Abbyy finereader 会为您提供 OCR 格式的 pdf,即 pdf-2。如果您选择无损图像压缩,它要么非常大,要么图像质量会比 pdf-1 低很多。在许多情况下,最佳选择是保持源图像压缩原样,并且不重新压缩图像。
答案1
这是一个在命令行上执行此操作的简单 shell 脚本:
另存为~/pdf-merge-text.sh
(和chmod +x
它):
#!/usr/bin/env bash
set -eu
pdf_merge_text() {
local txtpdf; txtpdf="$1"
local imgpdf; imgpdf="$2"
local outpdf; outpdf="${3--}"
if [ "-" != "${txtpdf}" ] && [ ! -f "${txtpdf}" ]; then echo "error: text PDF does not exist: ${txtpdf}" 1>&2; return 1; fi
if [ "-" != "${imgpdf}" ] && [ ! -f "${imgpdf}" ]; then echo "error: image PDF does not exist: ${imgpdf}" 1>&2; return 1; fi
if [ "-" != "${outpdf}" ] && [ -e "${outpdf}" ]; then echo "error: not overwriting existing output file: ${outpdf}" 1>&2; return 1; fi
(
local txtonlypdf; txtonlypdf="$(TMPDIR=. mktemp --suffix=.pdf)"
trap "rm -f -- '${txtonlypdf//'/'\\''}'" EXIT
gs -o "${txtonlypdf}" -sDEVICE=pdfwrite -dFILTERIMAGE "${txtpdf}"
pdftk "${txtonlypdf}" multistamp "${imgpdf}" output "${outpdf}"
)
}
pdf_merge_text "$@"
现在只需调用它:
~/pdf-merge-text.sh txt.pdf img.pdf out.pdf
答案2
这个答案pdftotext -bbox
stackoverflow 上有一个解决方案。你可以使用Python 包从 pdf-2 中提取带有坐标的文本PDF矿工,然后使用 Python 包将隐藏的文本写入新的 PDF报告实验室,然后使用以下方法将此隐藏文本 PDF 与 pdf-1 合并:PDFtk(网页上有一个适用于 Windows 的 GUI;Unix 的命令行现在称为 PDFtk Server。)
或者,您可以尝试使用 PDFtk 直接合并 pdf-1 和 pdf-2。运行pdftk pdf-2 multistamp pdf-1 output out.pdf
。这会将 pdf-1 的每一页放在 pdf-2 的相应页面前面,因此您只能看到来自 pdf-1 的图像(假设它们是扫描件,并且没有透明背景),但会包含来自 pdf-2 的隐藏文本。缺点是它可能非常大,因为它将包含每页图像的两个副本。我已经验证了这有效,输出 pdf 的大小是输入大小的总和。
答案3
根据剧本这个答案,你可以从输入_ocr.pdf使用 ghostscript 的文件:
gs -o “input_ocr_textonly.pdf” -sDEVICE=pdfwrite -dFILTERIMAGE “input_ocr.pdf”
并将其与输入图像.pdf使用 pdftk 的文件:
pdftk“input_ocr_textonly.pdf”multistamp“input_image.pdf”输出“output.pdf”
或者,使用編輯:
qpdf --empty --pages“input_image.pdf”-- --underlay“input_ocr_textonly.pdf”--“output.pdf”
答案4
如果您必须这样做,LibreOffice + GIMP 应该可以完成这项工作。首先,使用 LibreOffice Draw 提取高质量扫描。然后使用 GIMP 编辑它们以删除扫描的文本。最后,将图像添加到较低层的 OCRed 文件中。
但如果您将其作为某些例行工作的一部分来执行,那么您的工作流程可能存在问题。