Python Tutorial • 5 Min. Lesezeit

ZUGFeRD 2.2 in Python erstellen

Die E-Rechnungspflicht ab 2025 erfordert hybride PDF/A-3 Dokumente. So generierst du EN 16931-konforme Rechnungen sauber mit Python.

Die Herausforderung: Warum ist ZUGFeRD in Python so aufwendig?

Mit dem Wachstumschancengesetz müssen Unternehmen in Deutschland ab dem 1. Januar 2025 im B2B-Bereich elektronische Rechnungen empfangen und verarbeiten können. Ein reines PDF genügt nicht mehr.

Beim ZUGFeRD-Format (identisch zu Factur-X) muss eine strukturierte XML-Datei (nach europäischer Norm EN 16931) unsichtbar in ein PDF/A-3 Dokument eingebettet werden. Wer das nativ in Python bauen möchte, stößt schnell auf Probleme:

Die Lösung: REST-API mit Python ansprechen

Statt hunderte Seiten XML-Spezifikationen zu wälzen, kannst du ein einfaches JSON-Objekt an die E-Rechnung API senden. Die Engine validiert die Daten, berechnet die Steuern und liefert das fertige PDF/A-3 Dokument zurück.

Variante A: Mit dem offiziellen Python SDK (Empfohlen)

Installiere das offizielle SDK-Paket aus dem PyPI-Verzeichnis:

pip install zugferd-client

Mit dem SDK genügen 3 Zeilen Code (der kostenlose Test-Key ist standardmäßig aktiv):

from zugferd_client import ZugferdClient

client = ZugferdClient()
client.generate_invoice(payload, output_path="rechnung.pdf")

# Optional: Konformität sofort validieren
report = client.validate("rechnung.pdf")
print("Ist valide:", report.is_valid)

Variante B: Nativ mit der Requests Bibliothek

Falls du kein zusätzliches SDK installieren möchtest, kannst du die API auch direkt über requests ansprechen:

pip install requests

Das vollständige Requests-Skript

Speichere den folgenden Code als generate_invoice.py. Du kannst ihn direkt mit unserem öffentlichen Test-Key zg_test_ouroboros_001 ausführen:

generate_invoice.py
import requests

API_URL = "https://e-rechnung-cloud.de/v1/invoice/generate"
# Nutze für Tests: zg_test_ouroboros_001 (kostenlos & unbegrenzt)
API_KEY = "zg_test_ouroboros_001"

payload = {
    "invoice_number": "RE-2025-001",
    "issue_date": "2025-01-15",
    "currency": "EUR",
    "seller": {
        "name": "Musterfirma GmbH",
        "street": "Hauptstraße 12",
        "zip_code": "10115",
        "city": "Berlin",
        "country": "DE",
        "vat_id": "DE123456789",
        "iban": "DE89370400440532013000"
    },
    "buyer": {
        "name": "Kunde AG",
        "street": "Industrieweg 4",
        "zip_code": "80331",
        "city": "München",
        "country": "DE"
    },
    "line_items": [
        {
            "description": "IT-Beratung & Integration",
            "quantity": 10,
            "unit_price": 120.00,
            "tax_rate_percent": 19.0
        },
        {
            "description": "Server-Setup Pauschale",
            "quantity": 1,
            "unit_price": 250.00,
            "tax_rate_percent": 19.0
        }
    ]
}

response = requests.post(
    API_URL,
    headers={"X-API-Key": API_KEY, "Content-Type": "application/json"},
    json=payload
)

if response.status_code == 200:
    with open("rechnung_zugferd.pdf", "wb") as f:
        f.write(response.content)
    print("SUCCESS: PDF/A-3 Rechnung erfolgreich erstellt (rechnung_zugferd.pdf)")
else:
    print(f"ERROR {response.status_code}: {response.text}")

Schritt 3: Das erzeugte PDF validieren

Öffnest du die erzeugte rechnung_zugferd.pdf im Adobe Acrobat Reader, siehst du links in der Büroklammer-Leiste die eingebettete Datei factur-x.xml.

Du kannst das PDF auch direkt in unserem kostenlosen Live-Validator hochladen, um die Konformität nach EN 16931 in Echtzeit zu prüfen.

Bereit für den Produktiv-Einsatz?

Hol dir deinen persönlichen Live-Key und integriere die E-Rechnung in dein System.

Preise & API-Keys ansehen