CV. PDF

Introduction

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.

Pré-requis

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.

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.

Installation

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.

Configuration à l'exécution

Cette extension ne définit aucune directive de configuration.

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

Ancienne fonctionRemplacement
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() suivie d'un appel à pdf_open_file()
pdf_set_font()pdf_findfont() suivie 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.

Exemples

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="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);
?>

Voir aussi

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.

Table des matières
pdf_add_annotation -- Obsolète : ajoute une annotation
pdf_add_bookmark -- Ajoute un signet dans la page courante
pdf_add_launchlink -- Ajoute une annotation de lancement dans la page PDF courante
pdf_add_locallink -- Ajoute une annotation de lien dans la page PDF courante
pdf_add_note -- Ajoute une annotation dans la page PDF courante
pdf_add_outline -- Obsolète : ajoute un signet dans la page courante
pdf_add_pdflink --  Ajoute une annotation sur un lien vers un fichier dans la page PDF courante
pdf_add_thumbnail -- Ajoute une miniature sur la page PDF courante
pdf_add_weblink -- Ajoute un lien web sur la page PDF courante
pdf_arc -- Dessine un arc de cercle PDF dans le sens antihoraire
pdf_arcn -- Dessine un arc de cercle dans le sens horaire
pdf_attach_file -- Ajoute un fichier attaché à la page PDF
pdf_begin_page -- Initialise une nouvelle page de document PDF
pdf_begin_pattern -- Initialise un nouveau pattern PDF
pdf_begin_template -- Initialise un nouveau template PDF
pdf_circle -- Dessine un cercle dans un document PDF
pdf_clip -- Modifie le chemin de clipping PDF
pdf_close_image -- Ferme une image dans un document PDF
pdf_close_pdi_page -- Ferme la page PDF
pdf_close_pdi -- Ferme le fichier PDF d'entrée
pdf_close -- Ferme le fichier PDF
pdf_closepath_fill_stroke -- Termine le chemin, dessine les bords et remplit la forme
pdf_closepath_stroke -- Termine le chemin et dessine les bords
pdf_closepath -- Termine le chemin PDF courant
pdf_concat -- Concatène une matrice avec le CTM
pdf_continue_text -- Affiche du texte à la prochaine ligne PDF
pdf_curveto -- Dessine une courbe de Bezier
pdf_delete -- Efface un objet PDF
pdf_end_page -- Termine la page PDF courante
pdf_end_pattern -- Termine le pattern PDF
pdf_end_template -- Termine le template PDF
pdf_endpath -- Obsolète : termine le chemin courant
pdf_fill_stroke -- Remplit et passe le pinceau sur le chemin PDF courant
pdf_fill -- Remplit le chemin PDF courant avec la couleur courante
pdf_findfont -- Prépare une police pour utilisation ultérieure avec pdf_setfont()
pdf_get_buffer -- Lit le tampon contenant le fichier PDF généré
pdf_get_font -- Obsolète: charge une police
pdf_get_fontname -- Obsolète : lit le nom de la police
pdf_get_fontsize -- Obsolète : gère les polices
pdf_get_image_height -- Obsolète : retourne la hauteur d'une image
pdf_get_image_width -- Obsolète : retourne la largeur d'une image
pdf_get_majorversion --  Retourne le numéro de version majeur de PDFlib
pdf_get_minorversion --  Retourne le numéro de version mineure de PDFlib
pdf_get_parameter -- Lit certains paramètres
pdf_get_pdi_parameter -- Lit des paramètres textuels dans le document PDI
pdf_get_pdi_value -- Lit des paramètres numériques dans le document PDF d'entrée
pdf_get_value -- Lit certains paramètres numériques
pdf_initgraphics -- Remet à zéro l'environnement graphique PDF
pdf_lineto -- Dessine une ligne PDF
pdf_makespotcolor -- Place un point de couleur PDF
pdf_moveto -- Place le point courant PDF
pdf_new -- Crée un nouvel objet PDF
pdf_open_ccitt -- Ouvre une image contenant des données brutes CCITT
pdf_open_file -- Ouvre un nouveau fichier PDF
pdf_open_gif -- Obsolète : ouvre une image GIF
pdf_open_image_file -- Lit une image depuis un fichier
pdf_open_image -- Ouvre une image
pdf_open_jpeg -- Obsolète : ouvre une image JPEG
pdf_open_memory_image -- Ouvre une image créée en mémoire par PHP
pdf_open_pdi_page -- Prépare une page
pdf_open_pdi -- Ouvre un fichier PDF
pdf_open_png -- Obsolète : ouvre une image PNG
pdf_open_tiff -- Obsolète : ouvre une image TIFF
pdf_open -- Obsolète : ouvre un nouvel objet PDF
pdf_place_image -- Place une image dans la page
pdf_place_pdi_page -- Place une page dans le document
pdf_rect -- Dessine un rectangle
pdf_restore -- Rétablit l'ancien environnement graphique PDF
pdf_rotate -- Configure la rotation
pdf_save -- Sauve l'environnement graphique courant
pdf_scale -- Configure l'échelle du document
pdf_set_border_color -- Configure la couleur des bords autour des liens et annotations
pdf_set_border_dash -- Configure le style des lignes autour des liens at annotations
pdf_set_border_style -- Choisit le style de bord autour des liens et annotations
pdf_set_char_spacing -- Obsolète : configure l'espacement de caractàres
pdf_set_duration -- Obsolète : configure la durée entre deux pages
pdf_set_font -- Obsolète : sélectionne la taille et le nom d'une police
pdf_set_horiz_scaling -- Obsolète : configure l'échelle horizontale du texte
pdf_set_info_author --  Obsolète : remplit le champ d'auteur du document
pdf_set_info_creator --  Obsolète : remplit le champ de créateur du document
pdf_set_info_keywords --  Obsolète : remplit le champ de mots-clés du document
pdf_set_info_subject --  Obsolète : remplit le champ de sujet du document
pdf_set_info_title --  Obsolète : remplit le champ de titre du document
pdf_set_info -- Remplit un champ de l'en-tête de document PDF
pdf_set_leading -- Obsolète : configure la distance entre deux lignes de texte
pdf_set_parameter -- Modifie certains paramètres
pdf_set_text_matrix -- Obsolète : configure la matrice de texte
pdf_set_text_pos -- Modifie la position du texte
pdf_set_text_rendering -- Obsolète : détermine le rendu du texte
pdf_set_text_rise -- Obsolète : configure l'élévation de texte
pdf_set_value -- Modifie certains paramètres numériques
pdf_set_word_spacing -- Obsolète : configure l'espace entre deux mots
pdf_setcolor -- Configure la couleur de dessin et de remplissage
pdf_setdash -- Configure le mode de pointillé
pdf_setflat -- Configure la position à plat (flatness)
pdf_setfont -- Configure la police courante
pdf_setgray_fill -- Configure la couleur de remplissage à un niveau de gris
pdf_setgray_stroke -- Configure la couleur de dessin à un niveau de gris
pdf_setgray -- Configure la couleur de dessin et de remplissage à un niveau de gris
pdf_setlinecap -- Configure le paramètre de linecap
pdf_setlinejoin -- Configure le paramètre de linejoin
pdf_setlinewidth -- Configure la largeur de ligne
pdf_setmatrix -- Configure la matrice de transformation
pdf_setmiterlimit -- Configure la "miter limit"
pdf_setpolydash -- Obsolète : configure des pointillés complexes
pdf_setrgbcolor_fill -- Choisit la couleur utilisée pour le remplissage
pdf_setrgbcolor_stroke -- Choisit la couleur utilisée pour le dessin
pdf_setrgbcolor -- Choisit la couleur rgb de remplissage et de dessin
pdf_show_boxed -- Affiche le texte dans un cadre
pdf_show_xy -- Affiche un texte à une position donnée
pdf_show -- Affiche le texte à la position courante
pdf_skew -- Incline le système de coordonnées
pdf_stringwidth -- Retourne la largeur d'un texte avec la police courante
pdf_stroke -- Dessine la ligne le long du chemin
pdf_translate -- Effectue une translation de l'origine du système de coordonnées

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:02:21