ClibPDF

Manuel PHP
Précédent |  | Suivant

# 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);
    ?>

Précédent | Sommaire | Suivant
method_exists | Niveau supérieur | cpdf_add_annotation