Есть ли способ сделать так, чтобы FPDF / FPDI или Zend_Pdf поддерживали парсинг PDF больше 1.4? - PullRequest
13 голосов
/ 19 марта 2009

Я пытаюсь добавить существующий PDF (созданный иначе) в PDF, созданный с использованием FPDF с использованием FPDI. Кажется, для большинства PDF-файлов работает find, но я получаю следующую ошибку:

FPDF error: Unable to find xref table.

После некоторого тестирования я выяснил, что если я использую PDF-версию 1.4 или ниже (Acrobat v5 или ниже), это, похоже, работает. Глядя на файл, он кажется из-за другого формата PDF.

Есть ли обходной путь или решение этой проблемы? У меня, наверное, более 10 000 PDF-файлов, загруженных пользователями, некоторые из них работают, некоторые нет. Также раздражает, что FPDI просто умирает, а не вызывает какую-то ошибку или даже возвращает false

Единственное решение, о котором я могу подумать сейчас, - это проанализировать первую строку файла PDF, чтобы определить версию, и добавить только те из них, которые будут работать над версиями.

Edit:

Я также попробовал это в Zend_Pdf, и это дало следующий результат, используя демонстрационный файл, который поставляется с Zend Framework:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cross-reference streams are not supported yet.' in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php:331
Stack trace:
#0 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('116')
#1 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(297): Zend_Pdf_Parser->__construct('/Volumes/Docume...', Object(Zend_Pdf_ElementFactory_Proxy), true)
#2 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(250): Zend_Pdf->__construct('/Volumes/Docume...', NULL, true)
#3 /Volumes/Documents/temp/ZendFramework-1.7.7/demos/Zend/Pdf/demo.php(37): Zend_Pdf::load('/Volumes/Docume...')
#4 {main}
  thrown in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php on line 331

Разве невозможно проанализировать PDF-файлы больше, чем 1,4?

Ответы [ 7 ]

19 голосов
/ 24 июля 2009

Вы можете использовать FPDI с TCPDF, он будет генерировать и читать (с FPDI) версию 1.7 PDF-файлов.

См. TCPDF - класс PHP для PDF .


EDIT

Недавно у меня возникла проблема с использованием различных версий и форматов PDF с FPDI и TCPDF, и я могу подтвердить, что версии PDF выше 1.4 являются популярными, интересно то, что у меня много работы 1.7 PDF, и работает около 50/50 на 1,5 и 1,6.

Я обошел эту проблему, конвертировав все нерабочие PDF-файлы в v1.4, используя GhostScript, который можно exec из командной строки. Используйте ps2pdf14 из папки GhostScript lib.

6 голосов
/ 01 октября 2013

Я только что выпустил пару проектов ( TCPDI / tcpdi_parser , основанных на FPDI и tcpdf_parser соответственно), которые работают с TCPDF 6 (и FPDF_TPL) для импорта PDF-файлов выше v1.4 (до сих пор тестировалось до 1.6, но я позабочусь о том, чтобы оно работало с 1.7, как только найду 1.7 PFD для тестирования!), не требуя каких-либо коммерческих дополнений. Основные инструкции по установке и использованию можно найти в TCPDI README ; пожалуйста, не стесняйтесь попробовать и сообщить о любых проблемах через трекер Github.

4 голосов
/ 13 февраля 2011

Я обнаружил, что использование коммерческой версии FPDI PDF-Parser решило мою проблему. Я пользуюсь им уже год, и у меня не было PDF-файлов, которые он не мог бы проанализировать (если только PDF-файл не поврежден или не происходит что-то еще странное).

4 голосов
/ 27 ноября 2009

Setasign предлагает анализатор PDF в качестве коммерческого дополнения для FPDI. До сих пор у нас не было проблем с анализом PDF-файлов до версии 1.7 с использованием нового синтаксического анализатора.

3 голосов
/ 19 февраля 2016

для symfony, я использовал эту библиотеку для преобразования> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter

1 голос
/ 23 января 2014

Если у вас есть Acrobat PDF Writer, вы можете манипулировать настройками задания, чтобы сделать PDF-файл, который вы печатаете / сохраняете, совместимым с PDF 1.4. По крошечной причине, мне нужен этот продукт, кажется, что не стоит 100 евро, чтобы получить коммерческую версию, совместимую с версиями выше 1.4.

0 голосов
/ 05 апреля 2012

моя команда удалила некоторую часть кода. мы остановили код от добавления водяного знака в PDF. это решило проблему для нас. PDF> = 1,5

...