如何区分 "text" PDF 和 PHP 中的 "image" PDF?

How to differentiate between "text" PDFs and "image" PDFs in PHP?

我最近设置了一个 Linux 服务器,可以使用 Xpdf 中的 pdftotext 命令将基于文本的 PDF 转换为文本,也可以将基于图像的 PDF 转换为文本。结合使用 gs (Ghostscript) 和 tesseract 命令将 PDF 转换为文本。

当我已经知道 PDF 是基于文本还是基于图像时,这两种解决方案都能很好地工作。但是,为了将许多 PDF 转换为文本的过程自动化,我需要能够分辨 PDF 是基于文本的还是基于图像的,以便我知道在 PDF 上要 运行 哪一组过程.

在 PHP 中有什么方法可以分析 PDF 并判断它是基于文本还是基于图像,以便我知道是使用 Xpdf 还是 Ghostscript/Tesseract?

比较输出并确定 OCR 运行 的结果文本是否与 Xpdf 运行 的输出相同是一项非常重要的任务。在不可识别的 PDF 文本(例如非常小的字母)的情况下,文本可以通过 xpdf 提取,您甚至会以很多不必要的乱码结束。

我建议只从 PDF 和 OCR 中提取图像,而不是完整的 PDF。这样

  • 您不必比较文本 [1]。
  • 根据图像包含到 PDF 中的方式,您还可以获得更好的 OCR 结果。
  • 此外,您还可以避免不必要地对以明文形式包含的文本进行 OCRing。

由于您已经在使用 xpdf,因此您可以使用 pdfimages -all 来提取图像。

[1] 这不是 100% 正确,因为 PDF 可能是夹在中间的 PDF,其中已经有 OCRed 文本层 "behind" 图像。

我认为 Kurt Pfeifle here 的回答非常棒:使用 pdffonts - 它也是 Xpdf / Poppler 的一部分 - 列出 PDF 使用的字体。

如果它使用任何字体,它包含文本。如果没有,它只包含图像。