XRechnung mit Anhang: PDFs per Base64 einbetten (BG-24)
XRechnung mit Anhang: So betten Sie PDFs und andere Anlagen per Base64 in BG-24 ein, mit UBL- und CII-Beispiel, erlaubten MIME-Typen und Grenzen der OZG-RE.
Das Wichtigste in Kürze
- Anhänge einer XRechnung stehen in der Gruppe BG-24; jede Anlage braucht eine Kennung in BT-122 (Regel BR-52) und wird als Base64-Text in BT-125 mit MIME-Code und Dateiname eingebettet.
- Zulässig sind PDF, PNG, JPEG, CSV, XLSX und ODS; application/xml nur mit der Extension XRechnung (BR-DEX-01), andere Typen weist der Validator mit BR-CL-24 zurück.
- Nach dem BMF-Schreiben vom 15.10.2025 müssen alle umsatzsteuerlichen Pflichtangaben im XML stehen; ein Anhang darf nur ergänzen, und ein externer Link erfüllt § 14 Abs. 1 Satz 3 UStG nicht.
- Die Bundesplattform OZG-RE erlaubt höchstens 200 eingebettete Dokumente; größere Unterlagen lassen sich über „Große Anlagen“ bis 200 MB insgesamt als Verweis anhängen.
- Base64 nach RFC 4648 vergrößert jede Datei um rund ein Drittel: Aus einem PDF mit 7,5 MB werden etwa 10 MB Text in der XML-Datei.
Inhalt
Eine XRechnung mit Anhang enthält die Zusatzdokumente direkt in der XML-Datei: Jede Anlage steht in der Gruppe BG-24 und wird als Base64-Text in BT-125 eingebettet, mit MIME-Typ und Dateiname. Zulässig sind PDF, PNG, JPEG, CSV, XLSX und ODS. Alle umsatzsteuerlichen Pflichtangaben müssen trotzdem im XML selbst stehen, nicht nur in der Anlage.
Stand: September 2026 · Dieser Beitrag ersetzt keine Steuerberatung.
Dieser Beitrag zeigt, wann Anlagen nötig sind, welche Felder BG-24 hat, wie ein Anhang in UBL und CII aussieht, welche Grenzen die Bundesplattform setzt und wie Sie Dateien kodieren, einbetten und wieder auslesen. Den Aufbau der gesamten Datei erklärt der Beitrag XRechnung XML-Struktur. Weitere Themen für Entwickler finden Sie in der Kategorie Entwickler-Tools.
Wann braucht eine XRechnung einen Anhang?
Eine XRechnung ist ein Datensatz, kein Dokument mit Seiten. Unterlagen, die der Empfänger zusätzlich zur Prüfung braucht, reisen als Anhang in derselben Datei mit. Typische Fälle sind:
- Stundennachweise bei Beratung und Dienstleistungen, etwa die Aufschlüsselung der abgerechneten Stunden. Mehr dazu im Beitrag E-Rechnung für Freiberufler.
- Lieferscheine und Leistungsnachweise, die die berechnete Menge belegen.
- Aufmaße im Bauwesen. Bei öffentlichen Bauaufträgen beginnt die Prüffrist des Auftraggebers laut FAQ der Bundesplattform erst mit Eingang der prüfbaren Rechnung einschließlich der rechnungsbegründenden Anlagen. Praxisfragen für Betriebe behandelt der Beitrag E-Rechnung im Handwerk.
- Freistellungsbescheinigungen, für die XRechnung kein eigenes Feld hat. Die Bundesplattform verlangt sie deshalb als Anlage.
- Verträge bei Dauerschuldverhältnissen. Nach dem BMF-Schreiben vom 15.10.2025 genügt bei Miete oder Wartung eine E-Rechnung für den ersten Zeitraum, wenn der zugrunde liegende Vertrag als Anhang enthalten ist.
Was darf in der Anlage stehen und was nicht?
Maßgeblich ist das BMF-Schreiben vom 15.10.2025 (öffnet in neuem Tab) (Rn. 35). Alle umsatzsteuerlichen Pflichtangaben nach §§ 14, 14a UStG müssen im strukturierten Teil der E-Rechnung stehen. Ein bloßer Verweis im XML auf eine Anlage, die diese Angaben enthält, genügt nicht, weil dann keine elektronische Verarbeitung möglich ist. Ergänzende Angaben dürfen dagegen in einem eingebetteten Anhang stehen; das Schreiben nennt als Beispiel die Aufschlüsselung von Stundennachweisen in einer PDF-Datei. Ein Link auf ein externes Ziel erfüllt weder § 14 Abs. 1 Satz 3 UStG noch § 31 Abs. 1 UStDV.
Auch die Leistungsbeschreibung im XML muss für sich eine eindeutige und leicht nachprüfbare Feststellung der Leistung ermöglichen. Eine Position „Beratung laut Anlage“ reicht dafür nicht. „Beratung Projekt Alpha, 15 Stunden, September 2026“ in der Position und die Einzelaufstellung der Tage im PDF erfüllen beide Anforderungen.
Ob alle Angaben nach § 14 Abs. 4 UStG vorhanden sind, können Sie vor dem Versand mit dem Werkzeug Pflichtangaben prüfen kontrollieren.
Welche Felder hat die Gruppe BG-24?
In der EN 16931 heißt die Gruppe ADDITIONAL SUPPORTING DOCUMENTS. Sie darf mehrfach vorkommen, einmal je Unterlage.
| BT | Bezeichnung | Inhalt | UBL | CII |
|---|---|---|---|---|
| BT-122 | Supporting document reference | Kennung der Unterlage, Pflicht in jeder BG-24 (BR-52) | cbc:ID | ram:IssuerAssignedID |
| BT-123 | Supporting document description | kurze Beschreibung | cbc:DocumentDescription | ram:Name |
| BT-124 | External document location | URL einer extern abgelegten Unterlage | cac:Attachment/cac:ExternalReference/cbc:URI | ram:URIID |
| BT-125 | Attached document | Base64-Inhalt der Datei | cac:Attachment/cbc:EmbeddedDocumentBinaryObject | ram:AttachmentBinaryObject |
| BT-125-1 | Attached document Mime code | z. B. application/pdf | Attribut mimeCode | Attribut mimeCode |
| BT-125-2 | Attached document Filename | z. B. stundennachweis-2026-09.pdf | Attribut filename | Attribut filename |
Zwei Stolperstellen betreffen den Dokumenttyp. In CII braucht jede Anlage ram:TypeCode mit dem Wert 916. Der Code 130 kennzeichnet dort die Objektkennung BT-18; eine Anlage mit Code 130 scheitert an den Regeln CII-DT-021 und CII-DT-022. In UBL dient dasselbe Element cac:AdditionalDocumentReference mit cbc:DocumentTypeCode 130 ebenfalls der Objektkennung BT-18. Setzen Sie diesen Code bei einer Anlage, meldet der Validator UBL-CR-666 und UBL-CR-673.
Wie sieht ein Anhang in UBL aus?
In UBL steht cac:AdditionalDocumentReference nach cbc:BuyerReference und etwaigen Bestell- oder Vertragsreferenzen, aber vor cac:ProjectReference und cac:AccountingSupplierParty. Das Beispiel zeigt eine eingebettete PDF-Datei und einen externen Verweis. Der Base64-Text ist gekürzt; das Zeichen „…“ markiert die Stelle.
<cbc:BuyerReference>991-12345-73</cbc:BuyerReference>
<cac:AdditionalDocumentReference>
<cbc:ID>STD-2026-09</cbc:ID> <!-- BT-122 -->
<cbc:DocumentDescription>Stundennachweis September 2026</cbc:DocumentDescription> <!-- BT-123 -->
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf"
filename="stundennachweis-2026-09.pdf">JVBERi0xLjcKJeLjz9MK…</cbc:EmbeddedDocumentBinaryObject> <!-- BT-125 -->
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>AUFMASS-17</cbc:ID>
<cbc:DocumentDescription>Aufmaß Bauabschnitt 2</cbc:DocumentDescription>
<cac:Attachment>
<cac:ExternalReference>
<cbc:URI>https://example.com/anlagen/aufmass-17.pdf</cbc:URI> <!-- BT-124 -->
</cac:ExternalReference>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>…</cac:AccountingSupplierParty>
Die vollständige Beispielrechnung mit PDF-, CSV- und Link-Anlage haben wir mit dem KoSIT-Validator 1.5.0 und der Prüfkonfiguration für XRechnung 3.0.2 geprüft; das Ergebnis war accept.
Wie sieht ein Anhang in CII aus?
In CII gehört die Anlage in ram:ApplicableHeaderTradeAgreement, hinter die Parteien und etwaige Bestell- oder Vertragsreferenzen. Innerhalb von ram:AdditionalReferencedDocument gilt die Reihenfolge ram:IssuerAssignedID, ram:URIID, ram:TypeCode, ram:Name, ram:AttachmentBinaryObject.
<ram:ApplicableHeaderTradeAgreement>
<ram:BuyerReference>991-12345-73</ram:BuyerReference>
<ram:SellerTradeParty>…</ram:SellerTradeParty>
<ram:BuyerTradeParty>…</ram:BuyerTradeParty>
<ram:AdditionalReferencedDocument>
<ram:IssuerAssignedID>STD-2026-09</ram:IssuerAssignedID> <!-- BT-122 -->
<ram:TypeCode>916</ram:TypeCode>
<ram:Name>Stundennachweis September 2026</ram:Name> <!-- BT-123 -->
<ram:AttachmentBinaryObject mimeCode="application/pdf"
filename="stundennachweis-2026-09.pdf">JVBERi0xLjcKJeLjz9MK…</ram:AttachmentBinaryObject> <!-- BT-125 -->
</ram:AdditionalReferencedDocument>
</ram:ApplicableHeaderTradeAgreement>
In unseren Tests hat die KoSIT-Prüfung ein fehlendes filename in CII nicht beanstandet, in UBL dagegen schon (UBL-DT-07). Setzen Sie das Attribut trotzdem immer: Ohne Namen kann der Empfänger die Datei nicht sinnvoll speichern, und BR-DE-22 prüft die Eindeutigkeit über genau dieses Attribut.
Welche Dateitypen und Regeln prüft der Validator?
| MIME-Code (BT-125-1) | Dateiendung | Hinweis |
|---|---|---|
application/pdf | häufigster Fall | |
image/png | .png | Fotos, Scans |
image/jpeg | .jpg, .jpeg | Fotos, Scans |
text/csv | .csv | Stundenlisten, Mengenaufstellungen |
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | .xlsx | Excel-Tabellen |
application/vnd.oasis.opendocument.spreadsheet | .ods | OpenDocument-Tabellen |
application/xml | .xml | nur mit Extension XRechnung, z. B. GAEB-Dateien |
Die folgenden Meldungen haben wir mit derselben Validator-Version nachgestellt:
| Meldung | Auslöser | Lösung |
|---|---|---|
| BR-52 | BG-24 ohne Kennung BT-122; in UBL zusätzlich ein XSD-Fehler | cbc:ID bzw. ram:IssuerAssignedID setzen |
| BR-CL-24 | MIME-Code außerhalb der Liste, z. B. application/zip oder application/xml ohne Extension | Datei in PDF umwandeln oder Extension verwenden |
| BR-DE-22 | zwei Anlagen mit gleichem filename | eindeutige Namen vergeben |
| UBL-DT-06, UBL-DT-07 | mimeCode oder filename fehlt in UBL | Attribute ergänzen |
| XSD-Fehler | Base64-Text abgeschnitten oder mit Base64url-Zeichen - und _ | Datei neu kodieren |
| CII-DT-021, CII-DT-022 | CII-Anlage mit ram:TypeCode 130 | Code 916 verwenden |
| UBL-CR-666, UBL-CR-673 | UBL-Anlage mit cbc:DocumentTypeCode 130 | Code entfernen |
Laut Spezifikation müssen Dateinamen auch ohne Beachtung der Groß- und Kleinschreibung eindeutig sein, und die Dateiendung gehört zur Prüfung. Vergeben Sie daher Namen, die sich nicht nur in der Schreibweise unterscheiden, und eine Endung, die zum MIME-Code passt. Unser XRechnung Validator prüft diese Regeln mit den offiziellen KoSIT-Regeln und erklärt jede Meldung; die Codes sind auch unter XRechnung Fehlercodes beschrieben. Weitere typische Probleme behandelt der Beitrag XRechnung-Fehler beheben.
Extension XRechnung für XML-Anlagen
Für XML-Anlagen, im Bau vor allem GAEB-Dateien, brauchen Sie die Extension XRechnung, die seit dem 01.01.2021 genutzt werden darf. BT-24 lautet dann urn:cen.eu:en16931:2017#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0#conformant#urn:xeinkauf.de:kosit:extension:xrechnung_3.0. Mit dieser Kennung akzeptiert die KoSIT-Prüfung application/xml (BR-DEX-01). Die angehängte XML-Datei darf ihrerseits keine Elemente enthalten, die weitere XML-Dokumente einbetten, und Sender und Empfänger sollten die Nutzung vorher abstimmen. Ein eigenes Syntax-Binding der Extension gibt es laut Spezifikation 3.0.2 nur für UBL Invoice; XML-Anhänge sind aber auch in CII nutzbar.
Welche Grenzen gelten bei der Bundesplattform OZG-RE?
Seit der Konsolidierung am 19.09.2025 ist die OZG-RE die einzige Rechnungseingangsplattform des Bundes. Ihre FAQ (öffnet in neuem Tab) regelt Anlagen so: Sie gehören Base64-kodiert in den Rechnungsdatensatz und dürfen nicht als separater E-Mail-Anhang verschickt werden. Zulässig sind die Endungen png, pdf, jpg, jpeg, xlsx, ods und csv, dazu xml mit der Extension. Pro Rechnung sind höchstens 200 eingebettete Dokumente erlaubt, aktive Inhalte wie Makros sind ausgeschlossen.
| Kanal | Größenangaben in der FAQ |
|---|---|
| Weberfassung | Anlagen bis 15 MB im Reiter „Anhänge“; die Rechnungsgröße nennt die FAQ an anderer Stelle mit 11 MB |
| Hochladen einer extern erstellten Rechnung | Anlagen bis 15 MB, vorher Base64-kodiert in das XML eingebettet |
| Anlagen bis 15 MB eingebettet; an anderer Stelle nennt die FAQ 10 MB als Rechnungsgröße | |
| Peppol | Anlagen unter 100 MB eingebettet; Größenbegrenzung 100 MB |
| „Große Anlagen“ | bis 200 MB insgesamt, hochgeladen im Verwaltungsmenü und als Link in die Rechnung eingefügt |
Die Werte sind in der FAQ nicht an allen Stellen einheitlich. Planen Sie deshalb mit dem kleinsten Wert und rechnen Sie den Base64-Aufschlag ein. Einen Link auf „Große Anlagen“ stimmen Sie vorab mit dem Rechnungsempfänger ab: Kann er ihn nicht öffnen, kann die Rechnung mangels Prüfbarkeit zurückgewiesen werden. Länder und Kommunen betreiben eigene Portale mit eigenen Regeln.
Was macht Base64 mit einer Datei?
Base64 nach RFC 4648 (öffnet in neuem Tab) stellt beliebige Bytes mit 64 druckbaren Zeichen dar: A–Z, a–z, 0–9, + und /, dazu = als Füllzeichen am Ende. Je drei Bytes werden zu vier Zeichen. Das ist nötig, weil ein PDF Bytes enthält, die in XML nicht vorkommen dürfen, etwa Nullbytes und Steuerzeichen, oder die dort eine Bedeutung haben, etwa < und &.
- Größe: Die Datei wächst um rund 33 Prozent. Aus 3 MB werden 4 MB, aus 7,5 MB etwa 10 MB. Bei einer Grenze von 10 MB bleibt für ein PDF also deutlich weniger als 10 MB.
- Keine Verschlüsselung: Jeder kann Base64 ohne Schlüssel zurückwandeln. Eine Anlage ist so lesbar wie die Rechnung selbst.
- Standardalphabet: Der XML-Datentyp
base64Binarykennt nur das Standardalphabet. Base64url mit-und_, wie es in Web-Tokens üblich ist, scheitert am XSD. - Zeilenumbrüche: Das Schema erlaubt Leerraum im Base64-Text. Strenge Decoder lehnen Umbrüche aber ab, in Java zum Beispiel
Base64.getDecoder(); erstBase64.getMimeDecoder()überspringt sie. Kodieren Sie deshalb ohne Umbrüche.
Den Dateityp erkennen Sie oft schon am Anfang des Base64-Texts. Passt er nicht zum mimeCode, stimmt etwas nicht.
| Beginn des Base64-Texts | dekodiert | Dateityp |
|---|---|---|
JVBERi0 | %PDF- | |
iVBORw0KGgo | PNG-Signatur | PNG |
/9j/ | JPEG-Signatur | JPEG |
UEsDB | PK, ZIP-Container | XLSX, ODS |
Unser Werkzeug Base64 dekodieren arbeitet im Browser mit Text. Es eignet sich, um eine kurze CSV-Anlage zu kodieren (Umlaute werden als UTF-8 behandelt) oder den Anfang eines Base64-Blocks zu prüfen: Aus JVBERi0xLjcK wird %PDF-1.7. Für binäre Dateien wie PDFs nutzen Sie die Befehle aus dem nächsten Abschnitt.
Wie bette ich einen Anhang Schritt für Schritt ein?
- Datei vorbereiten. Nutzen Sie ein zulässiges Format ohne Makros. Vergeben Sie einen sprechenden, eindeutigen Dateinamen mit passender Endung und ohne Pfadangaben, zum Beispiel
stundennachweis-2026-09.pdf. - Kodieren. Erzeugen Sie den Base64-Text ohne Zeilenumbrüche, etwa mit einem der folgenden Befehle.
- BG-24 einfügen. Setzen Sie den Block an die oben gezeigte Stelle. Als BT-122 eignet sich eine Kennung, auf die Sie im Rechnungstext verweisen, als BT-123 eine kurze Beschreibung.
- Größe prüfen. Vergleichen Sie die Größe der fertigen XML-Datei mit der Grenze Ihres Übertragungswegs.
- Validieren. Lassen Sie die Datei vor dem Versand prüfen, zum Beispiel mit dem Viewer unter XRechnung prüfen. BR-52, BR-CL-24 und BR-DE-22 fallen dabei auf. Bewahren Sie den Prüfbericht auf.
- Versenden und archivieren. Die Anlage ist Teil der XML-Datei. Archivieren Sie die XML unverändert im Original, wie es der Beitrag E-Rechnung archivieren beschreibt.
# Linux (GNU coreutils), ohne Zeilenumbrüche
base64 -w 0 stundennachweis-2026-09.pdf > stundennachweis.b64
# macOS (bricht ohne Option -b nicht um)
base64 -i stundennachweis-2026-09.pdf -o stundennachweis.b64
# Windows PowerShell
[Convert]::ToBase64String([IO.File]::ReadAllBytes("$PWD\stundennachweis-2026-09.pdf")) | Set-Content -NoNewline stundennachweis.b64
In Programmen genügt jeweils eine Zeile:
import base64, pathlib
b64 = base64.b64encode(pathlib.Path("stundennachweis-2026-09.pdf").read_bytes()).decode("ascii")
const b64 = require("fs").readFileSync("stundennachweis-2026-09.pdf").toString("base64");
String b64 = Base64.getEncoder().encodeToString(Files.readAllBytes(Path.of("stundennachweis-2026-09.pdf")));
Unser XRechnung Generator erzeugt die Rechnungsdaten als UBL oder ZUGFeRD, bettet aber keine Anlagen ein. Den BG-24-Block ergänzen Sie in Ihrer Rechnungssoftware oder per Skript; in der UBL-Ausgabe gehört er direkt hinter cbc:BuyerReference.
Wie lese ich Anhänge aus einer XRechnung aus?
Zum Sichten öffnen Sie die Datei im XML Viewer, der ebenfalls im Browser läuft. Im Baum sehen Sie jede Anlage mit Kennung, Beschreibung, MIME-Code und Dateiname. Zum Speichern der Dateien genügt ein kurzes Skript, das beide Syntaxen versteht:
import base64, pathlib, sys
import xml.etree.ElementTree as ET
TAGS = {
"{urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}EmbeddedDocumentBinaryObject",
"{urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:100}AttachmentBinaryObject",
}
for el in ET.parse(sys.argv[1]).iter():
if el.tag in TAGS:
name = pathlib.Path(el.get("filename") or "anhang.bin").name
data = base64.b64decode("".join((el.text or "").split()), validate=True)
pathlib.Path(name).write_bytes(data)
print(f"{name}: {el.get('mimeCode')}, {len(data)} Bytes")
Das Skript entfernt Leerraum, bevor es dekodiert, und bricht bei ungültigem Base64 ab. Path(...).name verwirft Pfadanteile im Attribut filename, damit eine manipulierte Rechnung mit einem Namen wie ../../datei nichts außerhalb des Arbeitsordners schreibt. Die herausgelösten Dateien sind Arbeitskopien; das Original bleibt die unveränderte XML-Datei.
Wie funktionieren Anhänge bei ZUGFeRD?
ZUGFeRD verwendet im XML-Teil dieselbe CII-Syntax. Ergänzende Unterlagen können deshalb, je nach Profil, genauso als ram:AdditionalReferencedDocument mit ram:AttachmentBinaryObject im XML stehen. Daneben ist eine ZUGFeRD-Rechnung ein PDF/A-3, das technisch weitere Dateien einbetten kann. Für die Umsatzsteuer zählt nach dem BMF-Schreiben vom 15.10.2025 der strukturierte XML-Teil; weicht die PDF-Ansicht davon ab, gilt das XML. Ob ein Empfänger zusätzliche Dateien im PDF-Container automatisch verarbeitet, hängt von seiner Software ab. Die Einbettung im XML ist deshalb der eindeutigere Weg, und wer ZUGFeRD im Profil XRECHNUNG an Bundesbehörden schickt, hält sich an die Anlagenregeln der OZG-RE.
Welche Dateien ein ZUGFeRD-PDF enthält, zeigt unser Werkzeug ZUGFeRD auslesen: Es holt die Rechnungs-XML heraus und listet die Namen weiterer eingebetteter Dateien auf. Die extrahierte XML können Sie anschließend im Viewer prüfen. Wie sich die beiden Formate grundsätzlich unterscheiden, erklärt der Vergleich Unterschied XRechnung ZUGFeRD, Profile und Versionen der Beitrag ZUGFeRD-Rechnung.
Tools zu diesem Artikel
- Base64 EncoderBase64, URL, HTML-Entitäten, JWT-Tokens und Hex sofort kodieren/dekodieren.Tool öffnen →
- XRechnung ViewerDeutsche E-Rechnungen parsen, validieren & reparieren mit GoBD-konformem Audit-Trail.Tool öffnen →
- XML ViewerBeliebiges XML einfügen oder hochladen — Baumansicht, Syntaxhervorhebung, XPath-Abfragen.Tool öffnen →
- E-Rechnungs-GeneratorKonforme XRechnung-XML und ZUGFeRD-Hybrid-PDF-Rechnungen sofort erstellen.Tool öffnen →
Häufige Fragen
Kann man an eine XRechnung ein PDF anhängen?
Ja. Das PDF wird nicht separat verschickt, sondern Base64-kodiert in die XML-Datei eingebettet: in der Gruppe BG-24 mit einer Kennung (BT-122), dem MIME-Code application/pdf und einem eindeutigen Dateinamen. In UBL steht es in cac:AdditionalDocumentReference, in CII in ram:AdditionalReferencedDocument. Das PDF darf die Rechnung nur ergänzen; alle umsatzsteuerlichen Pflichtangaben müssen im XML selbst stehen.
Welche Dateiformate sind als Anhang einer XRechnung erlaubt?
Erlaubt sind PDF, PNG, JPEG, CSV, Excel-Tabellen (XLSX) und OpenDocument-Tabellen (ODS). XML-Dateien, etwa GAEB-Daten im Bauwesen, sind nur mit der Extension XRechnung zulässig (Regel BR-DEX-01). Word-Dokumente, ZIP-Archive oder E-Mail-Dateien weist der Validator mit BR-CL-24 zurück. Wandeln Sie solche Unterlagen vor dem Einbetten in ein PDF um; aktive Inhalte wie Makros schließt die Bundesplattform ausdrücklich aus.
Wie groß darf eine XRechnung mit Anhängen sein?
Die EN 16931 setzt keine Grenze, die Übertragungswege schon. Die FAQ der Bundesplattform OZG-RE nennt unter anderem 10 MB für die Rechnung per E-Mail, 11 MB in der Weberfassung, 15 MB für eingebettete Anlagen und 100 MB über Peppol, außerdem höchstens 200 eingebettete Dokumente. Rechnen Sie den Base64-Aufschlag von rund 33 Prozent ein und prüfen Sie die aktuellen Werte vor dem Versand.
Reicht ein Link auf die Anlage statt einer eingebetteten Datei?
Für umsatzsteuerliche Pflichtangaben nie: Laut BMF-Schreiben vom 15.10.2025 erfüllt ein Link auf ein externes Ziel die Anforderungen an eine E-Rechnung nicht, die Angaben gehören ins XML. Für ergänzende Unterlagen ist ein Verweis in BT-124 technisch möglich. Stimmen Sie das vorher mit dem Empfänger ab; kann die Stelle den Link nicht öffnen, kann die OZG-RE-Rechnung mangels Prüfbarkeit zurückgewiesen werden.
Wie bekomme ich einen Anhang aus einer XRechnung wieder heraus?
Suchen Sie in UBL das Element cbc:EmbeddedDocumentBinaryObject, in CII ram:AttachmentBinaryObject. Der Inhalt ist der Base64-Text der Datei, das Attribut filename liefert den Namen und mimeCode den Typ. Dekodieren Sie den Text mit der Base64-Funktion Ihrer Programmiersprache und speichern Sie die Bytes als Datei. Die Original-XML bleibt dabei unverändert im Archiv.