Woraus das Dokument laut eigener Angabe besteht

Geben Sie dem Dokument Lesereihenfolge und Gestalt — Überschriften, Absätze, Abbildungen —, damit ein Programm es so vorliest, wie ein Mensch es läse.

In einem echten PDF ansehen

Eine Liste, deren Bilder ebenfalls sprechen

Eine Teileliste, deren erste Spalte ein Bild statt eines Wortes ist. Jedes Bild trägt den Satz, den jemand an seiner Stelle hört, sodass in der Liste nichts für einen Leser verloren geht, der sie nicht sehen kann. Auf der Seite sind die Bilder einfach Bilder.

Das PDF öffnen Das vollständige Beispiel ansehen

Auch zu sehen in: Ein Dokument, das sich vorlesen lässt · Eine Zahl, die sagt, welche Überschriften sie erreichen · Eine getaggte Hinterlegungsurkunde in PDF/A-1a

Zusammenfassung

Farbe auf einer Seite hat keine eigene Reihenfolge. Ein Mensch sieht, dass die großen Wörter oben eine Überschrift sind und dass die zwei Spalten nacheinander gelesen werden, aber ein Programm sieht nur Markierungen an Koordinaten, in der Reihenfolge, in der sie gezeichnet wurden. Einmal aufgeschrieben, lässt sich ein Dokument richtig vorlesen, ohne Durcheinander kopieren und auf einem kleinen Bildschirm neu umbrechen. Sie können auch angeben, dass eine Passage in einer anderen Sprache steht, damit sie richtig ausgesprochen wird, und einem Bild einen Satz geben, der es für jemanden beschreibt, der es nicht sehen kann.

Technisch

Auf der obersten Ebene einer Anfrage geschrieben, unter "structure"

structure schreibt die /StructTreeRoot und den /StructElem-Baum darunter — woraus das Dokument nach eigener Aussage besteht, in Lesereihenfolge: die Elemente, die den markierten Inhalt tragen, den die Elemente im Inhaltsstream hinterlassen haben. Ein Element eröffnet markierten Inhalt mit tag und mark; der Baum beansprucht ihn dann über seine /MCID, und das verbindet die Farbe auf der Seite mit der Bedeutung. Fehlt es, sagt die Datei nichts über sich selbst, und die Anzeigesoftware liest sie in der Reihenfolge, in der die Farbe aufgetragen wurde. lang ist die Sprache, in der die Wörter geschrieben sind, als BCP-47-Tag, und ein Knoten gibt seine eigene an, wo eine Passage in einer anderen steht. roles erlaubt der Anfrage eigene Tags, von denen jedes über /RoleMap als eines gelesen wird, das die Norm nennt. Ein Knoten enthält entweder Kindelemente, beansprucht markierten Inhalt über content oder erreicht einen anderswo gebauten Zweig.

