JDNet Développeurs - Utiliser la librairie FPDF

Transcription

JDNet Développeurs - Utiliser la librairie FPDF
JDNet Développeurs - Utiliser la librairie FPDF
1 sur 3
http://developpeur.journaldunet.com/tutoriel/php/020413php_fpdf.shtml
Utiliser la librairie FPDF
Par Cyril Pierre de Geyer (Kaptive / PHPTeam)
Présentation d'une alternative gratuite à la PDFLib,
librairie permettant de créer des documents PDF à
la volée: FPDF. (16 avril 2002)
Introduction à la librairie FPDF
FPDF est une classe PHP qui permet de générer
dynamiquement des fichiers PDF en pur PHP, c'est-à-dire
sans utiliser la librairie PDFlib (donc sans payer). Le F de
FPDF signifie Free : vous êtes libre de l'utiliser et de la
modifier comme vous le souhaitez.
FPDF a d'autres avantages : des fonctions de haut niveau.
Voici une liste de ses principales fonctionnalités :
- Choix des unités et des marges
- Gestion des en-têtes et pieds de page
- Composition du document par cellules
- Saut de page automatique
- Saut de ligne automatique et justification
- Images (JPEG et PNG)
- Couleurs
- Compression des pages
FPDF ne nécessite aucune extension (à part Zlib pour
activer la compression) et est compatible avec PHP3
jusqu'à la version 1.31.
Installer la librairie FPDF
La première étape consiste à "downloader" les fichiers de la
librairie.
Au 1er avril 2002 la version en cours est la 1.41. Vous
pouvez la télécharger sur le
site de l' auteur.
Vous devrez alors mettre les fichiers de la FPDF dans votre
arborescence Web.
C'est fait ? Vous pouvez déjà utiliser la FPDF en utilisant
des "include".
Cependant il peut être intéressant de définir le chemin
d'accès à la FPDF dans la variable include_path.
Un premier exemple
Script PHP pour un document PDF "hello world"
<?
require('fpdf.php');
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
?>
[Voir le résultat]
Après avoir inclus la librairie, un objet FPDF est créé. Le
constructeur FPDF() est utilisé ici avec les valeurs par
défaut. Les pages sont en portrait A4 et l'unité de mesure
est le millimètre. On aurait pu l'indiquer explicitement par :
$pdf=new FPDF('P','mm','A4');
Il est possible de passer en paysage (L), d'utiliser d'autres
formats de page (comme A3 et A5) ainsi que d'autres unités
de mesure (pt, cm, in).
Open() commence le document PDF. Il n'y a pour l'instant
encore aucune page, c'est pourquoi il faut en ajouter une
avec AddPage(). L'origine est en haut à gauche et la
position courante est placée par défaut à 1 cm des bords;
on peut changer ces marges par SetMargins().
29/03/2006 23:09
JDNet Développeurs - Utiliser la librairie FPDF
2 sur 3
http://developpeur.journaldunet.com/tutoriel/php/020413php_fpdf.shtml
Avant d'imprimer du texte, il est impératif de définir la police
avec SetFont(), sinon le document serait invalide. On
choisit de l'Arial gras en taille 16 :
$pdf->SetFont('Arial','B',16);
On aurait pu spécifier de l'italique avec (I) ou une police
sans style avec une chaîne vide. A noter que la taille de la
police est ici donnée en points, pas en millimètres (ou autre
unité choisie); c'est la seule exception. Les autres polices
disponibles sont Times, Courier, Symbol et ZapfDingbats.
On imprime ensuite une cellule grâce à Cell(). Une cellule
est une zone rectangulaire, éventuellement encadrée, qui
contient du texte. Elle est imprimée à la position courante.
On spécifie ses dimensions, le texte (centré ou aligné), si
des bords doivent être tracés, et si la position courante doit
être déplacée à droite, en dessous ou bien doit retourner au
début de la ligne suivante. On aurait par exemple encadré
le texte comme ceci :
$pdf->Cell(40,10,'Hello World !',1);
Si on veut ajouter une nouvelle cellule à droite avec du texte
centré et retourner à la ligne, on fait :
$pdf->Cell(60,10,'Powered by FPDF.',0,1,'C');
Remarque : le retour à la ligne peut également s'effectuer
grâce à la méthode Ln(). Cette dernière permet de préciser
en plus la hauteur du saut de ligne.
Enfin, le document est terminé et envoyé au navigateur
grâce à Output(). On aurait pu le sauvegarder directement
dans un fichier en passant le nom souhaité.
Attention : dans le cas où le PDF est envoyé au
navigateur, rien d'autre ne doit être envoyé, ni avant, ni
après (le moindre espace ou retour-chariot compte). Si vous
envoyez des données avant, vous obtiendrez le message :
"Some data has already been output to browser, can't send
PDF file". Si vous en envoyez après, il se peut que le
navigateur affiche une page blanche.
Utiliser des entêtes et pieds de pages
Un document PDF plus complexe
<?php
require('fpdf.php');
class PDF extends FPDF
{
//En-tête
function Header()
{
//Logo
$this->Image('logo_pb.png',10,8,33);
//Police Arial gras 15
$this->SetFont('Arial','B',15);
//Décalage à droite
$this->Cell(80);
//Titre
$this->Cell(30,10,'Titre',1,0,'C');
//Saut de ligne
$this->Ln(20);
}
//Pied de page
function Footer()
{
//Positionnement à 1,5 cm du bas
$this->SetY(-15);
//Police Arial italique 8
$this->SetFont('Arial','I',8);
//Numéro de page
$ his->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
29/03/2006 23:09
JDNet Développeurs - Utiliser la librairie FPDF
3 sur 3
http://developpeur.journaldunet.com/tutoriel/php/020413php_fpdf.shtml
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}
//Instanciation de la classe dérivée
$pdf=new PDF();
$pdf->Open();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++)
$pdf->Cell(50,10,'Impression de la ligne numéro '.$i,0,1);
$pdf->Output();
?>
[Voir le résultat]
Cet exemple exploite les méthodes Header() et Footer()
pour traiter les en-têtes et pieds de page. Elles sont
appelées automatiquement. Leur implémentation dans la
classe FPDF est vide, aussi doit-on dériver la classe et les
redéfinir.
Le logo est imprimé grâce à la méthode Image() en
précisant le coin supérieur gauche et la largeur. La hauteur
est calculée automatiquement afin de respecter la
proportion de l'image.
Pour imprimer le numéro de page, une valeur nulle est
passée comme largeur de cellule. Cela signifie que cette
dernière doit s'étendre jusqu'à la marge droite de la page;
c'est pratique pour centrer du texte.
Le numéro de page courant est retourné par la méthode
PageNo(); le nombre total de pages s'obtient quant à lui
grâce à la valeur spéciale {nb} qui sera substituée lorsque
le document sera terminé (à condition d'avoir au préalable
appelé AliasNbPages()).
A noter l'utilisation de la méthode SetY() qui permet de se
positionner de manière absolue dans la page, à partir du
haut ou du bas.
Une autre fonctionnalité intéressante est ici utilisée : le saut
de page automatique.
Lorsqu'une cellule descend trop bas (à 2 centimètres du
bas de la page par défaut), un saut de page est effectué et
la police est restaurée.
Bien que l'en-tête et le pied de page spécifient leur propre
police (Arial), le corps de la page continue en Times. Ce
principe de restauration automatique s'applique aussi à
l'épaisseur des traits et aux couleurs. Le seuil de
déclenchement du saut de page se règle avec
SetAutoPageBreak().
Conclusion
En conclusion, il apparaît que la librairie FPDF est un outil
très puissant et très orienté pour le monde professionel où il
est tres important de disposer d'un standard de
communication. Effectivement les documents Word ne sont
pas universellement lisibles et le standard le plus utilisé est
le PDF. Les utilisations sont multiples : du plan à la facture
en passant par des articles vous pouvez utiliser la lib FPDF
pour une multitude de raisons.
Un exemple plus poussé peut être trouvé ici.
La FPDF n'a cependant pas encore toutes les
fonctionnalités que pourrait offrir un Acrobat Writer mais
c'est un très bon début. Bravo à l'auteur et qu'il continue !
Les prochaines fonctionnalités : Liens, Figures
géométriques, Polices TrueType, Jeux de caractères autres
que Windows-1252, Signets.
29/03/2006 23:09