Zum Inhalt springen
CastPDF
ZUGFeRD

ZUGFeRD-Rechnung erstellen: ein PDF für Menschen, ein XML für Software

Eine ZUGFeRD-Rechnung ist ein PDF, das Menschen lesen können, mit derselben Rechnung als XML darin. Damit erfüllt sie die E-Rechnungspflicht im B2B-Geschäft. CastPDF erstellt ZUGFeRD-Dateien aus Ihren Rechnungsdaten: als PDF/A-3b mit factur-x.xml und mit Summen nach den Regeln der EN 16931.

  • Aktualisiert am
  • 5 Min. Lesezeit
  • 100 kostenlose PDFs im Monat
  1. PDF/A-3bSchriften eingebettet, Farben definiert, nicht verschlüsselt.
  2. Ihr LayoutDie eingebaute Rechnungsvorlage oder Ihre eigene, aus HTML und CSS.
  3. factur-x.xml darinCII-Syntax, der Dateiname seit ZUGFeRD 2.1.
  4. Dieselben SummenEinmal berechnet, auf der Seite und im XML.
Eine ZUGFeRD-Rechnung: eine Rechnungsseite als PDF/A-3b mit factur-x.xml als Anhang. Seite und XML zeigen dieselben Summen.

Was eine ZUGFeRD-Rechnung ist

Kurz gesagt

Eine Datei, zwei Leser: Menschen lesen die PDF-Seite, die Buchhaltungssoftware liest das XML darin.

ZUGFeRD ist das deutsche hybride Rechnungsformat. Es wird vom Forum elektronische Rechnung Deutschland (FeRD) gepflegt. Außen ist es ein PDF/A-3-Dokument, das wie jede Rechnung aussieht. Innen steckt eine XML-Datei in der Syntax Cross Industry Invoice (CII). Dieses XML enthält jedes Feld der Rechnung in der Form, die die EN 16931 vorgibt.

Seit Version 2.1 sind ZUGFeRD und das französische Factur-X derselbe Standard. Beide betten eine Datei namens factur-x.xml ein und beschreiben sie in denselben PDF-Metadaten. Ein deutscher Kunde, der ZUGFeRD verlangt, und ein französischer, der Factur-X will, öffnen dieselbe Datei.

  • Das PDF ist PDF/A-3b: Schriften eingebettet, Farben definiert, keine Verschlüsselung.
  • Das XML ist als zugeordnete Datei eingebettet, mit der Beziehung Alternative.
  • Die PDF-Metadaten nennen das Profil, damit ein Programm weiß, was es erwartet.
  • Die Seite rendert Chromium, Ihr HTML und CSS sehen also so aus, wie Sie sie gestaltet haben.

Das ZUGFeRD-XML: was drinsteht

Das eingebettete XML ist der rechtlich führende Teil der Rechnung. Es enthält Rechnungsnummer und Datum, Verkäufer und Käufer mit Anschrift und USt-IdNr., jede Position mit Menge, Einheit und Nettopreis, die Steuer je Steuersatz, die Summen und die Zahlungsdaten.

Jeder PDF-Viewer zeigt die Seite. Programme, die Anhänge auflisten, zeigen auch factur-x.xml. Diese Datei liest die Buchhaltung Ihres Kunden ein, ohne dass jemand Beträge abtippt. Stimmen Seite und XML nicht überein, gilt das XML. Deshalb erzeugt CastPDF beide aus einer Berechnung.

Wie viel das XML enthält, legt das Profil fest. Nehmen Sie EN 16931, wenn Ihr Kunde nichts anderes verlangt. Die Profile MINIMUM und BASIC WL enthalten keine Positionen und gelten in Deutschland nicht als Rechnung.

ZUGFeRD 2.4 und die Versionen

Die erste Version von ZUGFeRD erschien 2014. Für die E-Rechnungspflicht zählt ZUGFeRD ab Version 2.0.1, so steht es in den Schreiben des Bundesfinanzministeriums. Aktuell ist ZUGFeRD 2.4, das das FeRD Anfang 2026 in Kraft gesetzt hat.

Der Aufbau ist seit Version 2.1 gleich geblieben: ein PDF/A-3 mit factur-x.xml in CII-Syntax und dieselben Profile. Neue Versionen pflegen vor allem Regeln und Codelisten. CastPDF schreibt ZUGFeRD 2.x im Aufbau von Factur-X. Unsere Testsuite prüft jedes erzeugte XML mit den offiziellen Regeldateien von Factur-X 1.09 und der EN 16931.

