write_checked_invoice.json

Die JSON-Datei des Beispiels „Eine Rechnung, die fragt, bevor sie fordert“. Die Bibliothek liest die Rechnung, wie sie ist, und nennt Klausel für Klausel alles, was zwischen ihr und Factur-X steht. Zwei Dinge stehen im Weg, dann eines, dann keines — und erst dann wird eine Datei geschrieben.

JSON 106 Zeilen

Diese Datei ist eine Anfrage: Eine Anwendung sendet sie über das Netz an den Server, der das PDF erzeugt und zurücksendet. Sie erzeugt dieselbe Seite wie die Rust- und die Python-Fassung dieses Beispiels. Eine Anfrage nennt jede Datei, die sie verwendet, nie ihren Inhalt; der Aufruf trägt die Anfrage und die Dateien zusammen. Eine Schrift, die der Server bereits vorhält, etwa DejaVuSans, wird ohne Anhang genannt. Senden Sie die Anfrage an die Adresse, die die API-Seite angibt.

Diese Anfrage nennt Dateien, die sie nicht trägt: invoice_xml. Jede davon reist neben der Anfrage, im selben Aufruf, als mitgelieferter Teil, genau so benannt, wie die Anfrage sie hier nennt — die Beschreibung sagt, welcher Name welche Rolle spielt, Sie benennen Ihre Dateien also, wie Sie möchten. Eine Anfrage, die eine Datei nennt, von der der Aufruf nichts trägt, wird abgelehnt.

Wofür dieses Beispiel da ist

Jedes andere Dokument hier erreicht eine Norm, indem es sie erklärt: Die Datei sagt, sie sei Factur-X, und wird als Factur-X geschrieben. Erklären ist leicht; richtig sein nicht. Ein Dokument kann eine Rechnung nennen, die es nie angehängt hat, einen Detaillierungsgrad beanspruchen, dem das XML darin nicht folgt, und in einem Container stecken, den die Norm nicht erlaubt — und mit allen dreien hinausgehen, um von der Buchhaltung, an die es geschickt wurde, abgelehnt zurückzukommen.

Was dieses Beispiel zeigt

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
{
  "items": [
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 760.0,
        "urx": 520.0,
        "ury": 779.2
      },
      "content": [
        "Invoice No. 2026-0207"
      ],
      "font": "DejaVuSans",
      "font_size": 16.0
    },
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 728.0,
        "urx": 520.0,
        "ury": 740.0
      },
      "content": [
        "Issued by HQF Development"
      ],
      "font": "DejaVuSans",
      "font_size": 10.0
    },
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 708.0,
        "urx": 520.0,
        "ury": 721.2
      },
      "content": [
        "Issued 14 July 2026 — due within 30 days"
      ],
      "font": "DejaVuSans",
      "font_size": 11.0
    },
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 686.0,
        "urx": 520.0,
        "ury": 699.2
      },
      "content": [
        "Rendering engine licence ................... 12 400.00 EUR"
      ],
      "font": "DejaVuSans",
      "font_size": 11.0
    },
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 664.0,
        "urx": 520.0,
        "ury": 677.2
      },
      "content": [
        "VAT at 20 % ................................. 2 480.00 EUR"
      ],
      "font": "DejaVuSans",
      "font_size": 11.0
    },
    {
      "type": "text",
      "rect": {
        "llx": 72.0,
        "lly": 642.0,
        "urx": 520.0,
        "ury": 656.4
      },
      "content": [
        "Total due .................................. 14 880.00 EUR"
      ],
      "font": "DejaVuSans",
      "font_size": 12.0
    }
  ],
  "metadata": {
    "title": "Invoice No. 2026-0207",
    "author": "HQF Development",
    "subject": "An electronic invoice, measured before it was claimed",
    "producer": "hqf-pdf",
    "created": "2026-07-14T09:30:00+02:00"
  },
  "archive": "pdfa3b",
  "invoice": {
    "xml": "invoice_xml",
    "profile": "BASIC",
    "version": "1.0",
    "relationship": "data",
    "issued": "2026-07-14T09:30:00+02:00"
  },
  "check": [
    "pdfa3b"
  ]
}