CV. PDF
Les fonctions PDF permettent de créer des fichiers PDF en utilisant
la bibliothèque PDFlib créée par Thomas Merz.
La documentation de cette section est uniquement destinée à être
une introduction aux fonctions disponibles, et ne doit pas être
considérée comme une référence exaustive. Reportez-vous à la
documentation inclue dans la distribution de PDFlib pour plus
de détails et d'explications. Elle fournit une excellente
référence des capacités de PDFlib, et contient la documentation
la plus à jour.
Toutes les fonctions de la PDFlib et du module PHP ont des noms
et des arguments identiques. Vous aurez à comprendre quelques
concepts basiques de PDF et PostScript pour l'utiliser efficacement.
Toutes les longueurs et coordonnées sont mesurées en points
PostScript. Il y a généralement 72 points PostScript pour faire
un pouche (2.54 cm), mais cela dépend de la résolution de sortie.
Reportez-vous à la documentation PDFlib inclue dans la distribution
pour plus de détails sur le système de coordonnées.
Notez que la plupart des fonctions PDF requièrent une ressource
pdf object comme premier paramètre. Voyez
les exemples ci-dessous pour
plus de détails.
Note :
Si vous êtes intéressé par des alternatives gratuites pour
générer des PDF, sans passer par des bibliothèques PDF, voyez cette entrée de la FAQ.
Note :
Cette extension a été déplacée dans PECL
depuis PHP 4.3.9.
PDFlib est disponible en téléchargement à
http://www.pdflib.com/products/pdflib/index.html, mais impose l'achat
d'une license pour l'utiliser commercialement. Les bibliothèques
JPEG et TIFF
sont nécessaires pour faire fonctionner cette bibliothèque.
Toutes les versions de PHP 4 éditées après le 9 Mars 2000
ne suportent pas les versions de PDFlib plus anciennes que PDFlib 3.0.
PDFlib 3.0 et plus récent est supporté par PHP 3.0.19 et
plus récent.
Cette extension PECL
n'est pas intégrée à PHP.
Des informations comme les notes sur les nouvelles versions, les téléchargements, les sources des fichiers, les informations concernant les mainteneurs
ainsi qu'un CHANGELOG, peuvent être trouvées ici :
http://pecl.php.net/package/pdflib.
Pour inclure le support de la PDFlib dans votre PHP < 4.3.9, il faut compiler
PHP avec l'option --with-pdflib[=DIR]. DIR
est le dossier d'installation de PDFlib et, par défaut, il vaut
/usr/local. De plus, vous pouvez aussi spécifier
les dossiers des libariries jpeg, tiff et png que vous voulez utiliser
avec la PDFlib. Ceci est optionnel pour PDFlib 4.x.
Pour cela, ajoutez les lignes suivantes à votre script de configuration :
--with-jpeg-dir[=DIR],
--with-png-dir[=DIR] et
--with-tiff-dir[=DIR].
Lorsque vous utilisez les versions 3.x de PDFlib, vous devez configurer PDFlib
avec l'option --enable-shared-pdflib.
Depuis PHP 4.3.9, voous devez installer cette extension via PEAR, en utilisant la commande suivante :
pear install pdflib.
Cette extension ne définit aucune directive de
configuration.
Depuis le début du support de PDF sous PHP,
(commençant avec la version PDFLib 0.6), il y a eu des milliers
de modifications dans les API de PDFLib. La plupart de ces modifications
ont été suivies par PHP, et parfois même au prix
de modifications des API PHP. Depuis la version 3.x, ces API semblent
s'être stabilisées, et PHP 4 a adopté cette
version comme le minimum nécessaire pour supporter PDF.
En conséquence de quoi, un grand nombre de fonctions vont
disparaître, ou être remplacées. Le support de
PDFLib 0.6 est complètement abandonné. La liste suivante
indique quelles sont les fonctions obsolètes en PHP 4.02, et qui
devraient être remplacées par de nouvelles versions.
Tableau 1. Fonctions obsolètes et leur remplacement
La plupart des fonctions sont simples d'emploi. Le plus difficile
est probablement de créer un fichier PDF simple. L'exemple suivant
devrait vous mettre sur les rails.
Il crée un fichier test.pdf d'une page.
La page contient du texte "Times Roman outlined", d'une taille de 30pt.
Le texte est aussi souligné.
Exemple 1. Création d'un document PDF avec PDFlib
<?php $pdf = pdf_new(); pdf_open_file($pdf, "test.pdf"); pdf_set_info($pdf, "Author", "Uwe Steinmann"); pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFlib 2.0"); pdf_set_info($pdf, "Creator", "See Author"); pdf_set_info($pdf, "Subject", "Testing"); pdf_begin_page($pdf, 595, 842); pdf_add_outline($pdf, "Page 1"); $font = pdf_findfont($pdf, "Times New Roman", "winansi", 1); pdf_setfont($pdf, $font, 10); pdf_set_value($pdf, "textrendering", 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); pdf_delete($pdf); echo '<a href="/tutorial_reference/getpdf.php">terminé</a>'; ?>
|
Le script getpdf.php ne fait que retourner
le document PDF.
|
Exemple 2. Affichage d'un PDF précalculé
<?php $len = filesize($filename); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=foo.pdf"); readfile($filename); ?>
|
|
La distribution de la PDFlib contient des exemples plus complexes,
qui créent une page avec une horloge à aiguille. Ici, nous utilisons
la création de pages en mémoire, pour éviter l'utilisation de
fichiers temporaires. L'exemple a été adapté à PHP.
(Cet exemple est disponible dans la documentation
CLibPDF.)
Exemple 3. Exemple pdfclock de PDFlib
<?php $radius = 200; $margin = 20; $pagecount = 10;
$pdf = pdf_new();
if (!pdf_open_file($pdf, "")) { echo error; exit; };
pdf_set_parameter($pdf, "warning", "true");
pdf_set_info($pdf, "Creator", "pdf_clock.php"); pdf_set_info($pdf, "Author", "Uwe Steinmann"); pdf_set_info($pdf, "Title", "Analog Clock");
while ($pagecount-- > 0) { pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin));
pdf_set_parameter($pdf, "transition", "wipe"); pdf_set_value($pdf, "duration", 0.5);
pdf_translate($pdf, $radius + $margin, $radius + $margin); pdf_save($pdf); pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
/* les marques des minutes */ pdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { pdf_rotate($pdf, 6.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin/3, 0.0); pdf_stroke($pdf); }
pdf_restore($pdf); pdf_save($pdf);
/* les marques des 5 minutes */ pdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { pdf_rotate($pdf, 30.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin, 0.0); pdf_stroke($pdf); }
$ltime = getdate();
/* l'aiguille des heures */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius/2, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf);
/* l'aiguille des minutes */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius * 0.8, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf);
/* l'aiguille des secondes */ pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); pdf_setlinewidth($pdf, 2); pdf_save($pdf); pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); pdf_moveto($pdf, -$radius/5, 0.0); pdf_lineto($pdf, $radius, 0.0); pdf_stroke($pdf); pdf_restore($pdf);
/* Dessin d'un petit cercle dans le centre */ pdf_circle($pdf, 0, 0, $radius/30); pdf_fill($pdf);
pdf_restore($pdf);
pdf_end_page($pdf);
// pour voir la différence sleep(1); }
pdf_close($pdf);
$buf = pdf_get_buffer($pdf); $len = strlen($buf);
header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=foo.pdf"); echo $buf;
pdf_delete($pdf); ?>
|
|
Note :
Une alternative au module module PDFlib est le module
de FastIO : ClibPDF. Voyez la
section ClibPDF
pour plus de détails. Notez que ClibPDF
disponse d'une API différente de PDFlib.
|