هل هناك طريقة لجعل FPDF/FPDI أو Zend_Pdf يدعم تحليل ملفات PDF أكبر من 1.4؟

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

سؤال

أحاول إضافة ملف PDF موجود (تم إنشاؤه بطريقة أخرى) إلى ملف PDF تم إنشاؤه باستخدام FPDF باستخدام FPDI.يبدو أنه يعمل مع معظم ملفات PDF، ولكنني أتلقى الخطأ التالي:

FPDF error: Unable to find xref table.

بعد إجراء بعض الاختبارات، اكتشفت أنه إذا استخدمت إصدار PDF 1.4 أو أقل (Acrobat v5 أو أقل)، فيبدو أنه يعمل.يبدو أن النظر إلى الملف يرجع إلى تنسيق PDF مختلف.

هل هناك حل أو حل لهذا؟لدي على الأرجح أكثر من 10000 ملف PDF تم تحميلها من قبل المستخدمين، بعضها يعمل حديثًا والبعض الآخر لا يعمل.ومن المزعج أيضًا أن يموت FPDI بدلاً من التسبب في نوع من الأخطاء أو حتى إرجاع خطأ

الحل الوحيد الذي يمكنني التفكير فيه الآن هو تحليل السطر الأول من ملف 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) الإصدار 1.7 من ملفات PDF.

يرى TCPDF - فئة PHP لملفات PDF.


يحرر

لقد واجهت مؤخرًا مشكلة استخدام إصدارات وتنسيقات مختلفة من PDF مع FPDI وTCPDF، ويمكنني أن أؤكد أن إصدارات PDF الأعلى من 1.4 ناجحة ومفقودة، والشيء المثير للاهتمام هو أن لدي الكثير من ملفات PDF العاملة بـ 1.7، و يعمل حوالي 50/50 على 1.5 و 1.6.

لقد تعاملت مع هذه المشكلة عن طريق تحويل جميع ملفات PDF غير القابلة للتشغيل إلى الإصدار 1.4 باستخدام GhostScript، وهو ما يمكنك القيام به exec من سطر الأوامر.يستخدم ps2pdf14 من GhostScript lib مجلد.

لقد قمت للتو بإصدار زوج من المشاريع (تكبدي / tcpdi_parser, ، استنادًا إلى FPDI وtcpdf_parser، على التوالي) والتي تعمل مع TCPDF 6 (و FPDF_TPL) لاستيراد ملفات PDF أعلى من الإصدار 1.4 (تم اختبارها حتى 1.6 حتى الآن، ولكنني سأتأكد من أنها تعمل مع 1.7 بمجرد العثور على 1.7 PFD لـ اختبره باستخدام!) دون الحاجة إلى أي إضافات تجارية.يمكن العثور على تعليمات التثبيت والاستخدام الأساسية في التمهيدي TCPDI;فلا تتردد في تجربته والإبلاغ عن أي مشكلات عبر متتبع Github.

تقدم Setasign محللًا لملفات PDF كملف الملحق التجاري إلى فبدي.لم نواجه أي مشاكل في تحليل ملفات PDF حتى الإصدار 1.7 حتى الآن باستخدام المحلل اللغوي الجديد.

بالنسبة إلى Symfony، استخدمت هذا lib لتحويل >1.4https://packagist.org/packages/xthiago/pdf-version-converter

إذا كان لديك برنامج Acrobat PDFwriter، فيمكنك التعامل مع إعدادات المهمة لجعل ملف PDF الذي تقوم بطباعته/حفظه متوافقًا مع PDF 1.4.لسبب بسيط هو حاجتي لهذا المنتج، يبدو أنه لا يستحق 100 يورو للحصول على النسخة التجارية المتوافقة مع الإصدارات الأكبر من 1.4.

قام فريقي بإزالة جزء من الكود.لقد أوقفنا الكود من إضافة علامة مائية إلى ملف pdf.هذا حل المشكلة بالنسبة لنا.قوات الدفاع الشعبي>= 1.5

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top