如何区分 "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 使用的字体。
如果它使用任何字体,它包含文本。如果没有,它只包含图像。
我最近设置了一个 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 使用的字体。
如果它使用任何字体,它包含文本。如果没有,它只包含图像。