Manuel PHP

Précédent

 

Suivant

XLI. Créations de fichiers PDF

Vous disposez de fonctions PDF en PHP pour créer des fichiers PDF , pour peu que vous ayez la bibliothèque PDF de Thomas Merz (disponible à : http://www.ifconnection.de/~tm/ (site anglais)). Reportez vous à líexcellente documentation de pdflib, disponible avec la distribution de pdflib ou à : http://www.ifconnection.de/~tm/software/pdflib/PDFlib-0.6.pdf. Cíest une introduction très pratique des capacités de pdflib. La plus part des fonctions de pdflib se retrouvent dans PHPsous le même nom. De même, les paramètres sont identiques. Vous devez connaître les concepts de base de PDF ou de Postscript pour utiliser efficacement ce module. Toutes les longueurs et coordonnées sont mesurées en points Postscript points. Il y a généralement 72 points PostScript par pouce, mais cela dépend en fait de la résolution díaffichage.

Il y a un autre module PHP pour créer des document pdf , basé sur la bibliothèque FastIO's ClibPDF. Les API sont légèrement différentes. Reportez vous à la section ClibPDF pour plus de détails.

Actuellement, deux versions de la bibliothèque pdflib sont supportées : 0.6 et 2.0. Il est préférable díutiliser la nouvelle version, étant donné quíelle comporte moins de bugs, et propose plus de fonctions que líancienne version. Malheureusement, les modifications dans les API de la bibliothèque ont été si importants que certaines fonctions PHP on due être modifiées. Voici une petite liste des changements :

Le module pdf introduit deux nouveaux types de variables (avec pdflib 2.0, seulement un nouveau type) Cíest pdfdoc et pdfinfo (pdfinfo níexiste pas avec pdflib 2.0. pdfdoc est un pointeur de document PDF, et presque toutes les fonctions en ont besoin comme premier paramètre. pdfinfo contient des méta données à propos du document PDF document. Il doit exister avant díappeler pdf_open().

Pour sauver des données dans un fichier PDF, vous devez fournir un fichier de type afm pour chaque police de caractère. Les fichiers Afm contiennent les définitions des polices Postscript. Par défaut, ces fichiers afm sont rechreché dans un dossier nommé 'fonts', près du dossier qui contient le script éxécuté. (Encore une fois, ceci était vrai avec pdflib 0.6, mais ne le sera pas nécessairement avec les nouvelles versions).

La plupart des fonctions sont plutôt simple à utiliser. Le plus difficile est probablement la création díun document PDF simple. Les exemples suivant vous aideront à repérer les premiers éléments. Ils utilisent les fonctions accessibles avec pdflib 0.6. Ils créent un exemple de teste, test.pdf, díune seule page. La page contient le texte "Times-Roman" en police renforcée, souligné, de 30 pt.

Exemple 1. Création díun document PDF avec pdflib 0.6

<?php
$fp = fopen("test.pdf", "w");
$info = PDF_get_info();
pdf_set_info_author($info, "Uwe Steinmann");
PDF_set_info_title($info, "Test for PHP wrapper of PDFlib 0.6");
PDF_set_info_author($info, "Name of Author");
pdf_set_info_creator($info, "See Author");
pdf_set_info_subject($info, "Testing");
$pdf = PDF_open($fp, $info);
PDF_begin_page($pdf, 595, 842);
PDF_add_outline($pdf, "Page 1");
pdf_set_font($pdf, "Times-Roman", 30, 4);
pdf_set_text_rendering($pdf, 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);
fclose($fp);
echo "<A HREF=getpdf.php3>finished</A>";
?>
    

? Le script getpdf.php3 ne fait que produire un fichier pdf.

<?php
$fp = fopen("test.pdf", "r");
header("Content-type: application/pdf");
fpassthru($fp);
fclose($fp);
?>
     

La même chose avec pdflib 2.ressemble à ce qui suit :

Exemple 2. Création díun document PDF avec pdflib 2.0

<?php
$fp = fopen("test.pdf", "w");
$pdf = PDF_open($fp);
pdf_set_info_author($pdf, "Uwe Steinmann");
PDF_set_info_title($pdf, "Test for PHP wrapper of PDFlib 2.0");
PDF_set_info_author($pdf, "Name of Author");
pdf_set_info_creator($pdf, "See Author");
pdf_set_info_subject($pdf, "Testing");
PDF_begin_page($pdf, 595, 842);
PDF_add_outline($pdf, "Page 1");
pdf_set_font($pdf, "Times-Roman", 30, 4);
pdf_set_text_rendering($pdf, 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);
fclose($fp);
echo "<A HREF=getpdf.php3>finished</A>";
?>
     

Ce script est identique à celui ci-dessus.

La distribution de pdflib contient díautres exemples plus élaborés, qui crée des pages plus consistantes. Cet exemple converti en PHP, et en utilisant pdflib 2.0 ressemble à ce qui suit : (Vous pouvez retrouver cet exemple dans la documentation de clibpdf module):

Table des matières
PDF_get_info _ Retourne la structure díinfo par défaut díun document pdf
PDF_set_info_creator _ Affecte le champs créateur de la structure info
PDF_set_info_title _ Affecte le champs titre de la structure info
PDF_set_info_subject _ Affecte le champs sujet de la structure info
PDF_set_info_keywords _ Affecte le champs mots-clé de la structure info
PDF_set_info_author _ Affecte le champs auteur de la structure info
PDF_open _ Ouvre un nouveau document pdf
PDF_close _ Ferme un document pdf
PDF_begin_page _ Commence une nouvelle page
PDF_end_page _ Fini la page
PDF_show _ Affiche un texte à la position courante
PDF_show_xy _ Affiche un texte à une position donnée
PDF_set_font _ Sélectionne la police et sa taille
PDF_set_leading _ Choisi la distance entre les lignes du textes
PDF_set_text_rendering _ Choisi le type díaffichage du texte
PDF_set_horiz_scaling _ Choisi líéchelle horizontale de texte
PDF_set_text_rise _ Choisi líélévation du texte
PDF_set_text_matrix _ Choisi la matrice du texte
PDF_set_text_pos _ Choisi la position du texte
PDF_set_char_spacing _ Choisi líespacement des caractères
PDF_set_word_spacing _ Choisi líespacement des mots
PDF_continue_text _ Affiche un texte sur une nouvelle ligne
PDF_stringwidth _ Retourne la largeur du texte avec la police courante
PDF_save _ Enregistre líenvironnement courant
PDF_restore _ Restaure un environnement sauvé
PDF_translate _ Choisi líorigine du système de coordonnées
PDF_scale _ Choisi líéchelle
PDF_rotate _ Choisi la rotation
PDF_setflat _ Choisi la platitude
PDF_setlinejoin _ Choisi le paramètre ëlinejoiní
PDF_setlinecap _ Choisi le paramètre linecap
PDF_setmiterlimit _ Choisi le paramètre ëmiter limití
PDF_setlinewidth _ Choisi la largeur de ligne
PDF_setdash _ Choisi les caractères de remplissage
PDF_moveto _ Choisi le point courant
PDF_curveto _ Dessine une courbe
PDF_lineto _ Dessine une ligne
PDF_circle _ Dessine un cercle
PDF_arc _ Dessine un arc de cercle
PDF_rect _ Dessine un rectangle
PDF_closepath _ Clos le chemin
PDF_stroke _ Dessine le long du chemin
PDF_closepath_stroke _ Ferme le chemin et dessine le long du chemin
PDF_fill _ Remplis le chemin courant
PDF_fill_stroke _ Remplis et dessine le chemin courant
PDF_closepath_fill_stroke _ Remplis, dessine et ferme le chemin courant
PDF_endpath _ Ferme le chemin courant
PDF_clip _ Aligne sur le chemin courant
PDF_setgray_fill _Choisi la couleur grise comme couleur de remplissage
PDF_setgray_stroke _ Choisi la couleur grise comme couleur de dessin
PDF_setgray _ Choisi la couleur grise comme couleur de remplissage et de dessin
PDF_setrgbcolor_fill _ Choisi la couleur rgb comme couleur de remplissage
PDF_setrgbcolor_stroke _ Choisi la couleur rgb comme couleur de dessin
PDF_setrgbcolor _ Choisi la couleur rgb comme couleur de remplissage et de dessin
PDF_add_outline _ Ajoute un signet sur la page courante
PDF_set_transition _ Choisi une transition entre deux pages
PDF_set_duration _ Choisi la durée de transition entre deux pages
PDF_open_gif _ Ouvre une image GIF
PDF_open_memory_image _ Ouvre une image créée avec PHP
PDF_open_jpeg _ Ouvre une image JPEG
PDF_close_image _ Ferme une image
PDF_place_image _ Places une image dans la page
PDF_put_image _ Enregistre une image dans un fichier PDF pour utilisation ultérieure.
PDF_execute_image _ Place une image enregistrée dans la page
pdf_add_annotation _ Ajoute une annotation

Précédent

Sommaire

Suivant

Pattern Syntax

Chapitre

PDF_get_info