Rechnungs-Layout

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.

Standard-Rechnungs-PDF

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.css lässt die Rechnung nicht fehlschlagen – sie wird dann einfach mit dem Standard-Layout gerendert.
  • invoice.css wirkt nur im Standard-Layout. Rechnungen mit gewähltem Briefkopf (siehe unten) oder eigener layout.xml bleiben 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-left der 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 dem padding.
  • Der Seitenfuß sitzt in der @bottom-center-Box. Ihr negatives margin-top bestimmt die Oberkante des Fußes über der Blattunterkante, margin-left/ margin-right den 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.

  1. 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
  2. Ö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
Neuer Briefkopf
  1. 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.

Screenshot der Einstellungen
  1. 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.
Schriftarten-Auswahl
  1. 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?).

  1. 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)
  2. Die layout.xml definiert exakt, wie dein PDF aufgebaut wird – von Textpositionen bis hin zu Schriften und Farben. Ein Beispiel findest du hier: ZUGFeRD Beispiel-Layout

  3. Achte darauf:

    • Die Datei layout.xml muss technisch korrekt sein.
    • Alle referenzierten Dateien müssen ebenfalls hochgeladen werden.
    • Fehlen Dateien oder treten Fehler auf, kann kein PDF erzeugt werden.

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:

  1. Briefkopf an der Rechnung gewählt? Dann wird die Rechnung mit diesem Briefkopf gerendert (Weg c). invoice.css und layout.xml spielen dabei keine Rolle.
  2. Sonst greift die Einstellung PDF-Erzeugung in den Stammdaten:
    • Automatisch (Voreinstellung): Liegt eine layout.xml in 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 hochgeladenen invoice.css (Weg b).
    • Eingebautes Standard-Layout: immer das Standard-Layout (mit invoice.css), auch wenn eine layout.xml vorhanden ist.
    • speedata Publishing-Server: immer die layout.xml.

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.