首页 文章

检查PDF是否可搜索

提问于
浏览
0

我写了一个bash脚本,从扫描的PDF文件中提取纯文本 . 我有很多PDF,但有些是扫描的,有些则不是 . 所以现在我的主要目标是通过检查PDF是否已经可搜索来改进我的脚本,因此不需要提取OCR .

我试过了:

pdftext -nopgbrk pdf_file.pdf wordlist

wordlist 中存储可能的OCR文本,那么我可以检查它是否是可搜索的PDF .

我也试过 pdffonts pdf_file.pdf 检查是否有_1663945的文字 .

两种方式都很好,但在某些情况下失败了 .

例如,我需要对OCR进行数字签名的一些PDF,这些签名总是为PDF添加文本层 . 因此,当我运行这两个命令中的任何一个时,它将输出签名的文本或它正在使用的字体 . 这就像是因为签名而找到了纯文本 . 它可能只是带有数字签名的扫描PDF,但它将被检测为纯文本PDF .

数字签名总是以这种方式添加文本(使用Helvetica字体):

签名:姓名

日期:CEST日期

公司:公司名称

所以:

pdftext -nopgbrk pdf_file.pdf wordlist | grep -v -E 'Signed|Date|Company'

我可以设法删除这些行,所以如果它真的是扫描的PDF,输出将为空 .

它适用于一些PDF,直到我注意到有一些其他格式的签名,所以我觉得这几乎是一种解决方法而不是一个很好的解决方案 .

有没有办法检查PDF是否可以完全搜索?我只需要一种方法来提取PDF文本但省略数字签名 . 此外 grep -v 将始终取决于我们的数字签名's format and if it changes then it' ll搞砸了我的脚本 .

谢谢 .

1 回答

  • 1

    不幸的是,实际上没有一种简单的方法可以以“非hacky”的方式执行此操作,而无需对文件进行明显更多的分析,这将远远超出bash脚本的范围和规模 .

    pdftotext 输出数字签名的文本时,该文本不是来自数字签名本身 . 它被存储为PDF中的对象,其中包含 pdftotext 忽略的元数据 . 相反, pdftotext 选择的只是:文本也被添加到文件中 .

    这是Adobe's sample signed PDF document的一个例子 . 首先,数字签名的元数据:

    Screenshot of digital signature metadata

    这是插入文档的文本:

    Screenshot of text with same information as in digital signature

    从技术上讲,你可以拥有一个没有另一个,并且通常伴随数字签名的文本没有确定的格式 . 因此,你被困在了:

    • 忽略 grep 的特定文本,正如您现在所做的那样,这可能是不可靠的 .

    • 在所有文件上运行OCR,然后检查OCR之前/之后文本是否存在差异,但这样就无法完成首先检查的全部目的 .

相关问题