D'Édition de PDF en PHP? [fermé]

est-ce que quelqu'un connaît une bonne méthode pour éditer des PDF en PHP? De préférence des méthodes open-source/coût de licence zéro. :)

je pense comme ouvrir un fichier PDF, remplacer le texte dans le PDF et ensuite écrire la version modifiée du PDF?

j'ai créé des fichiers PDF de façon programmatique dans le passé en utilisant FPDF, mais je l'ai trouvé un peu lourd parfois.

69
demandé sur kaybenleroll 2008-08-11 01:58:24

10 réponses

si vous optez pour l'approche' fill in the blank', vous pouvez placer du texte n'importe où sur la page. Il est donc relativement facile (si ce n'est 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 un contenu en ligne, comme un" [placeholder string], " cela devient beaucoup plus compliqué. Bien qu'il soit techniquement possible de le faire, 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 primitif: ligne ici, image ici, morceau de texte là, etc. Il ne contient aucune information sur l'intention de mise en page de ces primitives.

63
répondu grom 2008-08-11 00:54:22

il y a une classe PDF gratuite et facile à utiliser pour créer des documents PDF. Ça s'appelle FPDF . En association avec FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ) il est même possible de modifier des documents PDF. Le code suivant montre comment utiliser FPDF et FPDI pour remplir un coupon 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');
36
répondu metatron 2018-07-01 15:06:16

si vous avez besoin de PDFs vraiment simples, alors Zend ou FPDF est très bien. Cependant, je les trouve difficiles et frustrantes à travailler. En outre, en raison de la façon dont l'API fonctionne, il n'y a pas de bonne façon de séparer le contenu de la présentation de la logique d'affaires.

pour cette raison, j'utilise dompdf , qui convertit automatiquement HTML et CSS en documents PDF. Vous pouvez jeter un modèle comme vous le feriez pour une page HTML et syntaxe HTML standard. Vous pouvez même inclure un fichier CSS externe. La bibliothèque n'est pas parfaite et très complexe markup ou css est parfois mutilé, mais je n'ai rien trouvé d'autre qui fonctionne aussi bien.

17
répondu AdamTheHutt 2012-12-07 22:51:30

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

Je l'utilise pour créer des docs dans un projet, et ça marche très bien. Jamais édité un bien.

consultez le doc ici

3
répondu Juan 2008-08-10 23:16:39

ne sait pas si c'est une option, mais cela fonctionnerait très similaire à la bibliothèque pdf de Zend, mais vous n'avez pas besoin de charger un tas de code supplémentaire (le cadre de zend). Il étend juste FPDF.

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

ici, vous pouvez faire la même chose. Chargez le PDF, écrivez dessus, puis sauvegardez dans un nouveau PDF. Dans FPDI vous insérez essentiellement le PDF comme une image de sorte que vous pouvez mettre ce que vous voulez sur elle.

mais encore une fois, cela utilise FPDF, donc si vous ne voulez pas utiliser cela, alors il ne fonctionnera pas.

3
répondu Darryl Hein 2008-09-09 22:46:40

la documentation D'extension PDF/pdflib en PHP est clairsemée (quelque chose qui a été noté en bugs.php.net) - I reccommend you use the Zend library.

2
répondu Ross 2008-08-21 16:15:39

Tcpdf est également un bon liabrary pour la génération de pdf en php http://www.tcpdf.org/

2
répondu Mufaddal 2012-05-29 12:38:35

j'avais vraiment de grands espoirs pour dompdf (c'est une idée cool) mais la question du positionnement est un facteur important dans mon utilisation fpdf. Si c'est fastidieux, car chaque élément est défini; il est puissant comme tous sortir.

j'ai placé une image sous mon espace de travail dans le document pour mettre ma mise en page dessus de pour s'adapter. 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 trop grisant).

bonne chance.

1
répondu josh.chavanne 2008-09-18 00:55:36

nous utilisons pdflib pour créer des fichiers PDF à partir de nos applications rails. Il a des reliures pour PHP, et une tonne d'autres langues.

nous utilisons la version commerciale, mais ils ont aussi une version libre/open source qui a certaines limites.

malheureusement, cela ne permet que la création de PDF.

si vous voulez ouvrir et 'éditer' des fichiers existants, pdflib fournit a produit qui fait ceci ce , mais coûte un LOT

0
répondu Orion Edwards 2008-08-10 22:41:00
<?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);
?>
0
répondu Nitin 2009-10-21 20:56:21