Я пытаюсь добавить существующий PDF (созданный в противном случае) в PDF, созданный с помощью FPDF с использованием FPDI. Кажется, что работает для большинства 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?
Вы можете использовать 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, который вы можете выполнить из командной строки. Используйте 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 ; пожалуйста, не стесняйтесь попробовать и сообщить о любых проблемах через трекер Github.
Setasign предлагает анализатор PDF как коммерческий аддон для FPDI. До сих пор у нас не возникало проблем с анализом файлов PDF до версии 1.7 с использованием нового синтаксического анализатора.
Я обнаружил, что использование коммерческой версии FPDI PDF-Parser решило мою проблему. Я использую его уже год и не имею никаких PDF-файлов, которые он не разбирает (если только PDF не был поврежден или что-то еще странное происходит).
для symfony я использовал эту lib для преобразования> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter
Если у вас есть автор Acrobat PDF, вы можете управлять настройками задания, чтобы сделать PDF-файл, который вы печатаете / сохраняете. Чтобы быть совместимым с PDF 1.4. По крошечной причине мне нужен этот продукт, он не стоит 100 евро, чтобы получить коммерческую версию, совместимую с версиями, превышающими 1.4.
моя команда удалила часть кода. мы остановили код от добавления водяного знака в pdf. это решило проблему для нас. PDF> = 1,5