Forum und email

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.

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

Example#1 Exemple simple ClibPDF

<?php
$cpdf 
cpdf_open(0);
cpdf_page_init($cpdf105958421.0);
cpdf_add_outline($cpdf0001"Page 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf"Times-Roman"30"WinAnsiEncoding");
cpdf_set_text_rendering($cpdf1);
cpdf_text($cpdf"Times Roman outlined"5050);
cpdf_end_text($cpdf);
cpdf_moveto($cpdf5050);
cpdf_lineto($cpdf740330);
cpdf_stroke($cpdf);
cpdf_finalize_page($cpdf1);
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+10* ($radius $margin), * ($radius $margin), 1.0);

  
cpdf_set_page_animation($pdf40.5000);  /* wipe */

  
cpdf_translate($pdf$radius $margin$radius $margin);
  
cpdf_save($pdf);
  
cpdf_setrgbcolor($pdf0.00.01.0);

  
/* minute strokes */
  
cpdf_setlinewidth($pdf2.0);
  for (
$alpha 0$alpha 360$alpha += 6)
    {
    
cpdf_rotate($pdf6.0);
    
cpdf_moveto($pdf$radius0.0);
    
cpdf_lineto($pdf$radius-$margin/30.0);
    
cpdf_stroke($pdf);
    }

  
cpdf_restore($pdf);
  
cpdf_save($pdf);

  
/* 5 minute strokes */
  
cpdf_setlinewidth($pdf3.0);
  for (
$alpha 0$alpha 360$alpha += 30)
  {
    
cpdf_rotate($pdf30.0);
    
cpdf_moveto($pdf$radius0.0);
    
cpdf_lineto($pdf$radius-$margin0.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/20.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.80.0);
  
cpdf_lineto($pdf, -$radius/10$radius/20);
  
cpdf_closepath($pdf);
  
cpdf_fill($pdf);
  
cpdf_restore($pdf);

  
/* draw second hand */
  
cpdf_setrgbcolor($pdf1.00.00.0);
  
cpdf_setlinewidth($pdf2);
  
cpdf_save($pdf);
  
cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
  
cpdf_moveto($pdf, -$radius/50.0);
  
cpdf_lineto($pdf$radius0.0);
  
cpdf_stroke($pdf);
  
cpdf_restore($pdf);

  
/* draw little circle at center */
  
cpdf_circle($pdf00$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