X. ClibPDF

L'extension ClibPDF vous permet de créer des documents PDF avec PHP. Elle est disponible en téléchargement sur le site FastIO, mais requiert l'achat d'une licence pour utilisation commerciale. 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 sont natives de ClibPDF et se retrouvent dans le module PHP, et tout comme pdflib, elles 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 pourrait 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é traduite, c'était la version 1.10). Si vous avez besoin de cette fonctionnalité, utilisez pdflib.

Note : La fonction cpdf_set_font() a changé depuis le PHP 3.0 pour supporter les polices asiatiques. Le paramètre d'encodage n'est plus un entier, mais une chaîne.

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

Exemple 1. Exemple simple ClibPDF

<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_moveto($cpdf, 50, 740);
cpdf_lineto($cpdf, 330, 740);
cpdf_stroke($cpdf);
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 convertit 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.php3");
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);
  /* indications des minutes */
  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);
  /* Indications des 5 minutes */
  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();
  /* aiguille des heures */
  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);
  /* aiguille des minutes */
  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);
  /* aiguille des secondes */
  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);
  /* Un petit cercle au centre */
  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);
?>
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 -- Imprime 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.
cpdf_newpath -- Commence un nouveau chemin
cpdf_open -- Ouvre un nouveau document PDF.
cpdf_output_buffer -- Outputs the pdf document in memory buffer
cpdf_page_init -- Starts new page
cpdf_place_inline_image -- Places an image on the page
cpdf_rect -- Draw a rectangle
cpdf_restore -- Restaure un environnement.
cpdf_rlineto -- Dessine une ligne, relativement.
cpdf_rmoveto -- Fixe le point courant relativement.
cpdf_rotate_text --  Sets text rotation angle
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 --  Sets hyperlink
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 --  Sets directories to search when using external fonts
cpdf_set_font_map_file --  Sets fontname to filename translation map when using external fonts
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 mot 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 --  How to show the document in the viewer
cpdf_set_word_spacing -- Fixe l'espacement des mots.
cpdf_setdash -- Fixe le motif de pointillé.
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 chaîne.
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.