antonydevanchi
@antonydevanchi
10 лет в айтишке

Как с помощью PHP можно распарсить PDF?

Задача: открыть документ и получить удобоваримый текст.
Опробовано: всё. Действительно всё, у меня весь гугл в сиреневых ссылках и даже контекстная реклама меня уже жалеет и предлагает купить ридер пдф книг.

Помимо PHP готов использовать любую другую технологию которая даст гарантированный результат. Но все же не хотелось бы уходить от родного для проекта языка.

Хардкорный вариант с написанием парсера с нуля по спекам формата не особо желателен в силу запутанности формата и зоопарка версий.
  • Вопрос задан
  • 15503 просмотра
Пригласить эксперта
Ответы на вопрос 8
@egorinsk
Как вы себе представляете такое преобразование, если в PDF текст хранится строками с определенными координатами, а не абзацами, например? Также текст может храниться картинкой или векторным форматом. Таблицы хранятся набором кусков текста и линиями. Заголовок — просто строка текста чуть большего размера.

Чтобы восстановить логическую структуру текста, надо систему вроде той, которая используется в продуктах fineReader. Систем эта сложная и на ее разработку у Abbee ушла куча денег, вряд ли вы сможете решить задачу проще. А без этого максимум, что вы можете вытащить из файла — это набор блоков вида «строчка такого-то текста расположена по таким-то координатам». Текст может быть разбит переносами.

Абзацы, конечно, еще можно из этого как-то восстановить, выстроив строчки по возрастанию координат, но переносы останутся, а любые нестандартные вещи, вроде подписи к картинке, будут ломать этот алгоритм.

Резюмируя, выберите другой исходный формат, или откажитесь от мысли преобразовать PDF в осмысленный текст, преобразуйте его в картинку например. Иначе вы всю жизнь будете дописывать костыли, как только кто-то захочет подснуть вашей системе текст, сверстанный другим способом.
Ответ написан
@plaha
А если использовать сторонний софт через exec() из php? Транслятор pdf в txt, например
Ответ написан
Skull
@Skull
Я с помощью pdftohtml конвертировал в XML. Далее c помощью SimpleXMLElement спарсивал 3х страничные оглавления из полученного документа.
Или у вас документ изначально похож на plain text загнанный в pdf
Ответ написан
Комментировать
KEKSOV
@KEKSOV
Похожий вопрос обсуждалась тут. К сожалению, автор вопроса никак не прокомментировал применимость приведенных в ответах утилит. Возможно, имеет смысл написать ему личное сообщение с аналогичным вопросом, вдруг, он продвинулся в положительную сторону.
Ответ написан
oENDark
@oENDark
Попробуйте конверт из pdf -> excel, а там уже есть парсеры excel самые разные
Ответ написан
Комментировать
asm0dey
@asm0dey
Можно запустить демон опеноффиса, он умеет конвертировать pdf в html, насколько я помню. Или в RTF.
Ответ написан
Комментировать
sivabur
@sivabur
Заблокировали просто так!
Класс pastebin.com/dvwySU1a
include('class.pdf2text.php');
$a = new PDF2Text();
$a->setFilename('Videographer_RFP.pdf'); //grab the test file at http://www.newyorklivearts.org/Videographer_RFP.pdf
$a->decodePDF();
echo $a->output();


Тока проблемы есть с некоторыми символами сам пока разбираюсь почему
Но тут будет чистый текст.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы