Generator faktur PDF KSeF
Konwersja faktur XML na wizualizację PDF - API Dokumentacja
Generator faktur PDF KSeF
Prześlij plik XML z fakturą KSeF, aby wygenerować wizualizację PDF:
Instrukcja:
- Prześlij plik XML zawierający fakturę zgodną z formatem KSeF
- Plik XML zostanie przeanalizowany i wygenerowana zostanie wizualizacja PDF
- PDF będzie automatycznie pobrany po wygenerowaniu
Dokumentacja API
Endpoint API
URL:
POST https://ksef.doginvoice.com/api/generate-pdf
Content-Type:
multipart/form-data, application/xml, lub text/xml
Uwaga:
Ten endpoint nie wymaga tokenu CSRF - idealny do integracji zewnętrznych.
Parametry żądania
| Parametr | Typ | Wymagany | Opis |
|---|---|---|---|
xml_file |
file | Tak* | Plik XML z fakturą KSeF (multipart/form-data) |
xml_content |
string | Tak* | Zawartość XML jako parametr POST (application/x-www-form-urlencoded) |
| Body (raw) | XML | Tak* | XML w body żądania (Content-Type: application/xml) |
* Wymagany jeden z powyższych sposobów przesłania XML
Odpowiedź
Sukces (200 OK)
- Content-Type:
application/pdf - Body: Plik PDF z wizualizacją faktury
- Content-Disposition:
attachment; filename="faktura_NUMER.pdf"
Błędy
- 400 Bad Request - Brak pliku XML lub nieprawidłowy format
- 405 Method Not Allowed - Użyj metody POST
- 413 Payload Too Large - Plik XML przekracza maksymalny rozmiar (1024KB)
- 500 Internal Server Error - Błąd podczas generowania PDF
Przykłady użycia
cURL - Plik XML
curl -X POST https://ksef.doginvoice.com/api/generate-pdf \
-F "xml_file=@faktura.xml" \
-o faktura.pdf
cURL - Raw XML w body
curl -X POST https://ksef.doginvoice.com/api/generate-pdf \
-H "Content-Type: application/xml" \
--data-binary "@faktura.xml" \
-o faktura.pdf
JavaScript (Fetch API)
const formData = new FormData();
formData.append('xml_file', fileInput.files[0]);
fetch('https://ksef.doginvoice.com/api/generate-pdf', {
method: 'POST',
body: formData
})
.then(response => {
if (response.ok) {
return response.blob();
} else {
return response.json().then(err => Promise.reject(err));
}
})
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'faktura.pdf';
a.click();
})
.catch(error => console.error('Błąd:', error));
PHP
$xmlFile = $_FILES['xml_file'];
$ch = curl_init('https://ksef.doginvoice.com/api/generate-pdf');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
'xml_file' => new CURLFile($xmlFile['tmp_name'], $xmlFile['type'], $xmlFile['name'])
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$pdfContent = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
file_put_contents('faktura.pdf', $pdfContent);
echo "PDF wygenerowany!";
} else {
$error = json_decode($pdfContent, true);
echo "Błąd: " . ($error['error'] ?? 'Nieznany błąd');
}
Python
import requests
with open('faktura.xml', 'rb') as f:
response = requests.post(
'https://ksef.doginvoice.com/api/generate-pdf',
files={'xml_file': f}
)
if response.status_code == 200:
with open('faktura.pdf', 'wb') as pdf_file:
pdf_file.write(response.content)
print("PDF wygenerowany!")
else:
error = response.json()
print(f"Błąd: {error['error']}")
Format XML
Wymagania
Plik XML musi być zgodny z formatem FA(2) KSeF:
- Schema:
http://crd.gov.pl/wzor/2023/06/29/12648/ - System Code:
FA (2) - Schema Version:
1-0E - Variant:
2
Ograniczenia
- Maksymalny rozmiar pliku XML: 1024KB
- Obsługiwane formaty: XML zgodny ze schematem FA(2)
- PDF generowany jest bez numeru KSeF (jeśli nie jest dostępny w XML)
Przykładowa struktura XML
<?xml version="1.0" encoding="UTF-8"?>
<Faktura xmlns="http://crd.gov.pl/wzor/2023/06/29/12648/">
<Naglowek>
<KodFormularza kodSystemowy="FA (2)"
wersjaSchemy="1-0E"
wartosc="FA"
variant="2">
</KodFormularza>
<!-- ... pozostałe elementy faktury ... -->
</Naglowek>
<!-- ... zawartość faktury ... -->
</Faktura>