2010-11-23 19 views
5

J'essaye de fusionner 2 PDF, un sur mon serveur (pas généré dynamiquement) et un généré juste avant la fusion et non enregistré n'importe où sur le serveur (je veux juste que mon client le télécharge). Donc, j'ai seulement le contenu du pdf. Les deux PDF ont le même format (A4).Fusionner 2 pdf avec Zend Framework

Le fichier fusionné aura 2 pages et ne sera pas enregistré sur le serveur. Depuis, j'utilise Zend Framework, je préférerais une solution avec (ne peut en trouver un en ligne ...) sinon un conseil?

(common solution found online but doesn't work)

Edit: parce que les gens sont paresseux à cliquer. Le code est dans le lien de toute façon car c'est faux et ne fonctionne pas.

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

clarifier – Gordon

+0

@Gordon « ne fonctionne pas »: bien, lisez la page sur le lien> _> _Je essayer le script ci-dessous, mais je reçois l'erreur: Uncaught exception « Zend_Pdf_Exception » message « page est attaché à un documen, mais rendu dans le contexte d'un autre_ Je sais que je déteste la question ne fonctionne pas_, mais sérieusement, ici, il suffit de lire ... – Shikiryu

+2

Merci pour la clarification. Essayez simplement d'être aussi complet que possible dans vos questions au lieu d'accuser ceux que vous demandez de l'aide d'être paresseux. Ne pas mettre toutes les informations là-haut en premier lieu est paresseux. Aussi, avez-vous essayé le code donné malgré l'erreur de l'utilisateur? J'ai googlé le message d'erreur et [cette erreur particulière semble être corrigé dans 1.11] (http://framework.zend.com/issues/browse/ZF-449) – Gordon

Répondre

7

Très bien, avec le commentaire du commentaire de @Gordon dans ma question, j'ai eu une solution.

  1. Vous devez avoir au moins Zend Framework 1.11 (j'étais en 1.9, première erreur) (trouvé grâce au 3e commentaire à cette question)
  2. Vous devez clone la page du PDF que vous souhaitez fusionner, d'autre , votre application va imprimer une erreur (explicite) (trouvée grâce à this slideshare ce qui est très intéressant pour Zend_Pdf)
  3. Le PDF statique doit être un PDF < = 1,4 (le mien était de 1,6). Zend_Pdf ne peut pas analyser PDF dont la version est> 1.4

J'ai utilisé this application pour convertir les fichiers statiques que j'avais dans la version 1.6 en 1.4.

est ici le code rugueux je et le travail (je sais que ce n'est pas optimisé, je le ferai plus tard, mais encore, il peut être utile)

$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 est fonction d'envoyer le contenu PDF à navigateur avec le title comme ... titre. $pdf2show->render() produit le contenu PDF fusionné sous forme de chaîne.

+0

Voir, une solution :) Et seulement trouvé parce que vous m'avez dit le message d'erreur;) – Gordon

0

Avez-vous essayé de les fusionner en utilisant le PDF toolkit?

la fusion de plusieurs fichiers PDF avec elle peut être réalisée à l'aide:

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

123.pdf sera le PDF résultant. Vous pouvez stocker temporairement le PDF résultant sur le serveur, l'envoyer au navigateur et le supprimer quand il n'est plus nécessaire.

+0

Merci pour votre réponse. Malheureusement, je ne peux pas utiliser cette solution. 1- Je ne peux rien installer sur le serveur (le travail d'une autre personne et il est vraiment occupé et ne peut pas le faire avant 2 semaines) 2- Il serait plus agréable de ne pas avoir à sauvegarder sur le serveur. – Shikiryu

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

Voici comment je l'ai fait.

J'espère que cela aidera tout le monde.

TJ

+1

À mon avis, c'est la meilleure solution! –

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; 

droit de la bouche des chevaux.

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

+0

Droit, mais votre exemple ne répond pas à la question;) Il extrait la page de la ** même ** pdf '$ pdf'. – Shikiryu

0

Mon expérience dans la fusion pdfs:

  • Zend_Pdf est lent et pas efficace pour les grandes compilations,
  • pdftk signets est lâche documents et se sont écrasés si la taille du document est plus grand que le document fusionné,
  • pdflib est vraiment rapide et conserve les signets, est efficace pour les grandes compilations.