Anfrageschema

  • structure — Objekt, optional. Fehlt es, sagt die Datei nichts über sich selbst.
  • structure.lang — Zeichenkette, optional, ein BCP-47-Tag. Die Sprache, in der die Wörter des Dokuments geschrieben sind.
  • structure.roles — Array, optional. Eigene Tags der Anfrage, jedes ein Objekt aus tag und standard, dem Standard-Tag, als das es gelesen wird.
  • structure.children — Array, optional. Die Elemente an der Spitze des Baums, in Lesereihenfolge.
  • Ein Knoten nennt entweder branch, den Namen eines anderswo gebauten Zweigs, und sonst gar nichts; oder tag, den Namen der Norm für das, was er ist (Document, Sect, H1, P, Figure), und dann children, andere Knoten, oder content, die Bezeichnung des markierten Inhalts, den ein Element hinterlassen hat, eines von beiden und nie beide. Ein Knoten, der weder ein Tag noch einen Zweig nennt, wird abgelehnt.
  • Ein Knoten nimmt außerdem namespace an, lang für eine Passage in einer anderen Sprache, alt, einen Satz, der beschreibt, was man nicht sehen kann, und actual_text, was eine Passage tatsächlich sagt, wenn ihre gezeichnete Form es nicht buchstabiert.
  • Ein Knoten nimmt außerdem expansion an, die ausgeschriebenen Wörter, für die eine Abkürzung oder ein Akronym steht und die die Anzeigesoftware anstelle der Buchstaben ausspricht.
  • Ein Knoten nimmt außerdem list_numbering am Knoten einer Liste an, einer der Werte none, unordered, description, disc, circle, square, ordered, decimal, upper_roman, lower_roman, upper_alpha und lower_alpha. Eine Liste in einer Liste, die ein Schema angibt, wird ohne eigene Angabe so nummeriert wie die äußere.
  • Ein Knoten nimmt außerdem placement an, wo das Element im Fluss seiner Seite steht, einer der Werte block, inline, before, start und end. Fehlt es, ist das Element ein Block oder steht in seiner Zeile, je nach seinem Tag. Nichts auf der Seite verschiebt sich dafür: Es sagt einer Software, die das Dokument neu umbricht, wohin sie das Element zurücksetzen soll.
  • structure.namespace_roles — Array, optional. Tags eines Namensraums, die als Tags eines anderen gelesen werden, jedes ein Objekt aus namespace, tag, standard und target_namespace: Das tag von namespace wird als standard von target_namespace gelesen. So können zwei Namensräume einen Namen für verschiedene Dinge verwenden. PDF 2.0.
  • structure.pronunciation_lexicons — Array von Zeichenketten, optional. Der name von Dateien unter den attachments, jede ein Aussprachelexikon im W3C-Format, mit dem die Anzeigesoftware die Wörter des Dokuments ausspricht, wobei der erste Treffer gewinnt. Ein Name, den kein Anhang deklariert, wird abgelehnt.
  • Ein Knoten nimmt außerdem aria_role an, wofür das Element da ist, wo die Tags der Norm kein Wort dafür haben, als Rolle von WAI-ARIA 1.1 oder seines Moduls Digital Publishing, so geschrieben, wie das Vokabular es schreibt: doc-bibliography, doc-noteref, "alertdialog". "none" wird als "presentation" gelesen. Ein Wort, das das Vokabular nicht enthält, oder eine seiner abstrakten Rollen wird abgelehnt.
  • Ein Knoten nimmt außerdem phoneme an, wie sein Inhalt ausgesprochen wird, in einem phonetischen Alphabet geschrieben, und phonetic_alphabet, dieses Alphabet, das die darin verschachtelten Knoten übernehmen, wenn sie keines angeben: ipa, x_sampa, pinyin, wade_giles oder {"other": name} für eines, das die Norm nicht nennt. Fehlt es, nimmt die Anzeigesoftware das IPA.
  • Ein Knoten einer Liste nimmt außerdem continues_list an, die frühere Liste, die er fortsetzt: "preceding", die Liste davor im Baum, oder {"from": id}, die Liste mit der angegebenen id. Eine id, die kein Knoten trägt, wird abgelehnt.
  • Ein "Form"-Knoten, der ein gedrucktes Formularfeld umschließt, nimmt außerdem print_field an, ein Objekt aus role (radio_button, check_box, push_button, text_value oder list_box), checked (on, off oder neutral) und description, dem alternativen Namen des Feldes, wobei jedes nur geschrieben wird, wo es angegeben ist.
  • Ein "Artifact"-Knoten nimmt außerdem artifact an, was das von ihm umschlossene Beiwerk ist: ein Objekt aus kind (pagination, layout, page oder inline), subtype, so geschrieben, wie die Datei es enthält (Header, Footer, Watermark, PageNum, Bates, LineNum, Redaction oder ein eigener Name nach ISO 32000-2 Anhang E wie ACME_Stamp), und bbox, dem Kasten, den es abdeckt, vier Kanten in Punkt der Seite, jeweils nur geschrieben, wo angegeben. Jeder andere Untertyp wird abgelehnt.
  • Ein Knoten nimmt außerdem refers_to an, die id der Knoten, auf die er verweist — eine Anmerkung auf das, was sie kommentiert, eine Bildunterschrift auf das, was sie beschriftet. Eine id, die kein Knoten trägt, wird abgelehnt.
  • Ein Knoten nimmt außerdem attributes an, die Attributobjekte, die er angibt: was sein Aussehen bedeutet, etwa der Kasten, den eine Abbildung abdeckt, die Ausrichtung einer Zelle oder die Stärke eines Rahmens. Jedes ist ein Objekt aus owner, dem Namen, den die Norm der Familie gibt, zu der es gehört (Layout, List, PrintField, Table, UserProperties), oder einem eigenen Namen, oder stattdessen namespace, der Adresse eines eigenen Vokabulars, in PDF 2.0; entries, jeder Wert unter seinem Namen; und optional revision, die Revision des Elements, an das es gebunden ist. Ein Wert ist true oder false, eine Zahl, eine Zeichenkette, ein Array von Werten, {"name": "Center"} für einen Namen oder {"dictionary": {…}} für unter Namen gruppierte Werte. Ein Objekt, das sowohl owner als auch namespace angibt oder keines von beiden, wird abgelehnt.
  • structure.class_map — Array, optional. Attributobjekte, einmal unter einem Namen abgelegt, jede Klasse ein Objekt aus name und attributes, geschrieben wie ein Knoten sie schreibt. Ein Knoten nimmt außerdem classes an, die Klassen, zu denen er gehört, jede ein Objekt aus name und optional revision, und übernimmt deren Attributobjekte als seine eigenen.
  • Eine Knoten für Knoten angegebene Tabellenzelle, ein "TH" oder ein "TD", nimmt außerdem scope an (row, column oder both, bei einem "TH"), col_span und row_span, die Spalten und Zeilen, die sie abdeckt, sich selbst mitgezählt, und headers, die id der Kopfzellen, unter denen sie steht.
  • Ein Knoten mit children oder content nimmt außerdem annotations an, die mark, die ein link-Element oder ein Formularfeld trägt, sodass das Element diesen Link oder dieses Feld enthält und der Link zu ihm zurückführt: Das schuldet ein Dokument, das pdfua1 oder pdfua2 beansprucht, jedem Link und jedem Feld. Eine Optionsgruppe legt pro Schaltfläche einen Eintrag unter ihrer Markierung ab.
  • Ein Knoten nimmt außerdem imported_runs an, die Abschnitte einer Seite, die ein pdf_page-Element hereinbringt: {"page": label, "runs": [0, 1]}, die own_runs-Bezeichnung dieses Elements und die Nummern, die sein eigenes Dokument den Abschnitten gegeben hat. annotations und imported_runs werden bei einem Knoten abgelehnt, dessen content mehrere Abschnitte nennt.
  • Ein zeichnendes Element, dessen Abschnitt kein Element des Baums besitzt, nimmt described an, was der Abschnitt über sich selbst sagt: ein Objekt aus expansion, actual_text, alt und lang, mindestens eines angegeben. Neben tag oder artifact und innerhalb einer benannten Zeichnung wird es abgelehnt.

