我最近设置了一个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文本层"在"图像后面。