Create a PDF document template: Difference between revisions

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Line 9: Line 9:
FYI, all models are in '''htdocs/includes/modules''', into subdirectory propale for commercial proposals, facture for invoices, commandes for orders, etc...
FYI, all models are in '''htdocs/includes/modules''', into subdirectory propale for commercial proposals, facture for invoices, commandes for orders, etc...


= Créer le nouveau modèle =
= Create your new template =
Par sécurité, on conservera les modèles d'origine. Pour l'exemple, on part du principe qu'on crée un nouveau module de proposition commercial qu'on nommera 'masocietebleu' et qui s'inspire du module 'azur':
For security, we will retain the original models. For the example, we assume we creates a new module we call 'mycompanyblue' and inspired by the module 'azur':
* copier-coller pdf_propale_azur.modules.php
* Copy and paste file pdf_propale_azur.modules.php
* renommer la copie en pdf_propale_masocietebleu.modules.php
* Rename the copy into pdf_propale_mycompanyblue.modules.php
* l'éditer et faire les modifs suivantes dans le code:
* Edit and make the following changes in the code:  
# Renommer 'Class pdf_propale_azur { '   en 'Class pdf_propale_masocietebleu { '
# Rename 'Class pdf_propale_azur { ' into 'Class pdf_propale_mycompanyblue { '
# Renommer 'Function pdf_propale_azur($db=0)' en 'Function pdf_propale_masocietebleu($db=0)'
# Rename 'Function pdf_propale_azur ($db=0)' into 'Function pdf_propale_mycompanyblue ($db=0)'
# Sauvegarder : le modèle 'masocietebleu' est disponible dans la liste des modèles de propales de Dolibarr
# Save file. Now template is available in the list of models into Dolibarr
* Tester ce modèle (Voir chapitre précédent) avant d'aller plus loin...
# Test this model (see previous section) before going further ...


= Personnaliser =
= Personnaliser =

Revision as of 10:19, 18 September 2010

This document describe how to create your own module to generate different documents that match your needs (for proposals, invoices, etc...) Tutorial is based on commercial proposals used as example but can be used for any type of document.

Find a model near your need

In Dolibarr, test existing models by going to the module setup area and by clicking on the "preview" logo.. Among existing models, find the one that is the nearest of your need. In this example, we suppose it's the template "azur" (corresponding to file pdf_propale_azur.modules.php).

FYI, all models are in htdocs/includes/modules, into subdirectory propale for commercial proposals, facture for invoices, commandes for orders, etc...

Create your new template

For security, we will retain the original models. For the example, we assume we creates a new module we call 'mycompanyblue' and inspired by the module 'azur':

  • Copy and paste file pdf_propale_azur.modules.php
  • Rename the copy into pdf_propale_mycompanyblue.modules.php
  • Edit and make the following changes in the code:
  1. Rename 'Class pdf_propale_azur { ' into 'Class pdf_propale_mycompanyblue { '
  2. Rename 'Function pdf_propale_azur ($db=0)' into 'Function pdf_propale_mycompanyblue ($db=0)'
  3. Save file. Now template is available in the list of models into Dolibarr
  4. Test this model (see previous section) before going further ...

Personnaliser

Personnaliser le modèle créé. Toujours dans pdf_propale_masocietebleu.modules.php, chercher la fonction 'Function _pagehead(&$pdf, $fac)'. C'est elle qui gère l'affichage de l'entête.

Librairie de création

La librairie utilisée pour la création de documents en PDF se nomme FPDF et peut être trouvée dans htdocs/includes/fpdf/fpdf/fpdf.class.php. C'est également dans cette classe que l'on trouve les nombreuses méthodes utilisées pour générer les différents éléments des documents.

Les modèles eux-même instancient la classe FPDF et utilisent ensuite ses méthodes, combinées avec les données d'une facture, d'une commande ou d'autres types de données.

On retrouve généralement les appels suivants dans les scripts de création de documents:

  • $pdf->SetFont() - Désigne la fonte à utiliser pour le texte qui suivra
  • $pdf->SetXY() - Désigne le point de départ pour dessiner le prochain texte en coordonnées X,Y qui sont exprimées en millimètres de la page
  • $pdf->MultiCell() - Dessine une boîte pouvant contenir du texte, et dont on doit d'abord donner la largeur et la hauteur - très utilisée
  • $pdf->GetY() - Renvoie la position courante en Y
  • $pdf->SetDrawColor() - Désigne la couleur à utiliser pour le prochain texte à écrire - généralement noir (0,0,0) ou blanc (255,255,255)
  • $pdf->Rect() - Dessine un rectangle dont le coin supérieur gauche est au point indiqué par les deux premiers paramètres et le coin inférieur droit utilise les deux derniers paramètres en mode relatif aux deux premiers

Structure des scripts

Les scripts de génération des documents PDF, au moment du développement de la version 2.2, disposent des méthodes suivantes (prenant pour exemple le modèle "crabe") au sein de la classe du nom du modèle:

  • pdf_crabe() - Constructeur de l'objet pdf
  • write_pdf_file() - Méthode générale pour la génération du fichier. Cette méthode appelle toute les suivantes après avoir initialisé quelques variables
  • _pagehead() - Méthode de dessin de l'en-tête du document, incluant généralement le logo, le titre du document (et la date) ainsi que les cadres de l'émetteur et du destinataire du document
  • _tableau() - Méthode de dessin du tableau de détails (produits, services, etc)
  • _tableau_info() - Méthode de dessin du tableau reprenant une liste d'informations sur la facture
  • _tableau_tot() - Méthode de dessin du tableau des totaux
  • _tableau_versement() - Méthode de dessin du tableau des règles de versement
  • _pagefoot() - Méthode de dessin du pied de page

  • Ajouter l'instruction:
$pdf->Image('\www\htdocs\dolibarr\document\societe\logo.jpg', 10, 5, 60.00);

Avec dans l'exemple: 10=abscisse, 5=ordonnée, 60=largeur logo

  • Si le logo se trouve par dessous ou dessus du text existant, supprimer le texte existant en commentant le code qui affiche l'information ou en modifiant sa position.

Modification des constantes affichées

Principales fonctions utilisées

$pdf->setX(float a); // fixe la position x courante
$pdf->setY(float b); // fixe la position y courante
$pdf->setXY(float a,float b); // fixe les positions x et y courantes
$pdf->SetTextColor(0,0,200); // fixe la couleur du texte
$pdf->SetFont('Arial','B',14); // fixe la police, le type ( 'B' pour gras, 'I' pour italique, '' pour normal,...)
$pdf->MultiCell(60, 8, 'Mon texte", 0, 'L'); // imprime 'Mon texte' avec saut de ligne

Rappel: l'origine des fonction setXY est le coin supérieur gauche

Pour plus d'infos

http://www.fpdf.org/?go=script&id=2 et aller sur 'accueil'

Activate your new model

In page Home => Setup => Modules =>

  • activate your module
  • eventually, set it as the default model.