PDF PDF
&reftitle.intro;
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.
Si vous êtes intéressés par des alternatives gratuites pour
générer des
PDF, sans passer par des bibliothèques PDF, voyez cette entrée de la FAQ.
&reftitle.required;
PDFlib est disponible en téléchargement à
&url.pdf;, 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.
Problèmes avec les anciennes versions de PDFlib
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.
&reference.pdf.configure;
&reftitle.runtime;
&no.config;
Confusion entre les vieilles versions de PDFLib
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ée 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.
Fonctions obsolètes et leur remplacementAncienne fonctionRemplacementpdf_put_imageDésormais inutile.pdf_execute_imageDésormais inutile.pdf_get_annotationpdf_get_bookmark en utilisant les
mêmes paramètres.pdf_get_fontpdf_get_value en passant
"font" comme second paramètre.pdf_get_fontsizepdf_get_value en passant
"fontsize" comme second paramètre.pdf_get_fontnamepdf_get_parameter en passant
"fontname" comme second paramètre.pdf_set_info_creatorpdf_set_info en passant
"Creator" comme second paramètre.pdf_set_info_titlepdf_set_info en passant
"Title" comme second paramètre.pdf_set_info_subjectpdf_set_info en passant
"Subject" comme second paramètre.pdf_set_info_authorpdf_set_info en passant
"Author" comme second paramètre.pdf_set_info_keywordspdf_set_info en passant
"Keywords" comme second paramètre.pdf_set_leadingpdf_set_value en passant
"leading" comme second paramètre.pdf_set_text_renderingpdf_set_value en passant
"textrendering" comme second paramètre.pdf_set_text_risepdf_set_value en passant
"textrise" comme second paramètre.pdf_set_horiz_scalingpdf_set_value en passant
"horizscaling" comme second paramètre.pdf_set_text_matrixDésormais abandonnée.pdf_set_char_spacingpdf_set_value en passant
"charspacing" comme second paramètre.pdf_set_word_spacingpdf_set_value en passant
"wordspacing" comme second paramètre.pdf_set_transitionpdf_set_parameter en passant
"transition" comme second paramètre.pdf_openpdf_new suivi d'un appel à
pdf_open_filepdf_set_fontpdf_findfont suivi d'un appel à
pdf_setfontpdf_set_durationpdf_set_value en passant
"duration" comme second paramètre.pdf_open_gifpdf_open_image_file en passant
"gif" comme second paramètre.pdf_open_jpegpdf_open_image_file en passant
"jpeg" comme second paramètre.pdf_open_tiffpdf_open_image_file en passant
"tiff" comme second paramètre.pdf_open_pngpdf_open_image_file en passant
"png" comme second paramètre.pdf_get_image_widthpdf_get_value en passant
"imagewidth" comme second paramètre et l'image
en troisième paramètre.pdf_get_image_heightpdf_get_value en passant
"imageheight" comme second paramètre et l'image
en troisième paramètre.
&reftitle.examples;
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", de taille de 30pt.
Le texte est aussi souligné.
Création d'un document PDF avec PDFlib
terminé';
?>
]]>
Le script getpdf.php ne fait que retourner
le document PDF.
Affichage d'un PDF précalculé
]]>
La distribution de la PDFlib contient des exemples plus complexes,
qui créent un 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 pdfclock de PDFlib
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);
?>
]]>
&reftitle.seealso;
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.
&reference.pdf.functions;