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

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

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

Какие-либо предложения?

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

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

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

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

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

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

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

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

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

Взгляните на GhostScript или ITextSharp, есть разные кросс-платформенные версии обоих.

Zend_Pdf является частью Zend Framework . Их руководство гласит:

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

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

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

  1. Бесплатная версия может анализировать PDF-файлы до формата PDF 1.5
  2. Коммерческое дополнение может анализировать любой формат PDF (до текущего 1,9)