Kształt e-faktury w UE i dlaczego składa się z dwóch formatów
Współczesna e-faktura w UE to dwa dokumenty opakowane w jeden plik:
- PDF/A-3, który może przeczytać człowiek — numer faktury, pozycje, sumy, branding dostawcy. Specyfikacja PDF/A-3 (ISO 19005-3) jest jedyną odmianą PDF/A, która pozwala umieszczać dowolne załączniki plikowe wewnątrz opakowania archiwalnego.
- Załącznik EN 16931 CII XML wewnątrz tego PDF — ta sama faktura wyrażona jako dane strukturalne, które automatyzacja AP, importy ERP i systemy organów podatkowych mogą parsować bez OCR.
Factur-X (Francja) i ZUGFeRD (Niemcy) to ta sama idea pod różnymi krajowymi nazwami. Oba formaty dołączają EN 16931 Cross-Industry Invoice (CII) XML do opakowania PDF/A-3. ZUGFeRD jest obowiązkowy przy odbiorze niemieckich faktur B2B od 2025 r.; Factur-X wchodzi etapowo jako obowiązkowy format wystawiania B2B we Francji w latach 2026-2027.
Jeśli w 2026 r. wysyłasz faktury do klientów francuskich albo niemieckich, jeden z tych dwóch formatów przestaje być opcjonalny.
Dlaczego generowanie od zera jest trudne — i dlaczego gPdf robi to jednym endpointem
Złożenie tego od podstaw obejmuje:
- Wygenerowanie bajtów PDF: skład, fonty i układ.
- Osobne wygenerowanie CII XML zgodnego z EN 16931.
- Poprawne ustawienie przestrzeni nazw XMP PDF/A-3 (
urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#dla Factur-X; przestrzeń nazw ZUGFeRD 2.x jest inna). - Osadzenie XML z
AFRelationship="Alternative"zgodnie ze specyfikacją. - Poprawne oznaczenie osadzonego pliku w tablicy
/AFPDF/A-3. - Sprawdzenie wyniku przez veraPDF (warstwa PDF/A) ORAZ Mustang (warstwa CII XML) — oba muszą przejść.
Typowy zespół myli się w tym dwa razy, zanim wynik przejdzie oba silniki. API
gPdf zamyka wszystkie sześć kroków w jednym wywołaniu
POST /api/v1/e-invoice/render. Dostarczasz:
settings.e_invoice.standard—factur_xalbozugferdsettings.e_invoice.xml.content— Twój CII XMLpages[]— widoczny układ faktury- cała reszta jest emitowana automatycznie z poprawnymi metadanymi PDF/A-3.
Zobacz §5 dokumentacji E-Invoice API, aby poznać pełny
schemat żądania, tryby walidacji (basic kontra strict) i cykl życia zadań
asynchronicznych dla ścisłych kontroli.
Weryfikowanie wyniku — wzorzec audytowy
Deklaracja dostawcy “tak, nasz PDF przechodzi PDF/A-3” nie ma wartości, jeśli audytor używa silników referencyjnych. Wzorzec audytowy wygląda tak:
- Wygeneruj e-fakturę przez
POST /api/v1/e-invoice/render. - Prześlij wynikowy PDF do validator — uruchamia:
- veraPDF: oficjalną implementację referencyjną utrzymywaną przez PDF Association. Zgodność PDF/A-3.
- Mustang: niemiecki projekt open source (mustangproject.org), faktyczny referencyjny kontroler Factur-X / ZUGFeRD — wyodrębnia osadzony CII XML, waliduje go względem EN 16931 Schematron i raportuje pole po polu.
- Oba raporty wracają obok siebie w tym samym UI. Oba muszą pokazać “Pass”, zanim wyślesz dokument do produkcyjnej automatyzacji AP.
Ten wzorzec ma znaczenie, ponieważ:
- PDF, który przechodzi veraPDF, ale nie przechodzi Mustang, ma zgodne opakowanie, lecz zniekształcony XML w środku — system AP odrzuca fakturę przy odbiorze.
- PDF, który przechodzi Mustang, ale nie przechodzi veraPDF, ma poprawny XML, lecz opakowanie archiwalne nie spełnia PDF/A-3 — długoterminowe archiwum go odrzuca.
- Każda z tych awarii przerywa przepływ end-to-end. Oba silniki muszą przejść.
Walidator jest bezpłatny, nie wymaga logowania i tworzy raporty JSON, które możesz dołączyć do materiału dowodowego QA. To ten sam dwusilnikowy wzorzec, którego firmy audytowe Big Four używają wewnętrznie — gPdf po prostu udostępnia go publicznie.
Poza Factur-X / ZUGFeRD
Jeśli pracujesz także z:
- FatturaPA (Włochy, obowiązkowe od 2019 r.) — już na roadmapie walidatora.
- Peppol BIS 3.0 UBL (kraje nordyckie / Benelux / coraz częściej transgranicznie) — roadmapa.
- KSeF (Polska, obowiązkowe od 2026 r.) — roadmapa.
Endpoint e-faktur gPdf rozszerzy zakres, gdy każdy format przejdzie z etapu “wczesnej roadmapy” do statusu “live w walidatorze i silniku renderowania”. Kształt pozostaje taki sam: jedno żądanie JSON, właściwa przestrzeń nazw XMP i AFRelationship obsłużone wewnętrznie, oba silniki weryfikują wynik przed wysyłką.
TL;DR
- Jedno wywołanie API → PDF/A-3 + osadzony EN 16931 CII XML.
- Wybierz Factur-X albo ZUGFeRD przez
settings.e_invoice.standard. - Zweryfikuj w validator — veraPDF + Mustang równolegle, bezpłatnie.
- Oba silniki muszą przejść. API gPdf jest zbudowane tak, aby przechodziły; walidator jest publicznym potwierdzeniem.