Générer un pdf avec FPDF

Fpdf est une classe qui permet de générer des pdf sans librairie additionnelle. La documentation est en français pour une fois alors profitons-en.

Précédent | 14/15 | Suivant

Fpdf est une classe assez puissante qui permet de créer des pdf, d’y incorporer du texte, des images, ainsi que des éléments de types lignes, cercles, etc. Quelques contributions permettent d’étendre ses fonctionnalités, pour faire des doubles pages notamment.

Ici le script que nous allons faire va générer un pdf de jaquette dvd, avec une tranche, une image d’illustration, un titre, un texte de présentation, etc.

Le script complet est fourni en bas de cette page, il est commenté. N’oubliez pas d’aller voir pour plus d’information la partie "manuel" du site de fpdf.

Le script envoie directement le pdf vers le navigateur, ce qui signifie qu’aucun fichier n’est créé sur le serveur. Sauver le document sur le serveur est évidemment possible.

<?php

// on va faire une pochette de dvd, avec la tranche et tout
require('fpdf.php');

// creer le pdf en mode portrait, unites en mm, de 270 sur 180 mm
$pdf=new FPDF('P','mm',array(270,180));
$pdf->SetAutoPageBreak(0);
// importer la police sf_old_republic
$pdf->AddFont('sf_old_republic','','92d32b2fabae934a986869823839779b_sf_old_republic.php');

// cree une page dans le document, sinon vide
$pdf->AddPage();

// couleur de remplissage : noir
$pdf->SetFillColor(0,0,0);

// on crée la tranche avec un rectangle noir
$pdf->Rect(127.5, 0, 15, 180, "F");

// importation de l'image en couverture en forçant la taille
$pdf->Image('Will_code_HTML_for_food.jpg',142.5,45,127.5,170);

// definir la police : sf_old_republic en 45 points
// placement du pointeur et ecriture du titre
$pdf->SetFont('sf_old_republic','',45);
$pdf->SetXY(150,8);
$pdf->MultiCell(100,15,'Will code PHP for food',0,"L");


// importation de l'image en couverture arriere
$pdf->Image('Will_code_HTML_for_food.jpg',10,10,50,70);

// descriptif
// placer le pointeur pour le texte
// definir le texte
// ecrire le titre et texte avec multicell
$pdf->SetXY(30,90);
$pdf->SetFont('Arial','B',12);
$pdf->MultiCell(100,5,'Will code PHP for food',0,"L");

$pdf->SetX(30);
$pdf->SetFont('Arial','',9);
$texte="Un film inoubliable, avec de vrais tramps et de vraies page en html 4, du php, du javascript, et du débuggage pour compatibilité avec les principaux navigateurs.\nLe sous-prolétariat gagne ce qui était encore recemment des metiers à haut potentiel, que fait la profession ? Elle brade son savoir faire. \n\n'Epatant', nous dit le magasine Premiere.";
$pdf->MultiCell(80,4,utf8_decode($texte));

// placer le copyright
$pdf->SetXY(10,-10);
$pdf->SetFont('Arial','I',8);
$texte="Copyright Workplace testing crew";
$pdf->Cell(120,2,$texte);

// le titre sur la tranche
// couleur : blanc
$pdf->SetTextColor(255,255,255);
$pdf->SetXY(129.5,17);
$pdf->SetFont('Arial','B',18);
// moche bidouille : placer des retour chariot pour la tranche
$texte="W\ni\nl\nl\n\nc\no\nd\ne\n\nP\nH\nP\n\nf\no\nr\n\nf\no\no\nd";
$pdf->MultiCell(10,7,strtoupper($texte),0,"C");

// sortir le pdf vers le navigateur
$pdf->Output();
?>

Plus : le texte à angle droit

La tranche utilise un texte mis à la ligne à chaque lettre. On pourrait cette partie plus élégante en opérant une rotation sur le bloc texte, ce qui est possible moyennant l’intégration d’un fonction supplémentaire disponible ici.

Générer des fichiers de police utilisables avec Fpdf

Pour utiliser des polices différentes que les polices de base, il faut les transformer et les déposer dans le dossier contenant la classe. Un peu compliqué, mais une page de traitement a été mise à disposition pour faciliter le travail de conversion à partir d’une police ttf :
Générer les fichiers .php et .afm à partir d’un fichier .ttf