numéros de page intelligents avec FPDI / FPDF
12:21 17 12 2011Dans la continuité de l’article précédent, voici un petit tutoriel pour intégrer des numéros de page intelligents dans vos documents PDF générés par FPDF ou FPDI en PHP.
Avec FPDF, l’insertion des numéros de pages passe par la réécriture de la méthode footer() (qui est appelée à chaque création de nouvelle page) et l’utilisation de la méthode pageNo() qui renvoie le numéro de la page courante.
Typiquement :
public function Footer() { // Positionnement à 1,5 cm du bas $this->SetY(-15); // Police Arial italique 8 $this->SetFont('Arial','I',8); // Numéro de page $page = $this->PageNo(); $this->Cell(0,10,$page,0,0,$pos); }
Mais, si cette solution est suffisante pour des documents de base, la construction d’un document chiadé demande souvent des fonctionnalités supplémentaires :
- possibilité de commencer la numérotation sur la deuxième ou troisième page (pas sur la couverture) et donc de décaller les numéros des pages
- afficher le numéro de page dans le coin et donc le mettre à droite sur les pages paires et à gauche sur les pages impaires (ou vice-versa selon la page où vous commencez la numérotation)
Voici donc une version un peu plus évolué de la méthode footer() qui intègre ces fonctionnalités :
class myfpdi extends fpdi { public $addPageNum = false; public $decalage = 2; public function Footer() { // Positionnement à 1,5 cm du bas $this->SetY(-15); // Police Arial italique 8 $this->SetFont('Arial','I',8); // Numéro de page if ($this->addPageNum == true) { $page = $this->PageNo() - $this->decalage; if ($page % 2) $pos = 'R'; else $pos = 'L'; $this->Cell(0,10,$page,0,0,$pos); } } ...
Quelques explications
L’attribut $addPageNum est un booléen qui permet de dire si on doit afficher le numéro de page ou non (true ou false). A vous de lui donner la valeur souhaitée avant de faire appel à la méthode addPage();
L’attribut $decalage permet d’introduire un décalage dans la numérotation. Par exemple, si il vaut 2, la page 3 du document aura le numéro 1 d’affiché.
Enfin le test ($page % 2) ajoute l’alternance d’affichage à gauche et à droite. Inversez $pos = ‘L’; et $pos = ‘R’; si le sens ne vous convient pas.