如何区分“文本”和“文本”pdf和“图像”;pdf在PHP


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

我最近设置了一个Linux服务器,能够通过使用pdftotext命令将基于文本的pdf转换为文本,这是Xpdf的一部分,以及通过使用gs (Ghostscript)和tesseract命令的组合将基于图像的pdf转换为文本。

当我已经知道PDF是基于文本还是基于图像时,这两种解决方案都非常有效。但是,为了自动化将许多PDF转换为文本的过程,我需要能够判断PDF是基于文本的还是基于图像的,以便我知道在PDF上运行哪一组进程。

在PHP中是否有任何方法来分析PDF并告诉它是基于文本还是基于图像的,以便我知道是否使用Xpdf或Ghostscript/Tesseract ?

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

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

比较输出并确定OCR运行的结果文本是否与Xpdf运行的结果文本相同是一个非常重要的任务。如果是不可编辑的PDF文本(例如:非常小的字母),其中的文本可以用XPDF提取,您甚至会以许多不必要的胡言乱语结束。

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

  • 你不必比较文本[1]。
  • 根据图像如何包含到PDF中,您也可能获得更好的OCR结果。
  • 还可以避免不必要的OCRing文本,它包含为明文。

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

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