Tutoriel

Note : à partir de la version 1.2, il peut être nécessaire de définir la constante FPDF_FONTPATH au début des scripts. Lisez bien le fichier install.txt fourni avec l'archive.

Exemple minimal

Voici pour commencer l'exemple classique :

<?php
require('fpdf.php');
$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
?>

Le constructeur FPDF est utilisé ici avec les valeurs par défaut. Les pages sont en portrait et l'unité de mesure est le millimètre. On aurait pu l'indiquer explicitement par :

$pdf=new FPDF('P','mm');

Il est possible de passer en paysage (L) et d'utiliser 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, 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 elle doit être entourée, et si la position courante doit être déplacée à droite ou doit au contraire aller à la ligne suivante. On aurait 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 dans un fichier en passant le nom souhaité.

En-tête, pied de page, saut de page et image

Voici un exemple de deux pages avec en-tête, pied de page et logo :

<?php
require('fpdf.php');

class PDF extends FPDF
{
//Constructeur (obligatoire pour PHP3)
function PDF()
{
    $this->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');
    //Saut de ligne
    $this->Ln(20);
}

//Pied de page
function Footer()
{
    //Police Arial italique 8
    $this->SetFont('Arial','I',8);
    //Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    //Décalage à droite
    $this->Cell(80);
    //Numéro de page
    $this->Cell(30,10,'Page '.$this->PageNo());
}
}

//Instanciation de la classe dérivée
$pdf=new PDF();
$pdf->Open();
$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();
?>

Cet exemple exploite les méthode Header() et Footer() pour traiter les en-têtes et pieds de page. Leur implémentation dans la classe FPDF est vide, aussi devez-vous 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.

Une autre fonctionnalité 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().

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.

Retour du texte à la ligne et couleurs

Voici pour continuer un exemple imprimant des paragraphes de texte justifié. Il illustre également l'utilisation des couleurs.

<?php
require('fpdf.php');

class PDF extends FPDF
{

function PDF()
{
    $this->FPDF();
}

function Header()
{
    global $titre;

    //Arial gras 15
    $this->SetFont('Arial','B',15);
    //Calcul de la largeur du titre et positionnement
    $w=$this->GetStringWidth($titre)+6;
    $this->SetX((210-$w)/2);
    //Couleurs du cadre, du fond et du texte
    $this->SetDrawColor(0,80,180);
    $this->SetFillColor(230,230,0);
    $this->SetTextColor(220,50,50);
    //Epaisseur du cadre (1 mm)
    $this->SetLineWidth(1);
    //Titre centré
    $this->Cell($w,9,$titre,1,1,'C',1);
    //Saut de ligne
    $this->Ln(10);
}

function Footer()
{
    //Positionnement à 1,5 cm du bas
    $this->SetY(-15);
    //Arial italique 8
    $this->SetFont('Arial','I',8);
    //Couleur du texte en gris
    $this->SetTextColor(128);
    //Numéro de page
    $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
}

function TitreChapitre($num,$lib)
{
    //Arial 12
    $this->SetFont('Arial','',12);
    //Couleur de fond
    $this->SetFillColor(200,220,255);
    //Titre
    $this->Cell(0,6,"Chapitre $num : $lib",0,1,'L',1);
    //Saut de ligne
    $this->Ln(4);
}

function CorpsChapitre($fichier)
{
    //Lecture du fichier texte
    $f=fopen($fichier,"r");
    $txt=fread($f,filesize($fichier));
    fclose($f);
    //Times 12
    $this->SetFont('Times','',12);
    //Sortie du texte justifié
    $this->MultiCell(0,5,$txt);
    //Saut de ligne
    $this->Ln();
    //Mention en italique
    $this->SetFont('','I');
    $this->Cell(0,5,"(fin de l'extrait)");
}

function AjouterChapitre($num,$titre,$fichier)
{
    $this->AddPage();
    $this->TitreChapitre($num,$titre);
    $this->CorpsChapitre($fichier);
}
}

$pdf=new PDF();
$pdf->Open();
$titre='Vingt mille lieues sous les mers';
$pdf->SetTitle($titre);
$pdf->SetAuthor('Jules Verne');
$pdf->AjouterChapitre(1,"UN ÉCUEIL FUYANT","20k_c1.txt");
$pdf->AjouterChapitre(2,"LE POUR ET LE CONTRE","20k_c2.txt");
$pdf->Output();
?>

La méthode GetStringWidth() permet de déterminer la longueur d'une chaîne dans la police courante, ce qui est utilisé ici pour calculer la largeur du cadre entourant le titre. Puis les couleurs sont définies (via SetDrawColor(), SetFillColor() et SetTextColor()) et l'épaisseur du trait positionnée à 1 mm (contre 0,2 par défaut) grâce à SetLineWidth(). Il ne reste alors plus qu'à imprimer la cellule pour le titre (le dernier paramètre à 1 indique que le fond doit être coloré).

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 ou occuper toute la largeur.

La méthode permettant d'imprimer les paragraphes est MultiCell(). A chaque fois qu'une ligne arrive à l'extrémité droite de la cellule ou qu'un caractère de retour-chariot est rencontré, un saut est effectué et une nouvelle cellule automatiquement créée sous la précédente. Le texte est justifié par défaut.

Deux propriétés du document sont positionnées : le titre (SetTitle()) et l'auteur (SetAuthor()). Les propriétés sont visibles de deux manières différentes. En ouvrant directement le document avec Acrobat Reader, en allant dans le menu Fichier, Informations sur le document, option Générales. Seconde méthode, accessible aussi à partir du plug-in, cliquer sur le triangle juste au-dessus de la barre de défimement de droite et sélectionner Informations sur le document.