Intégration de la librairie FPDF (admin generator)

Publié le par Sacri

Je vais vous présenter aujourd'hui comment intégrer la librairie FPDF à symfony et surtout, comment l'intégrer proprement dans une page web.

Intégration de la librairie FPDF
- téléchargez la dernière version de la librairie FPDF (page de téléchargement officielle - version 1.6 tgz utilisée dans ce tutoriel)
- décompressez le fichier dans le répertoire lib/ de votre projet (personnellement, j'ai créé un repertoire lib/tools/) ce qui doit donner : /path_du_projet/lib/fpdf16

Intégration à l'admin generator
- dans le fichier action.class.php de votre module d'admin generator :

public function executeMonPDF(sfWebRequest $request){

// on définit le répertoire des polices (en dur ici mais il suffit de placer le paramètre dans le fichier app.yml)

define('FPDF_FONTPATH','/path_du_projet/lib/tools/fpdf16/font/');

// on charge la classe FPDF

$this->pdf = new FPDF();

// on ajoute une page au document

$this->pdf->AddPage();

// j'écris un texte en arial 11 gras sur fond blanc

$this->pdf->SetFillColor(204,204,204);

$this->pdf->SetFont("Arial",'B',11);

$this->pdf->Write(5,'Mon premier document PDF sous symfony !');

// nom du fichier pdf qui sera créé

$this->file_name = "uploads/pdf/mon_pdf_sous_symfony.pdf";

// on exporte le fichier

$this->pdf->Output($this->file_name, "F");

// on définit la classe du div contenant le PDF

$this->classe = "pdf";

// on donne un titre <h1> à la page

$this->h1 = "Impression de mon premier PDF";

// on appelle le template pdfSuccess.php

$this->setTemplate('pdf');

}


- dans le fichier pdfSuccess.php de votre module d'admin generator :

<h1><?php echo $h1 ?></h1>
<div class="sf_admin_pdf">
  <object data="$file" type="text/html" codetype="application/pdf" class="object_pdf"></object>
<div>


- dans le fichier web/css/main.css du projet :

div.sf_admin_pdf{
  margin:0 auto;
  text-align:center;
  width:95%;
  height:80%;
  border:2px solid black;
}
.object_pdf{
  width:100%;
  height:100%;
}


- dans le fichier generator.yml de votre module d'admin generator :

object_actions:

monpdf: { label: mon PDF , action: MonPDF }


Ces quatres fichiers devraient vous permettre d'intégrer un document PDF de cette manière :

Cela permet d'éviter d'avoir directement le document à télécharger (on peut le sauvegarder ou l'imprimer par exemple) ou de l'avoir en plein écran et de devoir faire Page précédente ou même de l'avoir dans une nouvelle fenêtre.

J'ai été beaucoup plus loin dans l'intégration de FPDF, j'ai créé une classe qui étend celle de FPDF qui me permet de gérer un en-tête et/ou un pied de page ou encore de créer des fonctions d'affichage différentes, etc ...

Pour ce qui est de l'utilisation de FPDF, elle est assez simple et la documentation sur le site officiel (documentation + tutoriaux) est assez explicite. Si vous avez encore des soucis, d'autres tutoriaux sont disponibles par une simple recherche sur Internet.

Petite astuce, FPDF ne gère pas l'UTF-8, pensez donc à bien utiliser utf8_decode() au besoin :)

On se retrouve bientôt pour un tutoriel sur l'intégration de XAJAX !

Publié dans Tutoriel

Commenter cet article

loulou806 16/05/2011 16:26


Bonjour Sacri,
j'ai suivi vos conseils pour intégrer le FPDF sous symfony en backend et générer des PDF, et ça marche.
j'ai essayé de faire la même chose du côté Frontend, càd: rajouter l'action au niveau du controller, ajouter le routing et le template mais ça fonctionne pas :((((
est-ce que vous auriez des conseils à me fournir par rapport à ça?
Merci!!!!


Sacri 24/05/2011 10:04



Bonjour,


Désolé pour le temps de réponse mais vacances + taf ne laissent pas beaucoup de temps pour le reste :)


Quoiqu'il en soit, je n'ai pas beaucoup d'informations me permettant de t'aider. Ton problème doit se trouver au niveau de la configuration générale, il y a souvent des différences entre le front
et le back. Regarde bien dans tes fichiers yml de config les différences et via l'environnement de dev l'erreur lancée.


Au besoin, réécrit moi directement à cette adresse : jeanphilippe.morvan@gmail.com


Et mon blog a déménagé depuis un moment à cette adresse : http://blog.symfotips.fr/


Au plaisir,


Jean-Philippe



Greg 19/03/2010 20:44


petit souci découvert récemment
je n'arrive pas à intégrer une image dans un PDF quand c'est généré via Symfony alors que je n'ai jamais eu le souci en site "normal" sans framework

j'ai bien tapé le code pour checker que le fichier existait à l'adresse spécifiée... mais rien à faire.... le fichier résultant est corrompu

et un $pdf->image(...) or die("failed"); sort toujours en erreur...

une idée ??


bbkr 24/02/2010 16:59


bonjour merci pour cette article mais comment je puisse utiliser utf8_decode a la place de utf8


Sacri 24/02/2010 17:52


Bonjour,
J'avoue ne pas être sûr de comprendre la question ...
En fait, vous avez de l'utf8 que vous voulez transformer en iso ?


Éric Rogé 03/06/2009 04:55

Salut, je suis sur un projet symfony qui requiert BEAUCOUP de pdfs (c'est une appli web de facturation).

Après avoir fait pas mal de test, en bibliothèque php pure, je te recommande plutôt Tcpdf qui propose bien plus de choses.

Par contre son api est une torture, vivement que Zend_PDF soit exploitable.

Sacri 03/06/2009 08:50


Bonjour et merci de l'information :)
Je vais le garder de côté au besoin et si j'ai le temps, je ferai quelques tests. Pour le moment, je maîtrise pas trop mal l'API de FPDF donc je continuerai de l'utiliser jusqu'à ce que Tcpdf me
semble indispensable (ou que j'ai eu le temps de l'acquérir :p).


Adrien+M. 02/06/2009 20:51

Tu sais s'il est possible d'afficher un document PDF existant facilement via cette classe ?

Sacri 02/06/2009 20:59


Il n'y a même pas besoin de cette classe pour afficher un PDF. Tu peux utiliser le template (le div) et le CSS pour cela.