TUTORIELS 
Des documents PDF à la volée en PHP
Utiliser une bibliothèque de fonctions PHP pour produire des documents PDF à la volée, entièrement configurables.  (21 septembre 2001)
 

Un précédent article traitait de la possibilité de convertir "à la volée" au format PDF des données HTML produites par un script CGI Perl, en utilisant l'outil HTMLDOC.
Le PHP permet également d'aboutir au même résultat grâce à une librairie (non gratuite, attention) développée par Thomas Merz, PDFlib, incluant une centaine de fonctions.

Ainsi, on créera un document PDF au moyen des instructions suivantes:

$pdf = PDF_new();
PDF_open_file($pdf);

et l'on spécifiera les informations relatives à ce document de la manière suivante:

PDF_set_info($pdf, "author", "JDNet Développeurs");
PDF_set_info($pdf, "title", "Des documents PDF à la volée en PHP");
PDF_set_info($pdf, "creator", "JDNet");
PDF_set_info($pdf, "subject", "Tutoriel");


Notre document PDF pourra comporter plusieurs pages: pour indiquer le début d'une nouvelle page, on écrira:

PDF_begin_page($pdf, 450, 450);

où les deux derniers arguments correspondent, respectivement, à la largeur et à la hauteur de la page (le premier argument étant un "pointeur" sur le document).
L'unité n'est pas le pixel mais le Postscript point, qui représente 1/72 d'inch, soit environ 0,35mm.

Reste à afficher le contenu de la page: il faut d'abord sélectionner une police, par exemple avec:

$font = PDF_findfont($pdf, "Helvetica-Bold", "winansi",0);

PDF_setfont($pdf, $font, 12);

Le troisième argument de la fonction PDF_findfont() correspond au type d'encodage, et le quatrième spécifie si la police doit être "incorporée" (embedded) au document, ou non. La valeur "1" n'est nécessaire que pour les polices qui ne font pas partie de la définition du format PDF (ce n'est pas le cas dans notre exemple).

Une fois la police sélectionnée, on affichera du texte par:

PDF_show_xy($pdf, "Des documents PDF à la volée en PHP ", 5, 225);


où les coordonnées sont l'abscisse et l'ordonnée du texte par rapport au bord haut-gauche de la feuille: ici le texte est centré sur la hauteur, mais à gauche de la page.

On indiquera que la page est terminée par:

PDF_end_page($pdf);

puis que le document est achevé par:

PDF_close($pdf);

Reste à transmettre notre document au navigateur:

$buffer = PDF_get_buffer($pdf);

header("Content-type: application/pdf");
header("Content-Length: ".strlen($buffer));
header("Content-Disposition: inline; filename=essai.pdf");

echo $buffer

puis à "faire le ménage":

PDF_delete($pdf);


En résumé, le code ressemblera à ceci:

<?php

$pdf = PDF_new();
PDF_open_file($pdf);

PDF_set_info($pdf, "author", "JDNet Développeurs");
PDF_set_info($pdf, "title", "Des documents PDF à la volée en PHP");
PDF_set_info($pdf, "creator", "JDNet");
PDF_set_info($pdf, "subject", "Tutoriel");

PDF_begin_page($pdf, 450, 450);

$font = PDF_findfont($pdf, "Helvetica-Bold", "winansi",0);
PDF_setfont($pdf, $font, 12);
PDF_show_xy($pdf, "Des documents PDF à la volée en PHP ", 5, 225);
// ... etc...

PDF_end_page($pdf);


PDF_close($pdf);

$buffer = PDF_get_buffer($pdf);

header("Content-type: application/pdf");
header("Content-Length: ".strlen($buffer));
header("Content-Disposition: inline; filename=essai.pdf");

echo $buffer

PDF_delete($pdf);

?>

Pour plus d'infos sur PDFlib, vous pouvez consulter le lien suivant:

http://www.pdflib.com/

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page