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

StackOverflow https://stackoverflow.com/questions/660425

Вопрос

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

FPDF error: Unable to find xref table.

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

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

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

Редактировать:

Я также попробовал это в 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?

Это было полезно?

Решение 4

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

Другие советы

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

Видишь TCPDF - PHP-класс для PDF.


Редактировать

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top