Ältere Dateien

ZUGFeRD 1.0 und 2.0 nutzten andere Dateinamen für das XML. CastPDF erzeugt nur den heutigen Aufbau mit factur-x.xml, den Empfänger seit Version 2.1 erwarten.

ZUGFeRD oder XRechnung?

Beide Formate sind E-Rechnungen im Sinne der deutschen Regeln. Sie tragen dieselben Daten nach EN 16931. Der Unterschied liegt darin, wie die Datei aussieht und wer sie erwartet.

ZUGFeRD und XRechnung im Vergleich
ZUGFeRDXRechnung
Die DateiEin PDF mit dem XML darinNur das XML
Wer sie meist verlangtUnternehmenÖffentliche Auftraggeber und ihre Portale
Ohne Software lesbarJaNein
Zusätzliche PflichtfelderKeine über EN 16931 hinausLeitweg-ID, Kontakt des Verkäufers, elektronische Adressen
In CastPDF"standard": "zugferd""standard": "xrechnung-cii" oder "xrechnung-ubl"

Es gibt auch einen Mittelweg. Das ZUGFeRD-Profil XRECHNUNG bettet ein XRechnung-XML in ein lesbares PDF ein. Behördenportale wollen trotzdem meist das reine XML. Mehr dazu auf unserer Seite zur XRechnung.

ZUGFeRD-Rechnung erstellen: kostenlos oder per API

Für einzelne Rechnungen reicht der kostenlose E-Rechnungs-Generator. Sie füllen ein Formular aus und laden die ZUGFeRD-Datei herunter, ohne Konto. Entstehen Ihre Rechnungen in einem eigenen System, sendet es die Rechnung als JSON an die API. Eine Vorlage brauchen Sie nicht, die eingebaute Rechnungsvorlage erzeugt die Seite.

{
  "e_invoice": {
    "standard": "zugferd",
    "profile": "en16931",
    "invoice": {
      "number": "RE-2026-0816",
      "issue_date": "2026-10-11",
      "currency": "EUR",
      "seller": {
        "name": "Lindqvist Software GmbH",
        "vat_id": "DE123456789",
        "tax_number": "37/123/45678",
        "address": { "line1": "Kastanienallee 12", "city": "Berlin", "postal_code": "10435", "country_code": "DE" },
        "contact": { "name": "Buchhaltung", "email": "[email protected]" }
      },
      "buyer": {
        "name": "Brightwater Kaffee GmbH",
        "vat_id": "DE987654321",
        "address": { "line1": "Speicherstadt 4", "city": "Hamburg", "postal_code": "20457", "country_code": "DE" }
      },
      "payment": { "iban": "DE89370400440532013000", "due_date": "2026-11-10", "terms": "Zahlbar innerhalb von 30 Tagen ohne Abzug." },
      "lines": [
        { "name": "Supportvertrag, Oktober", "quantity": 1, "unit_code": "MON", "unit_price": "650.00", "vat": { "category": "S", "rate": 19 } },
        { "name": "Schulung vor Ort", "quantity": 6, "unit_code": "HUR", "unit_price": "95.00", "vat": { "category": "S", "rate": 19 } }
      ]
    }
  },
  "filename": "RE-2026-0816"
}
curl https://api.castpdf.com/v1/pdf \
  -H "Authorization: Bearer $CASTPDF_API_KEY" \
  -H "Content-Type: application/json" \
  -d @RE-2026-0816.json \
  -o RE-2026-0816.pdf

Die Antwort ist das PDF mit dem Header x-e-invoice: zugferd/en16931. Mit "response": "url" erhalten Sie stattdessen einen signierten Download-Link und e_invoice.xml_filename im JSON. Beträge dürfen Zahlen oder Dezimal-Strings sein. Strings schließen jeden Zweifel an Nachkommastellen aus.

ZUGFeRD validieren

Bevor Sie eine Rechnung verschicken, lohnt sich ein Blick auf das XML. Unser kostenloser Validator liest das XML aus dem ZUGFeRD-PDF. Er prüft Pflichtfelder, Codelisten, Steuerregeln und die Summen nach EN 16931 und zeigt, was das PDF über sich selbst angibt.

