Fonctions ClibPDF
Introduction
L'extension ClibPDF vous permet de créer des documents PDF avec PHP. Les fonctionnalités et API de ClibPDF sont très similaires à PDFlib. Cette documentation devrait être lue avec le manuel ClibPDF sous la main, car il est beaucoup plus détaillé.
Beaucoup de fonctions natives de ClibPDF et du module PHP, de même que celles de PDFlib, ont le même nom. Toutes les fonctions, hormis cpdf_open() utilisent un pointeur sur un document comme premier paramètre.
Actuellement, ce pointeur n'est pas utilisé en interne, car ClibPDF ne supporte pas la création de plusieurs documents PDF simultanément. En fait, il ne vaut mieux pas l'envisager, car les résultats sont aléatoires. Je ne veux même pas imaginer les problèmes qui pourraient se poser avec les environnements multi-tâches. Selon l'auteur de ClibPDF, cette situation va changer dans les prochaines versions (lorsque cette documentation a été écrite, c'était la version 1.10). Si vous avez besoin de cette fonctionnalité, utilisez pdflib.
Une caractéristique pratique de ClibPDF (et aussi de PDFlib) est celle de créer le document PDF en mémoire, sans fichiers temporaires. ClibPDF permet aussi de passer les coordonnées avec une unité prédéfinie (ce qui peut être simulé avec pdf_translate() de la bibliothèque PDFlib).
Un autre atout de ClibPDF est que chaque page peut être modifiée à tout moment même si une nouvelle page a été ouverte. La fonction cpdf_set_current_page() vous permet de quitter temporairement une page et d'en modifier une autre.
La plupart des fonctions sont très simples d'emploi. Le plus difficile est probablement de créer un document PDF simple. L'exemple suivant devrait vous aider à démarrer. La page contient du texte qui utilise la police "Times-Roman" en taille 30, outlined. Le texte est souligné.
Note: Cette extension a été déplacée dans le module » PECL et ne sera plus intégrée dans PHP à partir de PHP 5.1.0.
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.
Pré-requis
Pour utiliser les fonctions ClibPDF vous devez installer la librairie ClibPDF. Elle est disponible au téléchargement sur le site de » FastIO, mais elle impose l'achat d'une licence pour utilisation commerciale. PHP requiert que vous utilisiez ClibPDF >= 2. Le développement de la bibliothèque ClibPDF s'est interrompu. Ainsi, l'accès au site FastIO sera probablement impossible.
Installation
Pour pouvoir utiliser ces fonctions, vous devez compiler PHP avec l'option --with-cpdflib[=DIR]. DIR est le dossier d'installation de CPDFLib et, par défaut, il vaut /usr. De plus, vous pouvez spécifier les bibliothèques TIFF et JPEG que vous utilisez. Pour cela, ajoutez les options de configuration --with-jpeg-dir[=DIR] et --with-tiff-dir[=DIR].
Configuration à l'exécution
Cette extension ne définit aucune directive de configuration.
Constantes pré-définies
Ces constantes sont définies par cette extension, et ne sont disponibles que si cette extension a été compilée avec PHP, ou bien chargée au moment de l'exécution.
Exemples
Example#1 Exemple simple ClibPDF
<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 50);
cpdf_end_text($cpdf);
cpdf_moveto($cpdf, 50, 50);
cpdf_lineto($cpdf, 740, 330);
cpdf_stroke($cpdf);
cpdf_finalize_page($cpdf, 1);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
La distribution pdflib contient un exemple plus complet, qui crée des séries de pages avec une horloge. Voici cet exemple converti en script PHP qui utilise l'extension ClibPDF :
Example#2 Exemple pdfclock de la distribution pdflib 2.0
<?php
$radius = 200;
$margin = 20;
$pagecount = 40;
$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php");
cpdf_set_title($pdf, "Analog Clock");
while ($pagecount-- > 0) {
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */
cpdf_translate($pdf, $radius + $margin, $radius + $margin);
cpdf_save($pdf);
cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
/* minute strokes */
cpdf_setlinewidth($pdf, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
cpdf_rotate($pdf, 6.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin/3, 0.0);
cpdf_stroke($pdf);
}
cpdf_restore($pdf);
cpdf_save($pdf);
/* 5 minute strokes */
cpdf_setlinewidth($pdf, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
cpdf_rotate($pdf, 30.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin, 0.0);
cpdf_stroke($pdf);
}
$ltime = getdate();
/* draw hour hand */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius/2, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* draw minute hand */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius * 0.8, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* draw second hand */
cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
cpdf_setlinewidth($pdf, 2);
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
cpdf_moveto($pdf, -$radius/5, 0.0);
cpdf_lineto($pdf, $radius, 0.0);
cpdf_stroke($pdf);
cpdf_restore($pdf);
/* draw little circle at center */
cpdf_circle($pdf, 0, 0, $radius/30);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_finalize_page($pdf, $pagecount+1);
}
cpdf_finalize($pdf);
header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
Voir aussi
Voir aussi la documentation de PDFlib.
Table of Contents
- cpdf_add_annotation — Ajoute une annotation
- cpdf_add_outline — Ajoute un signet à la page courante
- cpdf_arc — Dessine un arc de cercle
- cpdf_begin_text — Démarre une section de texte
- cpdf_circle — Dessine un cercle
- cpdf_clip — Aligne les dessins sur le chemin courant
- cpdf_close — Ferme un fichier PDF
- cpdf_closepath_fill_stroke — Remplit le chemin, dessine le bord et ferme le chemin
- cpdf_closepath_stroke — Ferme le fichier et dessine une ligne le long du chemin
- cpdf_closepath — Ferme le chemin
- cpdf_continue_text — Affiche le texte à la ligne suivante
- cpdf_curveto — Dessine une courbe
- cpdf_end_text — Termine une section de texte
- cpdf_fill_stroke — Remplit le chemin, et dessine le bord
- cpdf_fill — Remplit le chemin courant
- cpdf_finalize_page — Termine une page
- cpdf_finalize — Termine un document
- cpdf_global_set_document_limits — Fixe les limites d'un document PDF
- cpdf_import_jpeg — Ouvre une image JPEG
- cpdf_lineto — Dessine une ligne
- cpdf_moveto — Fixe le point courant de dessin CPDF
- cpdf_newpath — Commence un nouveau chemin
- cpdf_open — Ouvre un nouveau document PDF
- cpdf_output_buffer — Affiche le document PDF qui est en mémoire
- cpdf_page_init — Commence une nouvelle page
- cpdf_place_inline_image — Place une image dans une page
- cpdf_rect — Dessine un rectangle
- cpdf_restore — Restaure un environnement sauvegardé
- cpdf_rlineto — Dessine une ligne
- cpdf_rmoveto — Fixe le point courant
- cpdf_rotate_text — Configure l'inclinaison d'un texte
- cpdf_rotate — Effectue une rotation
- cpdf_save_to_file — Écrit un document PDF dans un fichier
- cpdf_save — Sauve l'environnement courant
- cpdf_scale — Modifie l'échelle
- cpdf_set_action_url — Paramètre un hyper lien
- cpdf_set_char_spacing — Fixe l'espacement des caractères
- cpdf_set_creator — Définit le créateur d'un document PDF
- cpdf_set_current_page — Définit la page courante
- cpdf_set_font_directories — Définit les dossiers dans lesquels on doit rechercher des polices externes
- cpdf_set_font_map_file — Configure le fichier de remplacement de polices externes
- cpdf_set_font — Sélectionne la police courante et sa taille
- cpdf_set_horiz_scaling — Fixe l'échelle horizontale du texte
- cpdf_set_keywords — Fixe les mots-clés d'un document PDF
- cpdf_set_leading — Fixe la distance entre deux lignes
- cpdf_set_page_animation — Fixe l'animation de la transition entre les pages
- cpdf_set_subject — Fixe le sujet d'un document PDF
- cpdf_set_text_matrix — Fixe la matrice du texte
- cpdf_set_text_pos — Fixe la position du texte
- cpdf_set_text_rendering — Détermine le rendu du texte
- cpdf_set_text_rise — Fixe l'élévation du texte
- cpdf_set_title — Fixe le titre d'un document PDF
- cpdf_set_viewer_preferences — Indique comment afficher le document à l'utilisateur
- cpdf_set_word_spacing — Fixe l'espacement des mots
- cpdf_setdash — Définit le motif de pointillés
- cpdf_setflat — Définit la platitude (flatness)
- cpdf_setgray_fill — Définit le niveau de gris comme couleur de remplissage
- cpdf_setgray_stroke — Choisit un niveau de gris comme couleur de dessin
- cpdf_setgray — Modifie un niveau de gris comme couleur de dessin et de remplissage
- cpdf_setlinecap — Fixe le paramètre linecap
- cpdf_setlinejoin — Fixe le paramètre linejoin
- cpdf_setlinewidth — Fixe la largeur de ligne
- cpdf_setmiterlimit — Fixe le paramètre miter limit
- cpdf_setrgbcolor_fill — Choisit une couleur rgb comme couleur de remplissage
- cpdf_setrgbcolor_stroke — Choisit une couleur rgb comme couleur de dessin
- cpdf_setrgbcolor — Choisit une couleur rgb comme couleur de dessin et de remplissage
- cpdf_show_xy — Affiche un texte à une position
- cpdf_show — Imprime un texte à la position courante
- cpdf_stringwidth — Retourne la taille de la police courante
- cpdf_stroke — Dessine une ligne le long du chemin
- cpdf_text — Imprime un texte avec des options
- cpdf_translate — Modifie l'origine du système de coordonnées