2010-11-23 30 views
5

Estoy intentando fusionar 2 PDF, uno en mi servidor (no generado dinámicamente) y otro generado justo antes de la fusión y no guardado en ninguna parte del servidor (solo quiero que mi cliente lo descargue) Entonces solo tengo el contenido del pdf. Ambos PDF tienen el mismo formato (A4).Fusionando 2 pdf con Zend Framework

El archivo fusionado tendrá 2 páginas y no se guardará en el servidor también.

Dado que estoy usando Zend Framework, preferiría una solución (no puedo encontrar uno en línea ...) ¿algún otro consejo?

(common solution found online but doesn't work)

Editar: porque las personas son perezosos para hacer clic. El código está en el enlace de todos modos ya que está mal y no funciona.

I try the script below, but I get the error:

Uncaught exception 'Zend_Pdf_Exception' with message 'Page is attached to one documen, but rendered in context of another

+0

aclarar "no funciona" – Gordon

+0

@Gordon: así, lee la página en el enlace> _> _I tratar a continuación el guión, pero me sale el error: Excepción no detectada 'Zend_Pdf_Exception' con el mensaje 'Página está unido a uno documen, pero traducido en contexto de otro_ Sé que odio la pregunta _no funciona_, pero en serio, aquí, solo tiene que leer ... – Shikiryu

+2

Gracias por aclarar. Solo trata de ser lo más completo posible en tus preguntas en lugar de acusar a aquellos a quienes pides ayuda de ser flojo. No poner toda la información allí en primer lugar es flojo. Además, ¿ha probado el código dado allí a pesar de que el usuario tiene un error? Busqué en Google el mensaje de error y [este error en particular parece estar solucionado en 1.11] (http://framework.zend.com/issues/browse/ZF-449) – Gordon

Respuesta

7

Muy bien, con la guía del comentario de @Gordon en mi pregunta, obtuve una solución.

  1. Debe haber al menos Zend Framework 1.11 (yo estaba en 1.9, primer error) (que se encuentra gracias a la tercera comentario a esta pregunta)
  2. Debe clone página del PDF que desea combinar, de lo , su aplicación imprimirá un error (que se explica por sí mismo) (encontrado gracias al this slideshare que es muy interesante para Zend_Pdf)
  3. El PDF estático debe ser un PDF < = 1.4 (el mío fue 1.6). Zend_Pdf no puede analizar qué versión PDF es> 1,4

Solía ​​this application para convertir los archivos estáticos que tenía en la versión 1.6 a la 1.4.

Aquí está el código en bruto que tengo y el trabajo (ya sé que no está optimizado, lo haré más adelante, pero aún así, puede ser útil)

$pdf2show = new Zend_Pdf(); // Initializing the merged PDF 
$pdf1 = Zend_Pdf::parse($pdfContent, 1); // $pdfContent is the generated one, got the content... 
$template = clone $pdf1->pages[0]; // cloning the page (a must do) 
$page1 = new Zend_Pdf_Page($template); // Creating the first page of the merged PDF with the previous content 
$pdf2show->pages[] = $page1; // Adding this page to the final PDF 
$pdf2 = Zend_Pdf::load('urlToYourPDF.pdf'); // Loading the statif PDF 
$template2 = clone $pdf2->pages[0]; // cloning the page (a must do) 
$page2 = new Zend_Pdf_Page($template2); // Creating the second page of the merged PDF with the previous content 
$pdf2show->pages[] = $page2; // Adding this page to the final PDF 
sendToWebBrowser('title', $pdf2show->render()); 

sendToWebBrowser es una función de enviar el contenido PDF a navegador con el title como ... título. $pdf2show->render() produce el contenido de PDF combinado como una cadena.

+0

Ver, una solución :) Y solo se encontró porque me dijiste el mensaje de error;) – Gordon

0

¿Ha intentado fusionarlos usando el PDF toolkit?

La fusión de varios archivos PDF con ella se pueden lograr usando:

pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf 

123.pdf será el PDF resultante. Puede almacenar temporalmente el PDF resultante en el servidor, enviarlo al navegador y eliminarlo cuando ya no sea necesario.

+0

Gracias por su respuesta. Desgraciadamente, no puedo usar esta solución. 1- No puedo instalar nada en el servidor (el trabajo de otra persona y él está realmente ocupado y no puede hacerlo antes de 2 semanas) 2- Sería mejor no tener que guardar en el servidor. – Shikiryu

3
$extractor = new Zend_Pdf_Resource_Extractor(); 
$clone_page_to_use_in_any_pdf = $extractor->clonePage($original_pdf->pages[0]); 

Así es como lo hice.

Espero que esto ayude a todos.

TJ

+1

En mi opinión, ¡esta es la mejor solución! –

1
$extractor = new Zend_Pdf_Resource_Extractor(); 

$page1 = $extractor->clonePage($pdf->pages[$templatePageIndex1]); 
$page2 = $extractor->clonePage($pdf->pages[$templatePageIndex2]); 
$page1->drawText('Some text...', $x, $y); 
$page2->drawText('Another text...', $x, $y); 

$pdf = new Zend_Pdf(); 
$pdf->pages[] = $page1; 
$pdf->pages[] = $page2; 

derecho de la boca de los caballos.

http://framework.zend.com/manual/en/zend.pdf.pages.html#zend.pdf.pages.cloning

+0

Correcto, pero su ejemplo no responde a la pregunta;) Extrae la página del ** mismo ** pdf '$ pdf'. – Shikiryu

0

Mi experiencia en archivos PDF que se fusionan:

  • Zend_Pdf es lento y no eficiente para grandes compilaciones, marcadores
  • pdftk de documentos sueltos y chocaron si el tamaño del documento es mayor que el documento se fusionó,
  • pdflib es muy rápido y conserva marcadores, es eficiente para grandes compilaciones.
Cuestiones relacionadas