Das ist eine schnelle Prüfung, nicht die offizielle Validierung mit XSD und Schematron. Für die XRechnung und EN-16931-Dateien ist der KoSIT-Validator das Referenzwerkzeug. Der beste Test bleibt eine Probe-Rechnung an Ihren Kunden.

ZUGFeRD in PHP, Java oder Python

Wer ZUGFeRD selbst erzeugen will, findet freie Bibliotheken: das Mustang-Projekt für Java, horstoeko/zugferd für PHP und factur-x für Python. Damit bauen Sie das XML selbst, rechnen die Summen selbst und betten das XML in ein PDF/A-3 ein, das Sie ebenfalls selbst erzeugen.

Mit der API entfällt dieser Teil. Jede Sprache, die eine HTTPS-Anfrage senden kann, sendet die Rechnung als JSON und erhält die fertige Datei. Beispiele für Ihre Sprache finden Sie auf den Entwicklerseiten zu PHP, Java und Python.

Woran ZUGFeRD-Dateien oft scheitern

  • Ein Cent Unterschied. Rundet Ihr System die Steuer pro Position, weicht die Summe von der EN 16931 ab. CastPDF rechnet die Steuer einmal je Steuersatz.
  • Gemischte Steuersätze. Eine Leistung zu 19 % und ein Buch zu 7 % ergeben je Steuersatz eine eigene Zeile, im XML und auf der Seite.
  • Gutschriften. Senden Sie type_code 381 und die ursprüngliche Rechnungsnummer in preceding_invoice.
  • Reverse Charge. Nutzen Sie die Steuerkategorie AE mit der USt-IdNr. des Käufers. Den passenden Befreiungstext ergänzt die API.
  • Lange Rechnungen. Die Rechnungsvorlage wiederholt den Tabellenkopf auf jeder Seite, und das XML enthält jede Position.

Fehlen Angaben oder passen sie nicht zusammen, antwortet die API mit invalid_e_invoice und nennt jedes Problem mit seinem Feld. Erst wenn die Rechnung stimmt, wird etwas erzeugt und gezählt.

Häufige Fragen

Welche ZUGFeRD-Version erstellt CastPDF?

ZUGFeRD 2.x im Aufbau von Factur-X: Das XML ist als factur-x.xml mit den Factur-X-Metadaten eingebettet, wie es ZUGFeRD ab 2.1 verlangt. Den älteren Dateinamen zugferd-invoice.xml von Version 2.0 erzeugt CastPDF nicht.

Kann ich eine ZUGFeRD-Rechnung in einem normalen PDF-Viewer öffnen?

Ja. Jeder PDF-Viewer zeigt die Seite. Viewer, die Anhänge auflisten, zeigen auch factur-x.xml, also die Daten, die die Buchhaltung Ihres Kunden einliest.

Welches ZUGFeRD-Profil soll ich wählen?

EN 16931, die Voreinstellung. Es enthält die vollständige Rechnung. BASIC und EXTENDED sind ebenfalls möglich. MINIMUM und BASIC WL enthalten keine Positionen und gelten in Deutschland nicht als Rechnung.

Ist ZUGFeRD dasselbe wie Factur-X?

Seit ZUGFeRD 2.1 ja: dasselbe XML, derselbe Dateiname factur-x.xml und dieselben PDF-Metadaten. CastPDF kennt beide Namen, damit die Datei den Standard nennt, den Ihr Kunde verlangt hat.

Kann ich ZUGFeRD mit meinem eigenen Rechnungslayout erstellen?

Ja. Senden Sie zusätzlich eine template_id. Ihre Vorlage erhält die Rechnung mit allen berechneten Beträgen, sodass Ihre Seite dieselben Zahlen zeigt wie das XML.

Reicht ein ZUGFeRD-PDF für die E-Rechnungspflicht?

Ja, ab Version 2.0.1 und mit dem Profil BASIC oder höher. CastPDF schreibt standardmäßig das Profil EN 16931. Ob die Pflicht für Sie schon gilt, hängt von Ihrem Umsatz und dem Jahr ab.
Alles zum Thema E-Rechnung

Ihr erstes PDF in fünf Minuten.

Wählen Sie eine Vorlage, erstellen Sie einen kostenlosen Testschlüssel und senden Sie eine Anfrage. 100 PDFs im Monat sind kostenlos, und zum Start brauchen Sie keine Karte.