write_pdfa3a.json

The JSON file of the “A Tagged PDF/A-3a Schedule of Charges” example. A schedule a screen reader follows and a program reads from the table attached inside it: the third part of the archival standard at its highest level.

JSON 92 lines

This file is a request: an application sends it over the network to the server, which creates the PDF and sends it back. It creates the same page as the Rust and Python versions of this example. A request names every file it uses, never its content; the call carries the request and the files together. A font the server already holds, such as DejaVuSans, is named with nothing attached. Send the request to the address the API page gives.

This request names files it does not carry: schedule. Each one travels beside the request, in the same call, as a supplied part named exactly as the request names it here — the description says which name plays which role, so you name your files as you like. A request naming a file the call carries nothing of is refused.

What This Example Is For

A schedule of charges is read by customers, some of them through software that reads aloud, and by the billing system that applies it. Writing it twice — a page for people, a file for the system — is how the two end up quoting different prices.

What This Example Shows

 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
{
  "archive": "pdfa3a",
  "metadata": {
    "title": "Schedule of charges, second half of 2026",
    "author": "HQF Development",
    "subject": "A record that says what it is made of and carries the table behind it",
    "producer": "hqf-pdf-server",
    "created": "2026-06-08T09:20:00+02:00"
  },
  "attachments": [
    {
      "name": "schedule",
      "file_name": "schedule.csv",
      "media_type": "text/csv",
      "relationship": "data",
      "description": "The charges this page states, as a machine reads them",
      "modified": "2026-06-08T09:15:00+02:00"
    }
  ],
  "structure": {
    "lang": "en-GB",
    "children": [
      {
        "tag": "Document",
        "children": [
          {
            "tag": "Sect",
            "children": [
              {"tag": "H1", "content": "heading"},
              {"tag": "P", "content": "body"},
              {"tag": "P", "content": "charges"}
            ]
          }
        ]
      }
    ]
  },
  "items": [
    {
      "type": "flow",
      "rect": {"llx": 72, "lly": 750, "urx": 523, "ury": 782},
      "content": "Schedule of charges, second half of 2026",
      "font": "DejaVuSans",
      "font_size": 20,
      "first_baseline": {"points": 0},
      "tag": "H1",
      "mark": "heading",
      "pages": [1]
    },
    {
      "type": "flow",
      "rect": {"llx": 72, "lly": 610, "urx": 523, "ury": 730},
      "content": "This schedule claims the third part of the archival standard at its highest level. It may carry a file of any kind, and it says what it is made of: this line is a heading, the block below is a paragraph, and the rule across the foot is furniture that says nothing at all.\nSomething reading the schedule aloud follows the order the tree gives rather than the order the ink was laid down in, and the table behind the page travels inside the file for a program to take whole.",
      "font": "DejaVuSans",
      "font_size": 11,
      "leading": 16,
      "first_baseline": {"points": 0},
      "tag": "P",
      "mark": "body",
      "pages": [1]
    },
    {
      "type": "flow",
      "rect": {"llx": 72, "lly": 540, "urx": 523, "ury": 596},
      "content": "Carriage stands at 12.40 the consignment, handling at 1.85 the parcel, and storage at 0.40 the day. A charge takes effect on the day the consignment is accepted.",
      "font": "DejaVuSans",
      "font_size": 11,
      "leading": 16,
      "first_baseline": {"points": 0},
      "tag": "P",
      "mark": "charges",
      "pages": [1]
    },
    {
      "type": "rect",
      "rect": {"llx": 72, "lly": 70, "urx": 523, "ury": 71},
      "fill": [0, 0, 0],
      "artifact": "footer",
      "pages": [1]
    },
    {
      "type": "flow",
      "rect": {"llx": 72, "lly": 56, "urx": 523, "ury": 68},
      "content": "Page 1 of 1",
      "font": "DejaVuSans",
      "font_size": 9,
      "first_baseline": {"points": 0},
      "artifact": "footer",
      "pages": [1]
    }
  ]
}