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/
|