【问题标题】:How do I determine programmatically if a PDF is searchable?如何以编程方式确定 PDF 是否可搜索?
【发布时间】:2012-08-05 21:32:08
【问题描述】:

我有一个包含 PDF 的 URL 列表的 CSV:

  • 其中一些 PDF 是可搜索的。
  • 其中一些 PDF 文件不可搜索。

我想确定可以从我的 PDF 列表中搜索哪些 PDF。是否有捷径可寻?

【问题讨论】:

  • 可搜索是什么意思?它们包含文本而不是图像?
  • 我没有尝试过这个,但在 Bing 上的第一次点击表明在 PDF 文件内容中搜索“FontName”将识别出可搜索的内容。
  • PDF 有 OCRed 文本。我会调查 FontName。
  • 是的,字符串 foo.pdf | grep 字体名称
  • 不幸的是,对“FontName”的 grepping 是不够的。我已经看到许多可搜索的 PDF 文件显然是从(或由)PowerPoint 创建的,它们具有“/Font”和“/BaseFont”但没有“FontName”。我目前正在寻找 Fontname 和 BaseFont。

标签: python bash pdf pdftk


【解决方案1】:

在命令行上,我会使用pdffonts 来确定文件使用的字体。这也运行得相当快...

示例 1:包含文本的 PDF

pdffonts bash-manpage.pdf 名称 类型 编码 emb sub uni 对象 ID ------------------------------- ------------- ------ --------- --- --- --- --------- Times-Roman Type 1 Custom no no no 8 0 Times-Bold Type 1 标准 no no no 9 0 Helvetica Type 1 自定义 no no no 11 0 Helvetica-Bold Type 1 标准 no no no 30 0

示例 2:仅包含图像的 PDF

pdffonts 扫描书.pdf pdf字体手工制作.pdf 名称 类型 编码 emb sub uni 对象 ID ------------------------------- -------------- ----- --------- --- --- --- ---------
  1. 示例 1 显示了一个带有字体名称的表格。这意味着有 IS 文本可供搜索。

  2. 示例 2 显示了一个空表。没有字体,没有要搜索的文本(除非您在文件上运行 OCR 以首先嵌入任何找到的文本……但随后您创建了一个不同的文件!),不要回头看这些……

注意:要成功地实际提取嵌入文本并因此能够搜索它是一个完全不同的问题。在许多情况下,您会发现这非常困难——尤其是当您在字体表中看到带有 'custom' 编码的 CID Type 之类的字体类型时。您可能首先要在 stackoverflow 中搜索 PDF 中的其他 questions that were asked about text extraction...

【讨论】:

  • 使用 pdffonts 确定文件使用的字体 - 该工具是否真的检查字体是否被使用?还是只检查它们是否被定义为资源?如果是后者,字体的存在并不是 100% 确定可搜索文本的指示。
  • @mkl:如果您希望 100% 确定有关以编程方式 + 自动分析的 PDF 的指示,请转到另一个领域。你不能在这里。在这里,我们只处理高达 99% 的确定指示。我将能够手工制作一个PDF,在页面上显示“你在天堂”文本,但如果你以编程方式处理它,它会提取你“你在地狱”。 this 世界中超过 99.99% 的真实世界 PDF 是由不输出 this 类型的废话且不嵌入从未使用过的字体的工具以编程方式创建的。
  • 正确。我只是想指出,仅可能使用提供的字体,这不是确定的事情。确定 PDF 中的任何内容并非易事。
  • 如何安装pdffonts?还有什么方法可以通过编写 python 脚本来检查
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-23
  • 1970-01-01
  • 2011-05-30
  • 2016-09-16
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
相关资源
最近更新 更多