Konwersja XML faktur KSeF (Krajowy System e-Faktur) do PDF, przekonwertowana z kodu JavaScript do natywnego C#.
Cały projekt bazowany jest na generatorze PROFAK który jest tutaj: https://github.com/lkosson/profak/blob/master/IO/KSEFPDF/ksef-fe-invoice-converter.umd.cjs
Na ten moment brak wsparcia UPO!
- .NET 10 SDK
- Czcionka Roboto (Regular + Bold) wbudowana w bibliotekę jako EmbeddedResource — nie wymaga instalacji w systemie
dotnet build -c ReleaseWyjściowa DLL: bin/Release/net10.0/KSeF_PDF_Generator.dll
Zależności NuGet (automatycznie przywrócone):
itext7— generowanie PDFQRCoder— kod QR do weryfikacji w KSeF
using KSeF_PDF_Generator;
// Generowanie PDF jako byte[]
byte[] pdf = KsefInvoiceGenerator.GenerateInvoiceFromString(
xmlString, // string — XML faktury KSeF
nrKSeF: "abc-123", // string? — numer referencyjny KSeF (opcjonalny)
ksefHash: "hash==" // string? — hash do URL weryfikacji w QR (opcjonalny)
);
File.WriteAllBytes("faktura.pdf", pdf);- FA (1) — NIP
- FA (2) — NIP + Rejestr
- FA (3) — NIP + Rejestr + Status podatnika (domyślnie dla plików XML z atrybutem
kodSystemowy="FA (3)")
var xml = File.ReadAllText("faktura.xml");
var pdf = KsefInvoiceGenerator.GenerateInvoiceFromString(
xml,
nrKSeF: "XXXXXXXXXXXXXXXXX-XXXXXXXXX",
ksefHash: "abc123base64hash"
);
File.WriteAllBytes("faktura.pdf", pdf);- Nagłówek KSeF (tytuł, numer faktury, typ, numer KSeF)
- Dane faktury korygowanej
- Sprzedawca + Nabywca (dane identyfikacyjne + adres, układ dwukolumnowy 50/50)
- Szczegóły (daty, waluta, kurs)
- Pozycje / Wiersze faktury (tabela z dynamicznymi kolumnami)
- Rabat
- Zamówienia
- Podsumowanie stawek VAT (P_13_x / P_14_x)
- Adnotacje
- Dodatkowe informacje
- Rozliczenie faktur zaliczkowych
- Płatność (status, termin, rachunek bankowy)
- Warunki transakcji
- Stopka (Rejestry, BDO)
- Sekcja weryfikacji KSeF (kod QR + link)
URL weryfikacji budowany automatycznie z pól faktury:
https://qr.ksef.mf.gov.pl/invoice/{nip}/{data}/{hash_urlsafe}
Hash konwertowany do formatu URL-safe przez HashUtils.ToUrlSafeBase64():
- usuwa
=z końca - zamienia
+→- - zamienia
/→_
- Czcionka: Roboto zamiast domyślnej pdfmake
- PDF: iText7 zamiast pdfmake
- Parsowanie XML: XDocument (LINQ to XML) zamiast sax.js + xml2js
- Kod QR: QRCoder zamiast zewnętrznej biblioteki JS
- Układ dwukolumnowy 50/50 z sztywnym podziałem (
SetFixedLayout)
MIT