PDF Rechnungs-Layout
billingcat unterstützt mehrere Wege, um das Layout deiner Rechnungs-PDFs zu gestalten – vom einfachen Standardlayout über Anpassungen mit CSS bis hin zu vollständig eigenen Designs. Alle Wege stehen parallel zur Verfügung; welcher verwendet wird, entscheidet sich pro Rechnung (siehe Welches Layout wird verwendet?).
a) Standard-Layout verwenden
Wenn du nichts weiter einstellst, verwendet billingcat automatisch ein generisches Standardlayout nach DIN 5008. Dieses enthält:
- Kopf- und Fußzeilen aus den Rechnungsdaten
- Rechnungspositionen
- Stammdaten (Absender, Kontoverbindung etc.)
Damit hast du sofort ein funktionierendes Rechnungs-PDF, ohne zusätzlichen Aufwand.
Optional kannst du im Menü Ablage → Dateien eine Datei mit dem Namen logo.pdf hochladen.
Das Logo erscheint dann oben rechts auf deiner Rechnung.
b) Standard-Layout mit eigenem CSS anpassen
Das Standard-Layout lässt sich mit einem eigenen Stylesheet umgestalten:
Lade im Menü Ablage → Dateien eine Datei mit dem Namen invoice.css hoch.
Sie wird beim Erzeugen der Rechnungs-PDF nach dem eingebauten Stylesheet geladen –
deine Regeln gewinnen also die Kaskade und überschreiben die Voreinstellungen.
Ein paar Grundsätze:
- Es ist reines CSS: Das HTML-Gerüst der Rechnung ist fest und kann nicht verändert werden. Struktur, Beträge und ZUGFeRD-Daten bleiben damit garantiert korrekt.
- Eine fehlerhafte
invoice.csslässt die Rechnung nicht fehlschlagen – sie wird dann einfach mit dem Standard-Layout gerendert. invoice.csswirkt nur im Standard-Layout. Rechnungen mit gewähltem Briefkopf (siehe unten) oder eigenerlayout.xmlbleiben unberührt.
Das HTML-Gerüst (stabile Klassen)
Die Rechnung besteht aus festen Bausteinen, die du über ihre CSS-Klassen ansprichst:
| Klasse | Element | Bedeutung |
|---|---|---|
.sender-line |
div | Rücksendeangabe über dem Adressfeld (absolut positioniert) |
.addressee |
div | Empfängeradresse (absolut positioniert) |
.info |
div | Datum, Rechnungsnummer, Zahlungsziel (absolut positioniert, rechtsbündig) |
.below-address |
div | Wrapper des Fließinhalts; sein margin-top reserviert das Adressfeld auf Seite 1 |
.opening / .closing |
p | Einleitungs-/Schlusstext |
.items |
table | Positionstabelle (bricht über Seiten um, Kopf wiederholt sich) |
.num / .unit |
th, td | rechtsbündige Zahlen- bzw. zentrierte Einheiten-Spalten |
.sumfirst |
tr | erste Summenzeile (trägt die Abschlusslinie der Tabelle) |
.total |
tr | Gesamtbetragszeile (fett) |
.sumlabel |
td | Beschriftungszelle der Summenzeilen |
.pagefooter |
footer | Seitenfuß; wird auf jeder Seite wiederholt |
.foot |
table | dreispaltige Tabelle im Seitenfuß (Firma / Bank / USt-ID) |
Die eingebaute Seitengeometrie
@page {
size: a4;
margin: 0;
border-left: 5mm solid #39b004; /* grüner Balken, volle Blatthöhe */
padding: 10mm 10mm 35mm 20mm; /* Content-Einzug (links inkl. Balken: 25mm) */
@bottom-center { content: element(pagefooter); margin: -22mm 10mm 0 20mm; }
}Hinweise dazu:
- Der farbige Randbalken ist der
border-leftder Seite. Farbe ändern:@page { border-left: 5mm solid #003366 }. Entfernen:border-left: 0; padding-left: 25mm(damit der Text an derselben Stelle beginnt). - Der Balken läuft nur bei
margin: 0über die volle Blatthöhe; der Content-Einzug kommt aus dempadding. - Der Seitenfuß sitzt in der
@bottom-center-Box. Ihr negativesmargin-topbestimmt die Oberkante des Fußes über der Blattunterkante,margin-left/margin-rightden seitlichen Einzug. Einzüge im Fuß-Inhalt selbst gehen beim Wiederholen verloren – immer über diese Box-Margins steuern. position: absolute(Kopfblöcke) misst von der Blattkante, nicht vom Satzspiegel.
Beispiele
Balken in Firmenblau, Standardschrift serifenlos in 9pt:
@page { border-left: 5mm solid #003366; }
body { font-size: 9pt; }Eigene Schrift einbinden (Fontdatei ebenfalls unter Ablage → Dateien hochladen und mit dem Dateinamen referenzieren):
@font-face { font-family: "Hausschrift"; src: url("MeineSchrift.ttf"); }
@font-face { font-family: "Hausschrift"; src: url("MeineSchrift-Bold.ttf"); font-weight: bold; }
body { font-family: "Hausschrift"; }Dezentere Tabellenlinien und mehr Zeilenluft:
table.items th { border-top: 0.25pt solid #999; border-bottom: 0.25pt solid #999; font-style: normal; }
table.items td { padding: 4pt; }
tr.sumfirst td { border-top: 0.75pt solid #999; }c) Eigenen Briefkopf und Schriftdateien verwenden
Wenn du dein Layout etwas individueller gestalten möchtest, kannst du einen eigenen Briefkopf erstellen.
-
Lade deine Dateien im Menü Ablage → Dateien hoch:
- dein Briefkopf als PDF-Datei (z. B.
briefkopf.pdf) - optionale Schriftdateien (.ttf, .otf), falls du eigene Fonts nutzen möchtest
- dein Briefkopf als PDF-Datei (z. B.
-
Öffne den Briefkopf-Editor unter Ablage → Briefkopf.
- Klicke auf Neu
- Wähle deine hochgeladene PDF-Datei aus der Liste
- Vergib einen Namen für den Briefkopf
- Markiere anschließend im Editor drei Bereiche auf deiner Briefkopf-Vorlage:
- Empfängeradresse (typischerweise im Fensterbereich eines Umschlags)
- Rechnungsdaten (Datum, Fälligkeitsdatum, Rechnungsnummer usw.)
- Hauptbereich (Anrede, Rechnungspositionen, Fußzeile)
Diese Bereiche werden beim Erzeugen der PDF-Rechnung automatisch mit den passenden Daten gefüllt. So kannst du dein eigenes Corporate Design umsetzen, ohne dich mit XML-Dateien befassen zu müssen.
- Wähle unten im Editor die Schriftarten aus, die im PDF verwendet werden sollen. Wenn du eigene Schriftdateien hochgeladen hast, stehen diese hier zur Auswahl. Ansonsten werden Standardschriften verwendet.
- Klicke auf Speichern oben rechts.
d) Eigenes Layout mit layout.xml (speedata Publisher)
Für maximale Gestaltungsfreiheit kannst du dein komplett eigenes Layout mit dem
speedata Publisher erstellen.
Dieser Weg funktioniert parallel zu allen anderen: Sobald eine layout.xml
in deiner Dateiablage liegt, verwendet billingcat sie automatisch (siehe
Welches Layout wird verwendet?).
-
Lade im Menü Ablage → Dateien folgende Dateien hoch:
- eine Datei mit dem Namen
layout.xml - alle zusätzlich benötigten Dateien (z. B. Bilder, Fonts, XML-Ressourcen)
- eine Datei mit dem Namen
-
Die
layout.xmldefiniert exakt, wie dein PDF aufgebaut wird – von Textpositionen bis hin zu Schriften und Farben. Ein Beispiel findest du hier: ZUGFeRD Beispiel-Layout -
Achte darauf:
- Die Datei
layout.xmlmuss technisch korrekt sein. - Alle referenzierten Dateien müssen ebenfalls hochgeladen werden.
- Fehlen Dateien oder treten Fehler auf, kann kein PDF erzeugt werden.
- Die Datei
Dieses Vorgehen eignet sich, wenn du das Layout komplett selbst kontrollieren möchtest oder bereits ein eigenes speedata-Projekt hast.
Welches Layout wird verwendet?
Alle beschriebenen Wege existieren nebeneinander. So entscheidet billingcat für jede Rechnung:
- Briefkopf an der Rechnung gewählt? Dann wird die Rechnung mit diesem
Briefkopf gerendert (Weg c).
invoice.cssundlayout.xmlspielen dabei keine Rolle. - Sonst greift die Einstellung PDF-Erzeugung in den Stammdaten:
- Automatisch (Voreinstellung): Liegt eine
layout.xmlin deiner Dateiablage, wird das PDF damit über den speedata Publisher erzeugt (Weg d). Andernfalls kommt das eingebaute Standard-Layout zum Einsatz (Weg a), inklusive einer eventuell hochgeladeneninvoice.css(Weg b). - Eingebautes Standard-Layout: immer das Standard-Layout (mit
invoice.css), auch wenn einelayout.xmlvorhanden ist. - speedata Publishing-Server: immer die
layout.xml.
- Automatisch (Voreinstellung): Liegt eine
Auf der Rechnungsseite zeigt dir der Hinweis unter „Automatisch" jeweils an, welcher Weg für dich gerade aktiv ist.
ZUGFeRD Anforderungen
Wenn du Rechnungen mit ZUGFeRD erzeugst, gibt es ein paar zusätzliche Anforderungen:
Grundprinzip
- ZUGFeRD-Dokumente sind PDF/A-3 Dateien mit eingebettetem XML.
- billingcat kümmert sich automatisch darum, dass das XML erzeugt und eingebettet wird.
- Damit die Datei wirklich als ZUGFeRD gilt, müssen alle eingebundenen PDFs und Ressourcen selbst den PDF/A-3 Vorgaben entsprechen.
Typische Anforderungen an PDF/A-3
- Schriftarten müssen vollständig eingebettet sein (keine Systemfonts).
- Farben müssen ein eingebettetes ICC-Profil verwenden (z. B. CMYK). In den beiden Vorlagen wird CMYK benutzt.
- Bilder sollten in einem PDF/A-konformen Format eingebunden sein. Transparenzen oder exotische Farbprofile können Probleme verursachen.
- Keine aktiven Inhalte (z. B. JavaScript, Video oder Audio sind nicht erlaubt).
- Dateinamen für eingebundene PDFs oder Ressourcen sollten keine Sonderzeichen enthalten.
Typische Fehlerquellen
- Briefkopf als PDF ist nicht PDF/A-3 konform (z. B. fehlendes Farbprofil oder nicht eingebettete Schriftarten). → Ergebnis: Das PDF sieht zwar korrekt aus, ist aber kein gültiges ZUGFeRD.
- Logo oder Hintergrundgrafiken als PDF eingebunden, die nicht konform sind.
- Unterschiedliche Font-Einbettungen zwischen Briefkopf und Rechnungsinhalt.
- Ungültige
layout.xml(führt dazu, dass gar kein PDF erzeugt wird).
Empfehlung
- Prüfe deine eigenen PDF-Dateien mit einem PDF/A-Validator (z. B. veraPDF oder callas pdfaPilot).
- Nutze einfache, CMYK-basierte Bilder.
- Achte auf saubere Font-Einbettung, am besten Standard-Schriften mit kompletter Einbettung.