Line 26:
Line 26:
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'''.
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/'''
+
Par exemple, un modèle personnalisé de proposition sera dans '''...core/modules/propale/doc/''' pour un modèle personnalisé de facture ce sera dans '''...core/modules/facture/doc/''' ,etc ...
=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':
−
*Copier-coller pdf_propale_azur.modules.php
+
*Copier le fichier pdf_propale_azur.modules.php
*Renommer la copie en pdf_propale_masocietebleu.modules.php
*Renommer la copie en pdf_propale_masocietebleu.modules.php
*L'éditer et faire les modifs suivantes dans le code:
*L'éditer et faire les modifs suivantes dans le code:
Line 39:
Line 39:
#Sauvegarder : le modèle 'masocietebleu' est disponible dans la liste des modèles de propales de Dolibarr
#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...
+
*Tester ce modèle en l'activant dans la page de configuration du module en rapport avec le modèle (donc la page de configuration du module des Propositions commerciales dans notre exemple) et en affichant l'aperçu...
−
*Ajouter dans la table '''llx_document_model''' le nouveau modéle que vous venez de créer
=Personnaliser votre nouveau modèle=
=Personnaliser votre nouveau modèle=
Line 46:
Line 45:
Toujours dans pdf_propale_masocietebleu.modules.php, chercher la fonction '_pagehead()'. C'est elle qui gère l'affichage de l'entête.
Toujours dans pdf_propale_masocietebleu.modules.php, chercher la fonction '_pagehead()'. C'est elle qui gère l'affichage de l'entête.
+
Chercher la fonction '_pagefooter()'. C'est elle qui gère l'affichage du pied de page.
Chercher la fonction '_pagefooter()'. C'est elle qui gère l'affichage du pied de page.
+
Chercher la fonction 'write_file()'. C'est elle qui affiche le corps du PDF.
Chercher la fonction 'write_file()'. C'est elle qui affiche le corps du PDF.
Line 52:
Line 53:
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.
−
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.
+
Les modèles de génération de pdf instancient un objet pdf par appel de pdf_getInstance() et utilisent ensuite ses méthodes, combinées avec les données d'une facture, d'une commande ou d'autres objets.
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:
Line 64:
Line 65:
==Structure des scripts==
==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, disposent des méthodes suivantes (prenant pour exemple le modèle "crabe") au sein de la classe du modèle:
−
*pdf_crabe() - ''Constructeur de l'objet pdf''
+
*__construct() - ''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''
*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''
*_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''
Line 78:
Line 79:
===Insertion d'un logo===
===Insertion d'un logo===
−
*Ajouter l'instruction:
+
*Ajouter l'instruction :
−
<source lang="php">
+
<syntaxhighlight lang="php">
−
$pdf->Image('\www\htdocs\dolibarr\document\societe\logo.jpg', 10, 5, 60.00);
+
$pdf->Image(DOL_DOCUMENT_ROOT.'\societe\logo.jpg', 10, 5, 60.00);
−
</source>
+
</syntaxhighlight>
−
Avec dans l'exemple: 10=abscisse, 5=ordonnée, 60=largeur logo
+
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.
+
*Si le logo se trouve par dessous ou dessus du texte 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===
===Insertion d'une signature ou autre en bas de page facture===
−
*ouvrir le modèle à modifier crabe ou oursin (dans htdocs/core/modules/facture/)
+
*ouvrir le fichier .php à modifier et insérer
−
*insérer (pour ma part ligne 618 juste avant // Show payment mode CHQ)
−
<source lang="php">
+
<syntaxhighlight lang="php">
−
$pdf->Image('http://localhost/dolibarr/doc/images/signature.jpg',120,250,74);
+
$pdf->Image(DOL_DOCUMENT_ROOT.'/mydir/signature.jpg',120,250,74);
−
</source>
+
</syntaxhighlight>
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.
*copier l'image dans le répertoire. il semble qu'une image png avec transparence pose problème.
*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.
+
*générer le PDF, la signature apparaît.
===Insertion de texte===
===Insertion de texte===
Principales fonctions utilisées
Principales fonctions utilisées
−
<source lang="php">
+
<syntaxhighlight lang="php">
$pdf->setX(float a); // fixe la position x courante
$pdf->setX(float a); // fixe la position x courante
$pdf->setY(float b); // fixe la position y courante
$pdf->setY(float b); // fixe la position y courante
Line 109:
Line 109:
$pdf->SetFont('Arial','B',14); // fixe la police, le type ( 'B' pour gras, 'I' pour italique, '' pour normal,...)
$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
$pdf->MultiCell(60, 8, 'Mon texte", 0, 'L'); // imprime 'Mon texte' avec saut de ligne
−
</source>
+
</syntaxhighlight>
−
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
+
*Liste des méthodes TCPDF: https://tcpdf.org/docs/srcdoc/
−
*Liste des méthodes: tcpdf.org/doc/code/classTCPDF.html
−
=Activer son modèle dans Dolibarr=
+
=Proposer son modèle via un module=
−
Dans la fonction d'initialisation du module ajoutez votre modèle:
+
Si le modèle fabriqué est destiné à être livré via un module extension de Dolibarr (voir la doc pour faire un module Dolibarr), le fichier modèle ne sera pas dans le même répertoire que les autres, et ne sera donc pas détecté automatiquement. Pour le rendre détectable vous devrez ajouter cette ligne dans la fonction d'initialisation de votre module externe :
−
<source lang="php">
+
<syntaxhighlight lang="php">
−
sql=array("INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES(".$MODELNAME.",".$MODEL_TARGET_MODULE.",".$conf->entity." )");
+
sql=array("INSERT INTO ".MAIN_DB_PREFIX."document_model (nom, type, entity) VALUES('".$MODELNAME."','".$MODEL_TARGET_MODULE."',".$conf->entity." )");
−
</source>
+
</syntaxhighlight>
avant
avant
−
<source lang="php"> return $this->_init($sql,$option);</source>
+
<syntaxhighlight lang="php"> return $this->_init($sql,$option);</syntaxhighlight>
Puis
Puis
−
Dans Accueil => Configuration => Modules =>
+
Dans Accueil => Configuration => Modules => Module sur lequel porte le modèle => Configurer
−
*activer votre module qui doit apparaitre
+
*activer votre module qui doit apparaître parmi ceux disponible
*éventuellement le mettre en modèle proposé par défaut.
*éventuellement le mettre en modèle proposé par défaut.
+
+
=Vidéos sur le sujet=
+
<youtube width="200" height="120">dEC8hFcT71U</youtube>
+
<youtube width="200" height="120">LtXPBz9fWQE</youtube>