2009-03-18 15 views
13

Estoy tratando de agregar un PDF existente (creado de otra manera) a un PDF creado con FPDF usando FPDI. Parece que funciona encontrar en la mayoría de los archivos PDF, pero me da el siguiente error:¿Hay alguna manera de hacer que FPDF/FPDI o Zend_Pdf admitan el análisis de archivos PDF mayores que 1.4?

FPDF error: Unable to find xref table. 

Después de algunas pruebas, me di cuenta de que si yo uso una versión PDF de 1.4 o inferior (Acrobat v5 o inferior) parece trabajo. Al mirar el archivo, parece ser debido a un formato PDF diferente.

¿Hay algún problema o solución a 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 que puedo pensar ahora es analizar la primera línea del archivo PDF para determinar la versión y solo agregar las eso sobre las versiones que funcionarán.

Editar:

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

Respuesta

4

Encontré 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).

+0

¿Puede compartir con nosotros cómo trabajó con este complemento? Porque no tengo ni idea de cómo usarlo. He instalado el archivo, no estoy seguro de cómo usarlo. Estoy usando el siguiente PDFmerger https://github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L78 –

18

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

Ver TCPDF - PHP class for PDF.


EDITAR

Recientemente he sido desafiado con el tema del uso de diferentes versiones y formatos de PDF con FPDI y TCPDF, y puedo confirmar que las versiones en PDF por encima de 1,4 son impredecible, la Lo interesante es que tengo muchos archivos PDF en funcionamiento y trabajo alrededor de 50/50 en 1.5 y 1.6.

He solucionado el problema al convertir todos los archivos PDF no viables a v1.4 usando GhostScript que puede exec desde la línea de comandos. Use ps2pdf14 de la carpeta GhostScript lib.

+0

yo no habría esperado que el 'ps2pdf14' comandos para trabajar con PDF como entrada pero funcionó a las mil maravillas. – jeteon

4

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

+0

¿Puede compartir con nosotros cómo trabajó con este complemento? Porque no tengo ni idea de cómo usarlo. He instalado el archivo, no estoy seguro de cómo usarlo. Estoy usando el siguiente PDFmerger github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L 78 –

-1

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

6

Acabo de liberar un par de proyectos (TCPDI/tcpdi_parser, basado en FPDI y tcpdf_parser, respectivamente), que trabajan con TCPDF 6 (y FPDF_TPL) para importar archivos PDF v1.4 anteriores (probado hasta 1.6 hasta ahora, pero me aseguraré de que funcione 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 pueden encontrar en el TCPDI README; Por favor, siéntete libre de probarlo e informar cualquier problema a través del rastreador de Github.

+0

Acabo de intentarlo, tratando de agregar texto a un PDF v.1.5 y no funciona. – greg

+0

@greg, si su PDF no está protegido con contraseña, presente un problema en el proyecto correspondiente (TCPDI o tcpdi_parser) con todos los detalles de lo que está tratando de hacer y de lo que sucedió (es decir, qué error (s) obtuvo) . Trataré de investigar, pero no puedo hacer ninguna promesa en el marco de tiempo. – NullColaShip

+0

Ok, hecho, gracias. – greg

1

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.

3

de Symfony, que utilizaron este lib convertir> 1,4 https://packagist.org/packages/xthiago/pdf-version-converter

+1

¿Sabes? Creo que en realidad implementé algo como esto en un punto para tratar con este y otros problemas. Solo llamo a Ghostscript directamente en mi caso, pero esto puede hacer la vida un poco más fácil. –

+1

Soy el autor de 'xthiago/pdf-version-converter'. La biblioteca se puede utilizar en cualquier proyecto de PHP; no requiere el uso de Symfony Framework (Full Stack). La biblioteca utiliza internamente dos componentes de Symfony (proceso y sistema de archivos), pero el compositor se ocupa de ello. Le recomiendo el uso de la biblioteca porque tiene pruebas unitarias (PHPUnit) y es de código abierto; puede beneficiarse de las correcciones de fallas y mejoras realizadas por la comunidad. –

Cuestiones relacionadas