84 votes

Editer un PDF en PHP ?

Quelqu'un connaît-il une bonne méthode pour éditer des PDF en PHP ? De préférence des méthodes à code source ouvert/à coût zéro. :)

Je pense à l'ouverture d'un fichier PDF, au remplacement du texte dans le PDF, puis à l'écriture de la version modifiée du PDF ?

Sur le front

0 votes

Je n'ai utilisé que le FPDF et je pense que c'est génial. Vraiment génial.

0 votes

J'essayais également de trouver une solution rapide à ce problème. Je voulais le même pdf pour chacune de mes pages de produits mais avec le numéro et le nom du produit remplacés sur chaque pdf. J'ai découvert qu'utiliser la fusion de courrier (Word ou OpenOffice) est en fait le moyen le plus simple de le faire. J'ai ensuite exporté tous les fichiers PDF et les ai téléchargés. J'espère que cela aidera quelqu'un.

0 votes

Pourquoi a-t-on considéré qu'il n'était pas assez ciblé ?

72voto

grom Points 8057

Si vous adoptez une approche de type "remplir les blancs", vous pouvez positionner le texte avec précision où vous le souhaitez sur la page. Il est donc relativement facile (voire un peu fastidieux) d'ajouter le texte manquant au document. Par exemple avec Zend Framework :

<?php
require_once 'Zend/Pdf.php';

$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');

Si vous essayez de remplacer du contenu en ligne, tel qu'une "[chaîne de caractères de remplacement]", les choses se compliquent. Bien qu'il soit techniquement possible de le faire, vous risquez de perturber la présentation de la page.

Un document PDF est composé d'un ensemble d'opérations de dessin primitives : ligne ici, image ici, fragment de texte là, etc. Il ne contient aucune information sur l'intention de mise en page de ces primitives.

1 votes

C'est génial ! Je n'avais pas réalisé que le Zend Framework était gratuit, j'étais troublé par Zend Studio qui est propriétaire.

8 votes

Une petite mise en garde pour tous ceux qui essaient de l'utiliser : Il ne fonctionne qu'avec les PDF créés dans la version 4 ou antérieure d'Acrobat. Après la version 4, Adobe a commencé à coder les fichiers, ce qui rend plus difficile la modification des PDF (ou leur importation dans d'autres PDF).

4 votes

Support PDF 1.4 a depuis été ajouté .

47voto

metatron Points 211

Il existe une classe PDF gratuite et facile à utiliser pour créer des documents PDF. Elle s'appelle FPDF . En combinaison avec le FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ), il est même possible d'éditer des documents PDF. Le code suivant montre comment utiliser FPDF et FPDI pour remplir un bon cadeau existant avec les données de l'utilisateur.

require_once('fpdf.php'); 
require_once('fpdi.php'); 
$pdf = new FPDI();

$pdf->AddPage(); 

$pdf->setSourceFile('gift_coupon.pdf'); 
// import page 1 
$tplIdx = $this->pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$this->pdf->SetFont('Arial', '', '13'); 
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');

2 votes

Excellente bibliothèque - c'est exactement ce que je cherchais, merci pour la recommandation.

1 votes

C'est bien mais dans certains pdf, cela donne cette erreur "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI." Une solution à ce problème ?

0 votes

Vous devez convertir votre pdf à une version plus ancienne (pdf 1.4) ou utiliser l'édition commerciale de fpdi. Nous proposons un remplacement de l'analyseur syntaxique sous la forme d'un addon commercial distinct, qui permet à FPDI de traiter les documents qui utilisent ces caractéristiques de compression. source

19voto

AdamTheHutt Points 1516

Si vous avez besoin de PDFs vraiment simples, alors Zend ou FPDF est bien. Cependant, je trouve qu'il est difficile et frustrant de travailler avec eux. De plus, en raison de la façon dont l'API fonctionne, il n'y a pas de bon moyen de séparer le contenu de la présentation de la logique commerciale.

Pour cette raison, j'utilise dompdf qui convertit automatiquement les fichiers HTML et CSS en documents PDF. Vous pouvez mettre en page un modèle comme vous le feriez pour une page HTML et utiliser la syntaxe HTML standard. Vous pouvez même inclure un fichier CSS externe. La bibliothèque n'est pas parfaite et des balises ou des CSS très complexes sont parfois mélangées, mais je n'ai rien trouvé d'autre qui fonctionne aussi bien.

9 votes

-1 Puisque cela ne répond pas à la question. Le posteur veut modifier des PDF existants et non les créer à partir de zéro.

11 votes

Je suis venu sur cette page parce que je cherchais à éditer un PDF mais cette réponse me semble plus utile car je vois pourquoi il peut être plus facile de construire à partir de zéro en html plutôt que d'éditer un PDF existant.

3voto

Juan Points 2898

Zend Framework peut charger et éditer des fichiers PDF existants. Je pense qu'il supporte aussi les révisions.

Je l'utilise pour créer des documents dans un projet, et ça marche très bien. Mais je n'en ai jamais édité.

Consultez le document aquí

3voto

Darryl Hein Points 33819

Je ne sais pas si c'est une option, mais cela fonctionnerait de manière très similaire à la bibliothèque pdf de Zend, mais vous n'avez pas besoin de charger un tas de code supplémentaire (le framework zend). Elle étend simplement FPDF.

http://www.setasign.de/products/pdf-php-solutions/fpdi/

Ici, vous pouvez faire à peu près la même chose. Chargez le PDF, écrivez par-dessus, puis enregistrez dans un nouveau PDF. Dans FPDI, vous insérez le PDF comme une image et vous pouvez y mettre ce que vous voulez.

Mais encore une fois, cela utilise le FPDF, donc si vous ne voulez pas l'utiliser, cela ne fonctionnera pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X