Подтвердить что ты не робот

Есть ли парсер PDF для PHP?

Привет, я знаю несколько PDF-генераторов для php (fpdf, dompdf и т.д.). Я хочу знать, что такое парсер.

По причинам, не зависящим от моего контроля, мне нужна определенная информация только в таблице внутри pdf и мне нужно извлечь эту таблицу и преобразовать ее в массив.

Любые предложения?

4b9b3361

Ответ 1

Я написал один раньше (для аналогичных потребностей), и я могу сказать следующее: получайте удовольствие. Это довольно сложная задача. спецификация PDF является большой и громоздкой. Существует несколько способов хранения текста внутри него. И кикер состоит в том, что каждый PDF-генератор отличается тем, как он работает. Таким образом, в то время как что-то вроде TFPDF или DOMPDF создает ДЕЙСТВИТЕЛЬНО легко читаемые PDF файлы (с точки зрения машины), Acrobat создает действительно адские документы.

Причина в том, как он пишет текст. Большинство обработчиков, основанных на DOM, которые я использовал, пишут всю строку как одну строку и устанавливаем ее один раз (что очень легко читать). Acrobat пытается быть более эффективным (и это), записывая только одно или, может быть, несколько символов за раз, и позиционируя их независимо. Хотя это ДЕЙСТВИТЕЛЬНО упрощает рендеринг, это делает чтение намного сложнее.

Верхняя сторона здесь заключается в том, что формат PDF сам по себе очень прост. У вас есть "объекты", которые следуют за регулярным синтаксисом. Затем вы можете связать их вместе для создания контента. Спецификация хорошо описывает описание формата файла. Но чтение в реальном мире займет немного мозговой силы...

Некоторые полезные советы, которые я должен был усвоить, если вы сами напишете:

  • Adobe любит переквалифицировать шрифты. Таким образом, символ 65, скорее всего, не будет A... Вам нужно найти объект карты и вывести, что он делает, на основе того, какие символы там. И это эффективно, поскольку, если символ не отображается в документе для этого шрифта, он не включает его (что затрудняет жизнь, если вы пытаетесь программно редактировать PDF файл)...
  • Напишите его как можно более абстрактным. Напишите классы для каждого типа объекта и каждого нативного типа (строки, числа и т.д.). Пусть эти классы разобраны для вас. Там будет справедливое количество повторений, но вы сэкономите себя в конце, когда поймете, что вам нужно настроить что-то только для одного конкретного типа)...
  • Напишите для конкретной версии или двух спецификаций PDF и применяйте ее. Проверьте номер версии, и если она выше, чем вы ожидаете, залог... И не пытайтесь "заставить ее работать". Если вы хотите поддерживать более новые версии, оттуда выведите спецификацию и обновите парсер. Не пытайтесь пробовать и ошибаться ваш путь (это не весело)...
  • Удачи в сжатых потоках. Я обнаружил, что обычно вы не можете доверять аргументам длины, чтобы проверить, что вы разжимаете. Иногда (для некоторых генераторов) он работает хорошо... Другие это один или несколько байтов. Я просто пытаюсь сдуть его, если фильтр соответствует, а затем заставляет длину...
  • При тестировании длин не используйте strlen. Используйте mb_strlen($string, '8bit'), поскольку он будет компенсировать разные наборы символов (и разрешить потенциально недопустимые символы в других кодировках).

В противном случае, удачи...

Ответ 2

Я использую PDFBox для этого (http://pdfbox.apache.org/). Это программное обеспечение является независимым и независимым от платформы. Он работает быстро и надежно. Вы можете использовать его через exec или shell execute или через PHP/Java-Bridge (http://php-java-bridge.sourceforge.net/)

Ответ 3

Вы уже просмотрели xPDF? Существует программа, называемая pdftotext, которая будет выполнять преобразование. Вы можете вызвать его из PHP, а затем прочитать в текстовой версии PDF. Вам нужно будет иметь возможность запускать exec() или system() из php, поэтому это может не работать на всех хостинг-решениях.

Кроме того, есть несколько примеров на PHP-сайте, которые преобразуют PDF в текст, хотя и довольно грубые. Вы также можете попробовать некоторые из этих примеров. На этой странице PHP, найдите luc в phpt dot org.

Ответ 4

Посмотрите на GhostScript или ITextSharp, есть разные межплатформенные версии обоих.

Ответ 5

Zend_Pdf является частью Zend Framework, В их руководстве указано:

Компонент Zend_Pdf представляет собой PDF файл (Формат переносимого документа) движок манипуляции. Он может загружать, создавать, изменять и сохранять документы. Таким образом, он может помочь любому приложению PHP динамически создавать документы PDF изменение существующих документов или создавая новые с нуля.

Ответ 6

На самом деле это не может быть таблицей внутри PDF, так как PDF теряет такую ​​информацию...

Ответ 7

Это - это PHP-парсер PHP, который существует в двух вариантах:

  • Бесплатная версия может анализировать PDF файлы до формата PDF 1.5
  • Коммерческое дополнение может анализировать любой формат PDF (до версии 1.9)