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.

Versions concernées
Dolibarr 24.0.1 (testé) ; la liste des modèles a changé en 24.0 (crabe supprimé), la mention de TVA concerne les versions 21 à 24
Ce qui a été vérifié
Tests du 13/10/2026 sur une instance Dolibarr 24.0.1 (image Docker officielle) : chaque réglage appliqué puis contrôlé sur le PDF généré (texte extrait et rendu de la page). Modèle ODT activé, téléversé, généré ; conversion en PDF essayée sans puis avec LibreOffice 7.4. Modèle PHP dans custom activé, généré, puis conteneur recréé. Lecture du code de pdf_sponge, pdf_pagefoot, odf.php et du script de migration 23.0.0-24.0.0.

Il y a trois façons de changer l’apparence d’une facture Dolibarr, de la plus simple à la plus souple :

  1. les réglages, sans une ligne de code : logo, mentions légales, coordonnées bancaires, textes en bas de page, marges ;
  2. un modèle ODT, un document LibreOffice avec des balises, que Dolibarr remplit ;
  3. 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

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 :

  1. Configuration › Traduction, onglet Remplacer une chaîne de traduction ;
  2. activez Permettre la réécriture des traductions ;
  3. 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 :

  1. Configuration › Modules/Applications : activez le module MonModelePdf ;
  2. dans la configuration du module Factures, activez monmodele et définissez-le par défaut ;
  3. 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.

À lire aussi

DolibarrfacturePDFmodèlepersonnaliserODTLibreOfficelogoTVA non applicable293 B