Question

Quelqu'un connaît-il une bonne méthode pour éditer des PDF en PHP ?De préférence des méthodes open source/sans coût de licence.:)

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 ?

J'ai déjà créé des fichiers PDF par programme en utilisant FPDF, mais je l'ai parfois trouvé un peu lourd.

Était-ce utile?

La solution

Si vous adoptez une approche « remplir le vide », 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 d'espace réservé] », cela devient beaucoup plus compliqué.Bien que cela soit techniquement possible, vous risquez de gâcher la mise en page de la page.

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

Autres conseils

Il existe une classe PDF gratuite et facile à utiliser pour créer des documents PDF.C'est appelé FPDF.En combinaison avec 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 coupon-cadeau existant avec les données 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');

Si vous avez besoin de PDF très simples, alors Zend ou FPDF c'est bien.Cependant, je les trouve difficiles et frustrants à travailler.De plus, en raison du fonctionnement de l'API, il n'existe aucun moyen efficace de séparer le contenu de la présentation de la logique métier.

Pour cette raison, j'utilise dompdf, qui convertit automatiquement les documents HTML et CSS en documents PDF.Vous pouvez présenter 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 les balises ou CSS très complexes sont parfois mutilés, mais je n'ai rien trouvé d'autre qui fonctionne aussi bien.

Zend Framework peut charger et éditer des fichiers PDF existants.Je pense qu'il prend également en charge les révisions.

Je l'utilise pour créer des documents dans un projet et cela fonctionne très bien.Cependant, je n’en ai jamais édité.

Consultez la doc ici

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).Il étend simplement FPDF.

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

Ici, vous pouvez essentiellement faire la même chose.Chargez le PDF, écrivez dessus, puis enregistrez-le dans un nouveau PDF.Dans FPDI, vous insérez essentiellement le PDF sous forme d'image afin que vous puissiez y mettre ce que vous voulez.

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

La documentation de l'extension PDF/pdflib en PHP est rare (quelque chose qui a été noté dans bugs.php.net) - Je vous recommande d'utiliser la bibliothèque Zend.

Tcpdf est également une bonne librairie pour générer des pdf en php http://www.tcpdf.org/

J'avais vraiment de grands espoirs pour dompdf (c'est une bonne idée) mais le problème de positionnement est un facteur majeur dans mon utilisation de fpdf.Bien que cela soit fastidieux car chaque élément doit être défini ;c'est puissant comme tout le monde en sort.

Je place une image sous mon espace de travail dans le document pour placer ma mise en page par-dessus et l'ajuster.Cela a toujours été suffisant, même pour les colonnes (nécessite un tout petit peu de calcul de chaîne php, mais rien de très compliqué).

Bonne chance.

Nous utilisons pdflib pour créer des fichiers PDF à partir de nos applications Rails.Il a des liaisons pour PHP et une tonne d’autres langages.

Nous utilisons la version commerciale, mais ils ont aussi un version gratuite/open source qui présente certaines limites.

Malheureusement, cela permet uniquement la création de PDF.

Si vous souhaitez ouvrir et « modifier » des fichiers existants, pdflib fournit un produit qui fait ceci, mais coûte un PARCELLE

<?php

//getting new instance
$pdfFile = new_pdf();

PDF_open_file($pdfFile, " ");

//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");

//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);

//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
    PDF_setfont($pdfFile, $font, 12);
} else {
    echo ("Font Not Found!");
    PDF_end_page($pdfFile);
    PDF_close($pdfFile);
    PDF_delete($pdfFile);
    exit();
}

//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);

//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get  the len to tell the browser about it
$pdflen = strlen($pdfFile);

//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top