Personnaliser la facture PDF de Dolibarr
Logo, mentions légales, TVA non applicable, pénalités de retard, IBAN, filigrane, modèle ODT et conversion en PDF, modèle PHP dans custom : chaque étape testée sur Dolibarr 24.0.1, avec les pièges.
Il y a trois façons de changer l’apparence d’une facture Dolibarr, de la plus simple à la plus souple :
- les réglages, sans une ligne de code : logo, mentions légales, coordonnées bancaires, textes en bas de page, marges ;
- un modèle ODT, un document LibreOffice avec des balises, que Dolibarr remplit ;
- un modèle PHP sur mesure, rangé à part pour ne pas disparaître à la prochaine mise à jour.
Tout ce qui suit a été testé le 13 octobre 2026 sur Dolibarr 24.0.1, et contrôlé sur le PDF obtenu.
Le modèle de départ : sponge
En 24, la configuration du module Factures propose un seul modèle PDF : sponge. Le modèle crabe, encore cité dans beaucoup de tutoriels, a été supprimé en 24.0 ; le script de migration vers la 24 bascule les factures et le réglage par défaut de crabe vers sponge. Le troisième modèle présent dans le code, octopus, sert aux factures de situation et reste masqué tant que ces dernières ne sont pas activées.
Chaque facture mémorise le modèle avec lequel elle a été générée la dernière fois. Changer le modèle par défaut ne change donc pas les factures déjà émises : il faut les regénérer.
1. Sans code
Le logo
Configuration › Société ou Organisation, champ Logo, puis Enregistrer. Le logo remplace le nom de la société en haut à gauche de la facture ; Dolibarr crée lui-même les miniatures. Sa hauteur se règle dans Configuration › PDF, « Hauteur du logo sur les PDFs ».
Les mentions légales
Les identifiants saisis sur la même page (SIRET, NAF-APE, RCS, numéro de TVA, capital…) s’impriment en pied de page. Pour une société française, le SIREN n’apparaît pas si le SIRET commence par lui : il y figure déjà. Dans Configuration › PDF, l’option « Ajouter plus d’informations dans le pied de page » ajoute l’adresse de la société ou le nom des responsables.
« TVA non applicable » : la mention à corriger pour l’instant
Pour une micro-entreprise en franchise de TVA, choisissez « Non assujetti à la TVA » dans la section Gestion TVA de Configuration › Société ou Organisation. Dolibarr imprime alors sous les lignes de la facture :
* TVA non applicable, art. L. 223-3 du CIBS
Cette référence pose problème. L’entrée en vigueur du Code des impositions sur les biens et services pour la TVA a été reportée au 1er janvier 2027, et l’article de la franchise y portera un autre numéro. Jusqu’à fin 2026, c’est l’article 293 B du CGI qui s’applique, et l’administration admet les références au CGI sur les factures jusqu’au 30 juin 2028. Le défaut est signalé à Dolibarr (ticket #41540) ; les versions 21 à 23 impriment une mention équivalente.
En attendant, remplacez la phrase :
- Configuration › Traduction, onglet Remplacer une chaîne de traduction ;
- activez Permettre la réécriture des traductions ;
- langue
fr_FR, cléVATIsNotUsedForInvoice, valeur* TVA non applicable, art. 293 B du CGI, puis Ajouter.
Regénérez la facture : la nouvelle mention s’imprime à la place de l’ancienne. Supprimez ce remplacement le jour où Dolibarr corrigera sa traduction, pour retrouver le texte officiel.
Le module Mentions TVA Europe fait ce remplacement par une case à cocher, « Corriger la mention de franchise imprimée par Dolibarr », en français, anglais et allemand. Il imprime aussi seul les mentions des livraisons intracommunautaires, de l’autoliquidation et de l’export.
Les pénalités de retard et les autres mentions
Dans la configuration du module Factures, le champ Mention complémentaire sur les factures s’imprime en bas de chaque facture. C’est l’endroit des mentions obligatoires entre professionnels, par exemple :
Pénalités de retard : trois fois le taux d'intérêt légal. Indemnité forfaitaire pour frais de recouvrement : 40 €.
La réforme de la facture électronique ajoute quatre mentions : le SIREN du client, l’adresse de livraison, la catégorie d’opération et l’option pour la TVA sur les débits. Où les activer dans Dolibarr 24, et ce qu’il faut en plus pour émettre et recevoir : voir Dolibarr et la facture électronique.
Les coordonnées bancaires
Toujours dans la configuration du module Factures, Proposer paiement par virement sur le compte : choisissez votre compte bancaire. La facture affiche alors un bloc « Règlement par virement » avec la banque, le titulaire, l’IBAN et le BIC, tels qu’ils sont saisis sur la fiche du compte (module Banques et caisses). Le réglage voisin, « Proposer paiement par chèque à l’ordre et adresse de », concerne les chèques.
Le filigrane des brouillons
Filigrane sur les brouillons de factures : le texte saisi (par exemple BROUILLON)
s’imprime en grand, en oblique, sur les factures non validées. Il disparaît à la validation.
La page Configuration › PDF
Elle regroupe les réglages communs à tous les documents : format de papier et marges, bordures des cadres d’adresse, inversion des adresses, position de l’adresse pour les enveloppes à fenêtre françaises, masquage des références ou des descriptions de produits, libellés en deux langues.
2. Un modèle ODT
Un modèle ODT est un document créé avec LibreOffice, dans lequel des balises entre accolades seront remplacées par les données de la facture.
Activer. Dans la configuration du module Factures, ligne ODT/ODS templates, activez le
modèle. Les fichiers sont lus dans le dossier DOL_DATA_ROOT/doctemplates/invoices, c’est-à-dire
dans le sous-dossier doctemplates/invoices de vos documents. Le bouton Envoyer fichier de la
même page y dépose un modèle depuis votre ordinateur.
Partir du modèle fourni, sans le garder tel quel. template_invoice.odt est une page de
démonstration en anglais : il montre la syntaxe, mais ce n’est pas une facture présentable.
Ouvrez-le dans LibreOffice pour voir comment il est construit, puis faites votre propre document.
Les balises. Quelques-unes parmi les 93 du modèle fourni :
| Balise | Contenu |
|---|---|
{object_ref}, {object_date}, {object_date_limit} |
Référence, date, échéance |
{mycompany_name}, {mycompany_address}, {mycompany_idprof2}, {mycompany_logo} |
Votre société (idprof2 = SIRET) |
{company_name}, {company_address}, {company_zip}, {company_town} |
Le client |
{object_total_ht}, {object_total_vat}, {object_total_ttc}, {object_remain_to_pay} |
Totaux |
{object_payment_mode}, {object_payment_term}, {free_text} |
Règlement, mention complémentaire |
Les lignes de la facture se placent dans une ligne de tableau encadrée par deux marqueurs, que Dolibarr répète pour chaque ligne :
[!-- BEGIN row.lines --]
{line_fulldesc} {line_qty} {line_up} {line_vatrate} {line_price_ht}
[!-- END row.lines --]
Pour afficher un passage selon une valeur : [!-- IF {balise} --] … [!-- ELSE {balise} --] …
[!-- ENDIF {balise} --].
Générer. Sur la fiche de la facture, choisissez le modèle dans la liste à côté de
Générer : Dolibarr produit un fichier .odt.
Obtenir un PDF à partir de l’ODT
Il faut LibreOffice sur le serveur, et la constante MAIN_ODT_AS_PDF à la valeur libreoffice
(Configuration › Divers). Dolibarr lance alors soffice et dépose le PDF à côté de l’ODT.
Sans LibreOffice, la génération affiche :
ODT to PDF convert fail (option MAIN_ODT_AS_PDF is libreoffice, command was soffice --headless … , retval=127)
retval=127 signifie que la commande soffice est introuvable. C’est le cas de l’image Docker
officielle, qui ne contient pas LibreOffice. Ce fichier Dockerfile en ajoute une version
réduite (testé ; sur notre machine, l’image passe de 1,38 à 1,81 Go) :
FROM dolibarr/dolibarr:24.0.1
RUN apt-get update \
&& apt-get install -y --no-install-recommends libreoffice-writer-nogui \
&& rm -rf /var/lib/apt/lists/*
Construisez-la avec docker build -t dolibarr-libreoffice:24.0.1 . et remplacez l’image du service
web par dolibarr-libreoffice:24.0.1 dans votre docker-compose.yml.
Attention si vous revenez un jour à une image sans LibreOffice : une facture dont le dernier modèle
était un ODT ne se regénère plus en PDF tant que MAIN_ODT_AS_PDF reste réglé.
3. Un modèle PHP sur mesure, qui survit aux mises à jour
Pour aller au-delà des réglages, on modifie un modèle PHP. Ne touchez jamais aux fichiers de
htdocs/core/modules/facture/doc/ : ils sont remplacés à chaque mise à jour, et le passage en 24
a supprimé crabe. Rangez votre modèle dans un petit module, dans le dossier custom, qui n’est
jamais écrasé.
Plutôt que de copier sponge en entier (près de 2 900 lignes qui ne recevraient plus aucun correctif), étendez-le et ne remplacez que ce qui change. Deux fichiers suffisent.
custom/monmodelepdf/core/modules/modMonModelePdf.class.php déclare le module :
<?php
include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
class modMonModelePdf extends DolibarrModules
{
public function __construct($db)
{
$this->db = $db;
$this->numero = 500100;
$this->rights_class = 'monmodelepdf';
$this->family = 'other';
$this->name = preg_replace('/^mod/i', '', get_class($this));
$this->description = 'Modèle de facture PDF de ma société';
$this->version = '1.0';
$this->const_name = 'MAIN_MODULE_'.strtoupper($this->name);
$this->picto = 'generic';
$this->module_parts = array('models' => 1);
$this->depends = array('modFacture');
}
}
'models' => 1 indique à Dolibarr d’aller chercher des modèles de documents dans ce module. Les
numéros au-dessus de 500000 sont libres pour un module que vous ne distribuez pas.
custom/monmodelepdf/core/modules/facture/doc/pdf_monmodele.modules.php contient le modèle.
Celui-ci reprend tout sponge et ajoute une ligne de contact sous le logo :
<?php
require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/doc/pdf_sponge.modules.php';
class pdf_monmodele extends pdf_sponge
{
public function __construct($db)
{
parent::__construct($db);
$this->name = 'monmodele';
$this->description = 'Sponge, avec une ligne de contact dans l\'en-tête';
}
protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $outputlangsbis = null)
{
$result = parent::_pagehead($pdf, $object, $showaddress, $outputlangs, $outputlangsbis);
$pdf->SetFont('', 'I', 8);
$pdf->SetTextColor(80, 80, 80);
$pdf->SetXY($this->marge_gauche, $this->marge_haute + 20);
$pdf->MultiCell(90, 4, 'Une question sur cette facture ? compta@ma-societe.fr', 0, 'L');
return $result;
}
}
Le nom de la classe doit être pdf_ suivi du nom du fichier, et $this->name ce même nom. Ensuite :
- Configuration › Modules/Applications : activez le module MonModelePdf ;
- dans la configuration du module Factures, activez monmodele et définissez-le par défaut ;
- regénérez une facture.
Les méthodes que l’on peut remplacer de la même façon sont, entre autres, _pagehead (en-tête),
_pagefoot (pied de page), _tableau (cadre des lignes), drawInfoTable (règlement, mentions)
et drawTotalTable (totaux). Après une mise à jour majeure de Dolibarr, vérifiez que leur
signature n’a pas changé dans pdf_sponge.modules.php.
Sous Docker, custom est un volume : après recréation du conteneur, le modèle était toujours là et
générait toujours la facture.
Si vous préférez qu’on construise votre modèle, le forfait Documents PDF sur mesure part de votre facture actuelle.