tcpdf_include library composer php zend-framework fpdf zend-pdf fpdi

php - library - ¿Hay alguna manera de hacer que FPDF/FPDI o Zend_Pdf admitan el análisis sintáctico de archivos PDF mayores que 1.4?



tcpdf download (7)

Setasign está ofreciendo un analizador PDF como un complemento comercial para FPDI. No tuvimos problemas para analizar archivos PDF hasta la versión 1.7 hasta el momento utilizando el nuevo analizador.

Estoy intentando agregar un PDF existente (creado de otra manera) a un PDF creado con FPDF usando FPDI. Parece que funciona para la mayoría de los PDF, pero me aparece el siguiente error:

FPDF error: Unable to find xref table.

Después de algunas pruebas, descubrí que si uso una versión en PDF de 1.4 o inferior (Acrobat v5 o inferior) parece funcionar. Al mirar el archivo, parece ser debido a un formato PDF diferente.

¿Hay un problema o solución para esto? Probablemente he subido 10 000+ PDFs por usuarios, algunos de los nuevos funcionan, otros no. También es molesto que FPDI simplemente muera en lugar de causar algún tipo de error o incluso devolver falso

La única solución en la que puedo pensar ahora es analizar la primera línea del archivo PDF para determinar la versión y agregar solo las que superen las versiones que funcionarán.

Editar:

También probé esto en Zend_Pdf y tuvo el siguiente resultado, usando el archivo de demostración que viene con 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

¿Es imposible analizar archivos PDF mayores que 1.4?


Descubrí que el uso de la versión comercial de FPDI PDF-Parser resolvió mi problema. Lo he estado utilizando durante un año y no he tenido ningún PDF que no pueda analizar (a menos que el PDF esté corrupto o haya pasado algo extraño).


mi equipo había eliminado una parte del código. detenimos el código de agregar marca de agua al pdf. esto solucionó el problema para nosotros. PDF> = 1.5


Puede usar FPDI con TCPDF, generará y leerá (con FPDI) versión 1.7 PDF.

Ver TCPDF - clase de PHP para PDF .

EDITAR

Recientemente me han desafiado el problema del uso de varias versiones y formatos de PDF con FPDI y TCPDF, y puedo confirmar que las versiones en PDF por encima de 1.4 son impredecibles, lo interesante es que tengo 1.7 archivos PDF en funcionamiento, y funciona aproximadamente 50/50 en 1.5 y 1.6.

He solucionado el problema convirtiendo todos los archivos PDF no viables en v1.4 utilizando GhostScript, que puede exec desde la línea de comandos. Use ps2pdf14 de la carpeta lib GhostScript.


Acabo de lanzar un par de proyectos ( TCPDI / tcpdi_parser , basados ​​en FPDI y tcpdf_parser, respectivamente) que funcionan con TCPDF 6 (y FPDF_TPL) para importar PDF por encima de v1.4 (probado hasta 1.6 hasta ahora, pero lo haré ¡asegúrese de que funciona con 1.7 una vez que encuentre un 1.7 PFD para probarlo!) sin requerir ningún complemento comercial. Las instrucciones básicas de instalación y uso se encuentran en el archivo TCPDI README ; Por favor, siéntete libre de probarlo e informar cualquier problema a través del rastreador de Github.


Si tiene Acrobat PDF Writer, puede manipular la configuración del trabajo para que el PDF que está imprimiendo / guardando sea compatible con PDF 1.4. Por la pequeña razón que necesito este producto, no parece valer la pena los 100 euros para obtener la versión comercial que es compatible con versiones superiores a 1.4.