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 remplacement Ancienne fonction Remplacement pdf_put_image Désormais inutile. pdf_execute_image Désormais inutile. pdf_get_annotation pdf_get_bookmark en utilisant les mêmes paramètres. pdf_get_font pdf_get_value en passant "font" comme second paramètre. pdf_get_fontsize pdf_get_value en passant "fontsize" comme second paramètre. pdf_get_fontname pdf_get_parameter en passant "fontname" comme second paramètre. pdf_set_info_creator pdf_set_info en passant "Creator" comme second paramètre. pdf_set_info_title pdf_set_info en passant "Title" comme second paramètre. pdf_set_info_subject pdf_set_info en passant "Subject" comme second paramètre. pdf_set_info_author pdf_set_info en passant "Author" comme second paramètre. pdf_set_info_keywords pdf_set_info en passant "Keywords" comme second paramètre. pdf_set_leading pdf_set_value en passant "leading" comme second paramètre. pdf_set_text_rendering pdf_set_value en passant "textrendering" comme second paramètre. pdf_set_text_rise pdf_set_value en passant "textrise" comme second paramètre. pdf_set_horiz_scaling pdf_set_value en passant "horizscaling" comme second paramètre. pdf_set_text_matrix Désormais abandonnée. pdf_set_char_spacing pdf_set_value en passant "charspacing" comme second paramètre. pdf_set_word_spacing pdf_set_value en passant "wordspacing" comme second paramètre. pdf_set_transition pdf_set_parameter en passant "transition" comme second paramètre. pdf_open pdf_new suivi d'un appel à pdf_open_file pdf_set_font pdf_findfont suivi d'un appel à pdf_setfont pdf_set_duration pdf_set_value en passant "duration" comme second paramètre. pdf_open_gif pdf_open_image_file en passant "gif" comme second paramètre. pdf_open_jpeg pdf_open_image_file en passant "jpeg" comme second paramètre. pdf_open_tiff pdf_open_image_file en passant "tiff" comme second paramètre. pdf_open_png pdf_open_image_file en passant "png" comme second paramètre. pdf_get_image_width pdf_get_value en passant "imagewidth" comme second paramètre et l'image en troisième paramètre. pdf_get_image_height pdf_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;