Есть ли способ заставить FPDF/FPDI или Zend_Pdf поддерживать разбор PDF файлов более чем на 1,4?

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

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?

Ответы

Ответ 1

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

Ответ 2

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

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


ИЗМЕНИТЬ

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

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

Ответ 3

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

Ответ 4

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

Ответ 6

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

Ответ 7

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