Die Rechnungs-PDF von Dolibarr anpassen
Logo, Pflichtangaben, Kleinunternehmer-Hinweis, Bankverbindung, Wasserzeichen, ODT-Vorlage und PDF-Umwandlung, PHP-Vorlage in custom: jeder Schritt getestet mit Dolibarr 24.0.1, mit den Fallen.
Es gibt drei Wege, das Aussehen einer Dolibarr-Rechnung zu ändern, vom einfachsten bis zum flexibelsten:
- Einstellungen, ohne eine Zeile Code: Logo, Pflichtangaben, Bankverbindung, Texte in der Fußzeile, Ränder;
- eine ODT-Vorlage, ein LibreOffice-Dokument mit Platzhaltern, die Dolibarr füllt;
- eine eigene PHP-Vorlage, getrennt abgelegt, damit sie beim nächsten Update nicht verschwindet.
Alles Folgende wurde am 13. Oktober 2026 mit Dolibarr 24.0.1 getestet und im erzeugten PDF geprüft.
Die Ausgangsvorlage: sponge
In 24 bietet die Einstellung des Moduls Rechnungen eine einzige PDF-Vorlage an: sponge. Die Vorlage crabe, die viele Anleitungen noch nennen, wurde mit 24.0 entfernt; das Update-Skript auf 24 stellt Rechnungen und Standardeinstellung von crabe auf sponge um. Die dritte Vorlage im Code, octopus, dient den Abschlagsrechnungen nach Baufortschritt (Situationsrechnungen) und bleibt verborgen, solange diese nicht aktiviert sind.
Jede Rechnung merkt sich die Vorlage, mit der sie zuletzt erzeugt wurde. Eine neue Standardvorlage ändert also bereits erstellte Rechnungen nicht: Sie müssen neu erzeugt werden.
1. Ohne Code
Das Logo
Einstellungen › Unternehmen/Institution, Feld Logo, dann Speichern. Das Logo ersetzt oben links den Firmennamen auf der Rechnung; Dolibarr erzeugt die Vorschaubilder selbst. Die Höhe stellen Sie unter Einstellungen › PDF ein, „Höhe des Logos im PDF“.
Pflichtangaben
Die auf derselben Seite eingetragenen Kennungen (Handelsregister, Steuernummer, USt-IdNr., Kapital…) erscheinen in der Fußzeile. Unter Einstellungen › PDF lässt sich die Fußzeile um die Firmenadresse oder die Namen der Geschäftsführer ergänzen.
Der Hinweis für Kleinunternehmer
Wählen Sie im Abschnitt MwSt-Verwaltung von Einstellungen › Unternehmen/Institution „Umsatzsteuerbefreit“. Dolibarr druckt einen Befreiungshinweis aber nur für ein Unternehmen mit Sitz in Frankreich, und zwar mit französischem Recht. Für ein deutsches Unternehmen erscheint kein Hinweis.
Setzen Sie den Text daher selbst in das Feld Freier Standardtext auf Rechnungen (nächster
Abschnitt). Ein üblicher Hinweis lautet Gemäß § 19 UStG wird keine Umsatzsteuer berechnet.
Prüfen Sie die für Sie passende Formulierung mit Ihrer Steuerberatung.
Stellt dagegen ein französisches Unternehmen eine Rechnung auf Deutsch aus, steht darauf der
unverständliche Satz * Nicht für USt-art-CGI-293B. Ersetzen Sie ihn über die Übersetzung:
- Einstellungen › Übersetzung, Reiter Überschreiben der Übersetzung;
- Anpassung von Übersetzungen zulassen einschalten;
- Sprache
de_DE, SchlüsselVATIsNotUsedForInvoice, neuer Text zum Beispiel* Keine Umsatzsteuer nach Artikel 293 B des französischen CGI, dann Hinzufügen.
Nach dem erneuten Erzeugen der Rechnung steht der neue Text an Stelle des alten.
Das Modul USt-Hinweise Europa druckt den Hinweis automatisch, für ein deutsches Unternehmen „Steuerbefreiung für Kleinunternehmer gemäß § 19 UStG.“, und ersetzt den französischen Satz per Häkchen („Den von Dolibarr gedruckten Kleinunternehmer-Hinweis korrigieren (Frankreich)“). Es deckt auch innergemeinschaftliche Lieferungen, Reverse-Charge und Ausfuhren ab, für Unternehmen in Deutschland, Österreich, Belgien, Luxemburg und Frankreich.
Weitere Angaben
In der Einstellung des Moduls Rechnungen wird das Feld Freier Standardtext auf Rechnungen unten auf jeder Rechnung gedruckt: der Platz für Zahlungsbedingungen, Verzugsregelungen oder den Kleinunternehmer-Hinweis.
Die Bankverbindung
Ebenfalls in der Einstellung des Moduls Rechnungen, Bankkonto für Bezahlung per Überweisung: Wählen Sie Ihr Konto. Die Rechnung zeigt dann einen Block für die Überweisung mit Bank, Kontoinhaber, IBAN und BIC, so wie sie in der Kontokarte (Modul Banken | Kassen) eingetragen sind. Die Einstellung daneben, „Adresse für Zahlung per Scheck“, betrifft Schecks.
Wasserzeichen auf Entwürfen
Wasserzeichen auf Rechnungsentwurf: Der eingetragene Text (zum Beispiel ENTWURF) erscheint
groß und schräg auf noch nicht freigegebenen Rechnungen. Bei der Freigabe verschwindet er.
Die Seite Einstellungen › PDF
Sie enthält die Einstellungen für alle Dokumente: Papierformat und Ränder, Rahmen der Adressfelder, Vertauschen der Adressen, Ausblenden von Produktreferenzen oder -beschreibungen, Bezeichnungen in zwei Sprachen.
2. Eine ODT-Vorlage
Eine ODT-Vorlage ist ein mit LibreOffice erstelltes Dokument, in dem Platzhalter in geschweiften Klammern durch die Rechnungsdaten ersetzt werden.
Aktivieren. In der Einstellung des Moduls Rechnungen, Zeile ODT/ODS templates, die Vorlage
aktivieren. Die Dateien werden aus DOL_DATA_ROOT/doctemplates/invoices gelesen, dem Unterordner
doctemplates/invoices Ihrer Dokumente. Mit der Upload-Schaltfläche derselben Seite legen Sie eine
Vorlage von Ihrem Rechner dort ab.
Von der mitgelieferten Vorlage ausgehen, sie aber nicht so lassen. template_invoice.odt ist
eine englische Demonstrationsseite: Sie zeigt die Syntax, ist aber keine vorzeigbare Rechnung.
Öffnen Sie sie in LibreOffice, um den Aufbau zu sehen, und erstellen Sie dann Ihr eigenes Dokument.
Die Platzhalter. Einige der 93 aus der mitgelieferten Vorlage:
| Platzhalter | Inhalt |
|---|---|
{object_ref}, {object_date}, {object_date_limit} |
Nummer, Datum, Fälligkeit |
{mycompany_name}, {mycompany_address}, {mycompany_vatnumber}, {mycompany_logo} |
Ihr Unternehmen |
{company_name}, {company_address}, {company_zip}, {company_town} |
Der Kunde |
{object_total_ht}, {object_total_vat}, {object_total_ttc}, {object_remain_to_pay} |
Summen |
{object_payment_mode}, {object_payment_term}, {free_text} |
Zahlung, freier Text |
Die Rechnungszeilen stehen in einer Tabellenzeile zwischen zwei Markierungen, die Dolibarr für jede Zeile wiederholt:
[!-- BEGIN row.lines --]
{line_fulldesc} {line_qty} {line_up} {line_vatrate} {line_price_ht}
[!-- END row.lines --]
Um einen Abschnitt abhängig von einem Wert anzuzeigen: [!-- IF {platzhalter} --] …
[!-- ELSE {platzhalter} --] … [!-- ENDIF {platzhalter} --].
Erzeugen. In der Rechnungskarte die Vorlage in der Liste neben Erzeugen wählen: Dolibarr
erstellt eine .odt-Datei.
Aus der ODT ein PDF machen
Dafür braucht es LibreOffice auf dem Server und die Konstante MAIN_ODT_AS_PDF mit dem Wert
libreoffice (Einstellungen › Erweiterte Einstellungen). Dolibarr ruft dann soffice auf und
legt das PDF neben die ODT.
Ohne LibreOffice zeigt die Erzeugung:
ODT to PDF convert fail (option MAIN_ODT_AS_PDF is libreoffice, command was soffice --headless … , retval=127)
retval=127 bedeutet, dass der Befehl soffice nicht gefunden wird. Das ist beim offiziellen
Docker-Image der Fall, das kein LibreOffice enthält. Dieses Dockerfile fügt eine reduzierte
Version hinzu (getestet; auf unserem Rechner wächst das Image von 1,38 auf 1,81 GB):
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/*
Bauen Sie es mit docker build -t dolibarr-libreoffice:24.0.1 . und ersetzen Sie in Ihrer
docker-compose.yml das Image des Web-Dienstes durch dolibarr-libreoffice:24.0.1.
Vorsicht, falls Sie später zu einem Image ohne LibreOffice zurückkehren: Eine Rechnung, deren letzte
Vorlage eine ODT war, lässt sich nicht mehr als PDF erzeugen, solange MAIN_ODT_AS_PDF gesetzt
bleibt.
3. Eine eigene PHP-Vorlage, die Updates übersteht
Um über die Einstellungen hinauszugehen, ändert man eine PHP-Vorlage. Ändern Sie nie die Dateien
in htdocs/core/modules/facture/doc/: Sie werden bei jedem Update ersetzt, und der Wechsel auf 24
hat crabe entfernt. Legen Sie Ihre Vorlage in ein kleines Modul im Ordner custom, der nie
überschrieben wird.
Statt sponge vollständig zu kopieren (fast 2.900 Zeilen, die keine Korrektur mehr erhalten würden), erweitern Sie es und ersetzen nur, was sich ändert. Zwei Dateien genügen.
custom/meinepdfvorlage/core/modules/modMeinePdfVorlage.class.php meldet das Modul an:
<?php
include_once DOL_DOCUMENT_ROOT.'/core/modules/DolibarrModules.class.php';
class modMeinePdfVorlage extends DolibarrModules
{
public function __construct($db)
{
$this->db = $db;
$this->numero = 500100;
$this->rights_class = 'meinepdfvorlage';
$this->family = 'other';
$this->name = preg_replace('/^mod/i', '', get_class($this));
$this->description = 'Rechnungsvorlage meines Unternehmens';
$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 weist Dolibarr an, in diesem Modul nach Dokumentvorlagen zu suchen. Nummern über
500000 sind frei für ein Modul, das Sie nicht verteilen.
custom/meinepdfvorlage/core/modules/facture/doc/pdf_meinevorlage.modules.php enthält die Vorlage.
Sie übernimmt sponge vollständig und fügt unter dem Logo eine Kontaktzeile hinzu:
<?php
require_once DOL_DOCUMENT_ROOT.'/core/modules/facture/doc/pdf_sponge.modules.php';
class pdf_meinevorlage extends pdf_sponge
{
public function __construct($db)
{
parent::__construct($db);
$this->name = 'meinevorlage';
$this->description = 'Sponge, mit einer Kontaktzeile im Kopf';
}
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, 'Fragen zu dieser Rechnung? buchhaltung@meine-firma.de', 0, 'L');
return $result;
}
}
Der Klassenname muss pdf_ gefolgt vom Dateinamen sein, und $this->name derselbe Name. Dann:
- Einstellungen › Module/Anwendungen: das Modul MeinePdfVorlage aktivieren;
- in der Einstellung des Moduls Rechnungen meinevorlage aktivieren und als Standard festlegen;
- eine Rechnung neu erzeugen.
Auf dieselbe Weise lassen sich unter anderem _pagehead (Kopf), _pagefoot (Fußzeile), _tableau
(Rahmen der Zeilen), drawInfoTable (Zahlung, Hinweise) und drawTotalTable (Summen) ersetzen.
Prüfen Sie nach einem größeren Dolibarr-Update, ob sich ihre Signatur in pdf_sponge.modules.php
geändert hat.
Unter Docker ist custom ein Volume: Nach dem Neuerstellen des Containers war die Vorlage noch da
und erzeugte die Rechnung weiterhin.
Wenn Sie Ihre Vorlage lieber erstellen lassen: Das Paket Individuelle PDF-Dokumente geht von Ihrer bisherigen Rechnung aus.