Difference between revisions of "Créer un modèle de document PDF"
PolyglotBot (talk | contribs) m (Import interlang links (links to translated versions of this page in other languages) from origin English page "Create_a_PDF_document_template".) |
(→Pour plus d'infos: Remove Facture poids link to Dolistore that doesn't existe anymore) |
||
Line 15: | Line 15: | ||
Créer un modèle PDF requiert des connaissances en programmation PHP mais pas la création de modèles ODT. | Créer un modèle PDF requiert des connaissances en programmation PHP mais pas la création de modèles ODT. | ||
− | = Prérequis = | + | =Prérequis= |
− | |||
− | |||
− | = Trouver le modèle existant le plus proche = | + | *Dolibarr: 3.0+ |
+ | *Connaissance en PHP | ||
+ | |||
+ | =Trouver le modèle existant le plus proche= | ||
Dans Dolibarr, tester les modèles existants en allant dans la configuration du module puis en consultant l'aperçu en cliquant le picto "Aperçu" en fin de ligne du modèle. Consulter chacun des modèles disponibles. | Dans Dolibarr, tester les modèles existants en allant dans la configuration du module puis en consultant l'aperçu en cliquant le picto "Aperçu" en fin de ligne du modèle. Consulter chacun des modèles disponibles. | ||
Line 27: | Line 28: | ||
Par exemple, un modèle personnalisé de proposition sera dans '''...core/modules/propale/doc/''' | Par exemple, un modèle personnalisé de proposition sera dans '''...core/modules/propale/doc/''' | ||
− | = Créer le nouveau modèle = | + | =Créer le nouveau modèle= |
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 commerciale qu'on nommera 'masocietebleu' et qui s'inspire du module 'azur': | 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 commerciale qu'on nommera 'masocietebleu' et qui s'inspire du module 'azur': | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | = Personnaliser votre nouveau modèle = | + | *Copier-coller pdf_propale_azur.modules.php |
+ | *Renommer la copie en pdf_propale_masocietebleu.modules.php | ||
+ | *L'éditer et faire les modifs suivantes dans le code: | ||
+ | |||
+ | #Renommer 'Class pdf_propale_azur { ' en 'Class pdf_propale_masocietebleu { ' | ||
+ | #Pour les anciennes versions de dolibarr (dans les nouvelles __construct($db) n'a pas besoin d'être renommé,)Renommer 'Function pdf_propale_azur($db=0)' en 'Function pdf_propale_masocietebleu($db=0)' | ||
+ | #Renommer la variable $this->name pour refléter le nouveau nom. Par exemple pour le modèle 'azur', changer la ligne '$this->name = "azur";' en '$this->name = "masocietebleu";'. | ||
+ | #Sauvegarder : le modèle 'masocietebleu' est disponible dans la liste des modèles de propales de Dolibarr | ||
+ | |||
+ | *Tester ce modèle (Voir chapitre précédent) avant d'aller plus loin... | ||
+ | *Ajouter dans la table llx_document_model le nouveau modéle que vous venez de créer | ||
+ | |||
+ | =Personnaliser votre nouveau modèle= | ||
Personnaliser le modèle créé. | 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. | 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 manipulation de PDF == | + | ==Librairie de manipulation de PDF== |
La librairie utilisée pour la création de documents en PDF se nomme TCPDF et peut être trouvée dans htdocs/includes/tcpdf/tcpdf.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. | La librairie utilisée pour la création de documents en PDF se nomme TCPDF et peut être trouvée dans htdocs/includes/tcpdf/tcpdf.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. | ||
Line 49: | Line 53: | ||
On retrouve généralement les appels suivants dans les scripts de création de documents: | On retrouve généralement les appels suivants dans les scripts de création de documents: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == Structure des scripts == | + | *$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: | 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: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | == Example de personnalisation == | + | *pdf_crabe() - ''Constructeur de l'objet pdf'' |
− | === Insertion d'un logo === | + | *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'' |
− | * Ajouter l'instruction: | + | *_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'' | ||
+ | |||
+ | ==Example de personnalisation== | ||
+ | ===Insertion d'un logo=== | ||
+ | |||
+ | *Ajouter l'instruction: | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
$pdf->Image('\www\htdocs\dolibarr\document\societe\logo.jpg', 10, 5, 60.00); | $pdf->Image('\www\htdocs\dolibarr\document\societe\logo.jpg', 10, 5, 60.00); | ||
</source> | </source> | ||
Avec dans l'exemple: 10=abscisse, 5=ordonnée, 60=largeur logo | Avec dans l'exemple: 10=abscisse, 5=ordonnée, 60=largeur logo | ||
− | |||
− | === Insertion d'une signature ou autre en bas de page facture === | + | *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. |
− | * ouvrir le modèle à modifier crabe ou oursin (dans htdocs/core/modules/facture/) | + | |
− | * insérer (pour ma part ligne 618 juste avant // Show payment mode CHQ) | + | ===Insertion d'une signature ou autre en bas de page facture=== |
+ | |||
+ | *ouvrir le modèle à modifier crabe ou oursin (dans htdocs/core/modules/facture/) | ||
+ | *insérer (pour ma part ligne 618 juste avant // Show payment mode CHQ) | ||
+ | |||
<source lang="php"> | <source lang="php"> | ||
$pdf->Image('http://localhost/dolibarr/doc/images/signature.jpg',120,250,74); | $pdf->Image('http://localhost/dolibarr/doc/images/signature.jpg',120,250,74); | ||
</source> | </source> | ||
l'image (largeur 74mm) est affichée colonne de droite juste avant le pied de page. | l'image (largeur 74mm) est affichée colonne de droite juste avant le pied de page. | ||
− | |||
− | |||
− | === Insertion de texte === | + | *copier l'image dans le répertoire. il semble qu'une image png avec transparence pose problème. |
+ | *générer le pdf, la signature apparaît. | ||
+ | |||
+ | ===Insertion de texte=== | ||
Principales fonctions utilisées | Principales fonctions utilisées | ||
<source lang="php"> | <source lang="php"> | ||
Line 98: | Line 110: | ||
Rappel: l'origine des fonctions setXY est le coin supérieur gauche de la page | Rappel: l'origine des fonctions setXY est le coin supérieur gauche de la page | ||
− | == Pour plus d'infos == | + | ==Pour plus d'infos== |
− | * http://www.fpdf.org/?lang=fr | + | *http://www.fpdf.org/?lang=fr |
− | * Liste des méthodes: tcpdf.org/doc/code/classTCPDF.html | + | *Liste des méthodes: tcpdf.org/doc/code/classTCPDF.html |
− | |||
− | = Activer son modèle dans Dolibarr = | + | =Activer son modèle dans Dolibarr= |
Dans la fonction d'initialisation du module ajoutez votre modèle: | Dans la fonction d'initialisation du module ajoutez votre modèle: | ||
Line 118: | Line 129: | ||
Dans Accueil => Configuration => Modules => | Dans Accueil => Configuration => Modules => | ||
− | * activer votre module qui doit apparaitre | + | |
− | * éventuellement le mettre en modèle proposé par défaut. | + | *activer votre module qui doit apparaitre |
+ | *éventuellement le mettre en modèle proposé par défaut. |
Revision as of 12:31, 7 October 2019
Ce document décrit comment créer son propre modèle de génération de document PDF afin de personnaliser ses documents (propales, factures, etc...) Il se base sur les propositions commerciales comme exemple mais s'applique à tout type de document.
Pour savoir comment générer un modèle de document ODT, voir la page Créer un modèle de document ODT. Créer un modèle PDF requiert des connaissances en programmation PHP mais pas la création de modèles ODT.
Prérequis
- Dolibarr: 3.0+
- Connaissance en PHP
Trouver le modèle existant le plus proche
Dans Dolibarr, tester les modèles existants en allant dans la configuration du module puis en consultant l'aperçu en cliquant le picto "Aperçu" en fin de ligne du modèle. Consulter chacun des modèles disponibles.
Parmi ceux existant, noter le modèle le plus proche de vos besoins. Dans cet exemple, c'est le modèle azur (correspondant au fichier pdf_propale_azur.modules.php).
Pour info, tous les modèles sont dans htdocs/core/modules puis le sous-répertoire propale pour les propositions commerciales, facture pour les factures, commandes pour les commandes, etc... et enfin doc. Par exemple, un modèle personnalisé de proposition sera dans ...core/modules/propale/doc/
Créer le nouveau modèle
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 commerciale qu'on nommera 'masocietebleu' et qui s'inspire du module 'azur':
- Copier-coller pdf_propale_azur.modules.php
- Renommer la copie en pdf_propale_masocietebleu.modules.php
- L'éditer et faire les modifs suivantes dans le code:
- Renommer 'Class pdf_propale_azur { ' en 'Class pdf_propale_masocietebleu { '
- Pour les anciennes versions de dolibarr (dans les nouvelles __construct($db) n'a pas besoin d'être renommé,)Renommer 'Function pdf_propale_azur($db=0)' en 'Function pdf_propale_masocietebleu($db=0)'
- Renommer la variable $this->name pour refléter le nouveau nom. Par exemple pour le modèle 'azur', changer la ligne '$this->name = "azur";' en '$this->name = "masocietebleu";'.
- Sauvegarder : le modèle 'masocietebleu' est disponible dans la liste des modèles de propales de Dolibarr
- Tester ce modèle (Voir chapitre précédent) avant d'aller plus loin...
- Ajouter dans la table llx_document_model le nouveau modéle que vous venez de créer
Personnaliser votre nouveau modèle
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 manipulation de PDF
La librairie utilisée pour la création de documents en PDF se nomme TCPDF et peut être trouvée dans htdocs/includes/tcpdf/tcpdf.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
Example de personnalisation
Insertion d'un logo
- 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.
Insertion d'une signature ou autre en bas de page facture
- ouvrir le modèle à modifier crabe ou oursin (dans htdocs/core/modules/facture/)
- insérer (pour ma part ligne 618 juste avant // Show payment mode CHQ)
$pdf->Image('http://localhost/dolibarr/doc/images/signature.jpg',120,250,74);
l'image (largeur 74mm) est affichée colonne de droite juste avant le pied de page.
- copier l'image dans le répertoire. il semble qu'une image png avec transparence pose problème.
- générer le pdf, la signature apparaît.
Insertion de texte
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 fonctions setXY est le coin supérieur gauche de la page
Pour plus d'infos
- http://www.fpdf.org/?lang=fr
- Liste des méthodes: tcpdf.org/doc/code/classTCPDF.html
Activer son modèle dans Dolibarr
Dans la fonction d'initialisation du module ajoutez votre modèle:
sql=array("INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES(".$MODELNAME.",".$MODEL_TARGET_MODULE.",".$conf->entity." )");
avant
return $this->_init($sql,$option);
Puis
Dans Accueil => Configuration => Modules =>
- activer votre module qui doit apparaitre
- éventuellement le mettre en modèle proposé par défaut.