Как различить "текстовые" PDF-файлы и "графические" PDF-файлы в PHP?
Недавно я настроил сервер Linux, чтобы иметь возможность преобразовывать текстовые PDF-файлы в текст, используя pdftotext
команда, которая является частью Xpdf, а также для преобразования PDF-файлов на основе изображений в текст, используя комбинацию gs
(Ghostscript) и tesseract
команды.
Оба решения работают довольно хорошо, когда я уже знаю, является ли PDF текстовым или графическим. Однако для того, чтобы автоматизировать процесс преобразования многих PDF-файлов в текст, мне нужно иметь возможность определить, является ли PDF текстовым или графическим, чтобы я знал, какой набор процессов нужно запускать в PDF.
Есть ли в PHP способ проанализировать PDF-файл и сказать, является ли он текстовым или графическим, чтобы я знал, использовать ли на нем Xpdf или Ghostscript/Tesseract?
1 ответ
Я думаю, что ответ Курта Пфайфла здесь превосходен: используйтеpdffonts
- который также является частью Xpdf / Poppler - чтобы указать, какие шрифты используются в PDF.
Если он использует какой-либо шрифт, он содержит текст. В противном случае он содержит только изображения.
Сравнение выходных данных и определение того, совпадает ли полученный текст из прогона OCR с выходным сигналом из прогона Xpdf, является нетривиальным квестом. В случае текста PDF, который нельзя распознать (например, очень маленькие буквы), где текст может быть извлечен с помощью xpdf, вы даже закончите с большим количеством ненужного бреда.
Я бы предложил извлекать изображения только из PDF-файлов и OCR, а не из полного PDF-файла. Сюда
- Вам не нужно сравнивать тексты [1].
- В зависимости от того, как изображения включены в PDF, вы также можете получить лучшие результаты распознавания.
- Также вы можете избежать ненужного распознавания текста, который содержится в виде открытого текста.
Поскольку вы уже используете xpdf, вы можете использовать pdfimages -all
извлечь изображения.
[1] Это не на 100% правильно, так как PDF может быть зажатым PDF, где уже есть текстовый слой OCRed "позади" изображения.