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:

Maksymalny rozmiar: 1024KB

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>

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/views/generator-pdf.php:9) in /var/www/html/views/partials/scripts.php on line 61