XIII. 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 PHP.5.1.0.

Note : 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.

Pré-requis

Pour utiliser les fontions ClibPDF vous devez installer la libriaire ClibPDF. Elle est disponible au téléchargement sur le site de FastIO, mais elle impose l'achat d'une license pour utilisation commerciale. PHP requiert que vous utilisiez ClibPDF >= 2.

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.

CPDF_PM_NONE (entier)

CPDF_PM_OUTLINES (entier)

CPDF_PM_THUMBS (entier)

CPDF_PM_FULLSCREEN (entier)

CPDF_PL_SINGLE (entier)

CPDF_PL_1COLUMN (entier)

CPDF_PL_2LCOLUMN (entier)

CPDF_PL_2RCOLUMN (entier)

Exemples

Exemple 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 :

Exemple 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 des matières
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, relativement
cpdf_rmoveto -- Fixe le point courant relativement
cpdf_rotate_text --  Configure l'inclinaison d'un texte
cpdf_rotate -- Effectue une rotation
cpdf_save_to_file -- Ecrit 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 -- Fixe le créateur d'un document PDF
cpdf_set_current_page -- Fixe la page courante
cpdf_set_font_directories --  Précise les dossiers à fouiller pour 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 -- Fixe le motif de pointillés
cpdf_setflat -- Fixe la platitude (flatness)
cpdf_setgray_fill --  Modifie 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