Vous disposez de fonctions PDF en PHP pour créer des fichiers PDF , pour peu que vous ayez la bibliothèque PDF de Thomas Merz (disponible à : http://www.ifconnection.de/~tm/ (site anglais)). Reportez vous à líexcellente documentation de pdflib, disponible avec la distribution de pdflib ou à : http://www.ifconnection.de/~tm/software/pdflib/PDFlib-0.6.pdf. Cíest une introduction très pratique des capacités de pdflib. La plus part des fonctions de pdflib se retrouvent dans PHPsous le même nom. De même, les paramètres sont identiques. Vous devez connaître les concepts de base de PDF ou de Postscript pour utiliser efficacement ce module. Toutes les longueurs et coordonnées sont mesurées en points Postscript points. Il y a généralement 72 points PostScript par pouce, mais cela dépend en fait de la résolution díaffichage.
Il y a un autre module PHP pour créer des document pdf , basé sur la bibliothèque FastIO's ClibPDF. Les API sont légèrement différentes. Reportez vous à la section ClibPDF pour plus de détails.
Actuellement, deux versions de la bibliothèque pdflib sont supportées : 0.6 et 2.0. Il est préférable díutiliser la nouvelle version, étant donné quíelle comporte moins de bugs, et propose plus de fonctions que líancienne version. Malheureusement, les modifications dans les API de la bibliothèque ont été si importants que certaines fonctions PHP on due être modifiées. Voici une petite liste des changements :
Le module pdf introduit deux nouveaux types de variables (avec pdflib 2.0, seulement un nouveau type) Cíest pdfdoc et pdfinfo (pdfinfo níexiste pas avec pdflib 2.0. pdfdoc est un pointeur de document PDF, et presque toutes les fonctions en ont besoin comme premier paramètre. pdfinfo contient des méta données à propos du document PDF document. Il doit exister avant díappeler pdf_open().
Pour sauver des données dans un fichier PDF, vous devez fournir un fichier de type afm pour chaque police de caractère. Les fichiers Afm contiennent les définitions des polices Postscript. Par défaut, ces fichiers afm sont rechreché dans un dossier nommé 'fonts', près du dossier qui contient le script éxécuté. (Encore une fois, ceci était vrai avec pdflib 0.6, mais ne le sera pas nécessairement avec les nouvelles versions).
La plupart des fonctions sont plutôt simple à utiliser. Le plus difficile est probablement la création díun document PDF simple. Les exemples suivant vous aideront à repérer les premiers éléments. Ils utilisent les fonctions accessibles avec pdflib 0.6. Ils créent un exemple de teste, test.pdf, díune seule page. La page contient le texte "Times-Roman" en police renforcée, souligné, de 30 pt.
Exemple 1. Création díun document PDF avec pdflib 0.6 <?php $fp = fopen("test.pdf", "w"); $info = PDF_get_info(); pdf_set_info_author($info, "Uwe Steinmann"); PDF_set_info_title($info, "Test for PHP wrapper of PDFlib 0.6"); PDF_set_info_author($info, "Name of Author"); pdf_set_info_creator($info, "See Author"); pdf_set_info_subject($info, "Testing"); $pdf = PDF_open($fp, $info); PDF_begin_page($pdf, 595, 842); PDF_add_outline($pdf, "Page 1"); pdf_set_font($pdf, "Times-Roman", 30, 4); pdf_set_text_rendering($pdf, 1); PDF_show_xy($pdf, "Times Roman outlined", 50, 750); pdf_moveto($pdf, 50, 740); pdf_lineto($pdf, 330, 740); pdf_stroke($pdf); PDF_end_page($pdf); PDF_close($pdf); fclose($fp); echo "<A HREF=getpdf.php3>finished</A>"; ?> |
? Le script getpdf.php3 ne fait que produire un fichier pdf.
<?php $fp = fopen("test.pdf", "r"); header("Content-type: application/pdf"); fpassthru($fp); fclose($fp); ?>
Exemple 2. Création díun document PDF avec pdflib 2.0 <?php $fp = fopen("test.pdf", "w"); $pdf = PDF_open($fp); pdf_set_info_author($pdf, "Uwe Steinmann"); PDF_set_info_title($pdf, "Test for PHP wrapper of PDFlib 2.0"); PDF_set_info_author($pdf, "Name of Author"); pdf_set_info_creator($pdf, "See Author"); pdf_set_info_subject($pdf, "Testing"); PDF_begin_page($pdf, 595, 842); PDF_add_outline($pdf, "Page 1"); pdf_set_font($pdf, "Times-Roman", 30, 4); pdf_set_text_rendering($pdf, 1); PDF_show_xy($pdf, "Times Roman outlined", 50, 750); pdf_moveto($pdf, 50, 740); pdf_lineto($pdf, 330, 740); pdf_stroke($pdf); PDF_end_page($pdf); PDF_close($pdf); fclose($fp); echo "<A HREF=getpdf.php3>finished</A>"; ?> Ce script est identique à celui ci-dessus. |
La distribution de pdflib contient díautres exemples plus élaborés, qui crée des pages plus consistantes. Cet exemple converti en PHP, et en utilisant pdflib 2.0 ressemble à ce qui suit : (Vous pouvez retrouver cet exemple dans la documentation de clibpdf module):