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().
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
$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.
|