Geltungsbereich: das ganze Dokument. Daran wird accessible gemessen; für sich allein kostet es nichts und wird schlicht von dem gelesen, der die Reihenfolge und die Bedeutung statt der Koordinaten will.

Eine vollständige Anfrage, die ein PDF erzeugt

{
  "standard_fonts": [{ "name": "sans", "face": "helvetica" }],
  "structure": {
    "lang": "en-GB",
    "children": [
      {
        "tag": "Document",
        "children": [
          { "tag": "H1", "content": "heading" },
          { "tag": "P", "content": "opening" },
          {
            "tag": "L",
            "list_numbering": "decimal",
            "children": [
              {
                "tag": "LI",
                "children": [
                  { "tag": "Lbl", "content": "label" },
                  {
                    "tag": "LBody",
                    "children": [
                      {
                        "tag": "Span",
                        "expansion": "kilogramme",
                        "content": "unit"
                      },
                      {
                        "tag": "Span",
                        "placement": "inline",
                        "content": "rest"
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  },
  "items": [
    {
      "type": "text",
      "rect": { "llx": 72, "lly": 720, "urx": 523, "ury": 760 },
      "content": ["What this document is"],
      "font": "sans",
      "font_size": 20,
      "tag": "H1",
      "mark": "heading"
    },
    {
      "type": "text",
      "rect": { "llx": 72, "lly": 660, "urx": 523, "ury": 710 },
      "content": ["It is read in the order the tree gives, not the order of the ink."],
      "font": "sans",
      "font_size": 11,
      "tag": "P",
      "mark": "opening"
    },
    {
      "type": "text",
      "rect": { "llx": 72, "lly": 620, "urx": 96, "ury": 646 },
      "content": ["1."],
      "font": "sans",
      "font_size": 11,
      "tag": "Lbl",
      "mark": "label"
    },
    {
      "type": "text",
      "rect": { "llx": 100, "lly": 620, "urx": 112, "ury": 646 },
      "content": ["kg"],
      "font": "sans",
      "font_size": 11,
      "tag": "Span",
      "mark": "unit"
    },
    {
      "type": "text",
      "rect": { "llx": 115, "lly": 620, "urx": 523, "ury": 646 },
      "content": ["of paper per ream"],
      "font": "sans",
      "font_size": 11,
      "tag": "Span",
      "mark": "rest"
    }
  ]
}

Die Zeile, die es sendet, in drei Sprachen

Sich darin zurechtfinden

Die Reihenfolge, in der ein Feld zum nächsten führt Was eine Seite beim Öffnen und Verlassen auslöst Was das Dokument beim Schließen, Speichern, Drucken ausführt Die Skripte, die das Dokument unter Namen registriert Das anklickbare Inhaltsverzeichnis an der Seite Zielorte mit Namen Einem Artikel Spalte für Spalte folgen Wie das Dokument sich öffnet und druckt

Wohin als Nächstes

Jeder JSON-Schlüssel einer Anfrage, auf einer Seite Die übrigen einundvierzig Einstellungen einer Anfrage

Die Preise ansehen Die Beispiele ansehen