Ce dont le document dit être fait
Donnez au document un ordre de lecture et une forme, pour qu’un programme le lise à voix haute dans l’ordre où une personne le lirait.
Le résultat dans un vrai PDF
Une liste dont les images parlent aussi
Une liste de pièces dont la première colonne est une image plutôt qu’un mot. Chaque image donne la phrase qu’on entend à sa place, si bien que rien de cette liste n’échappe à qui ne la voit pas. Sur la page, les images restent de simples images.
Ouvrir le PDF Voir l’exemple complet
Également dans les exemples : Un document qui se lit à voix haute · Un montant qui dit de quels titres il dépend · Acte de dépôt balisé en PDF/A-1a
Résumé
L’encre sur une page n’a pas d’ordre à elle. Une personne voit que les mots en gros caractères du haut sont un titre et que les deux colonnes se lisent l’une après l’autre, mais un programme ne voit que des marques posées à des coordonnées, dans l’ordre où elles ont été dessinées. Une fois que c’est écrit, un document se lit correctement à voix haute, se copie sans se mélanger, et se réagence sur un petit écran. On peut aussi dire qu’un passage est dans une autre langue, pour qu’il soit prononcé comme il faut, et donner à une image une phrase qui la décrit pour quelqu’un qui ne la voit pas.
Techniquement
Écrit au premier niveau d’une requête, sous
"structure"
structure écrit le /StructTreeRoot et l’arbre de /StructElem en dessous — ce dont le document dit être fait, dans l’ordre de lecture : les éléments de structure qui contiennent le contenu marqué que les éléments ont laissé dans le flux de contenu. Un élément ouvre un contenu marqué avec tag et mark ; l’arbre le revendique ensuite par son /MCID, et c’est ce qui lie l’encre au sens. Absent, le fichier ne dit rien de lui-même et le logiciel de lecture le lit dans l’ordre où l’encre a été déposée. lang est la langue dans laquelle les mots sont écrits, sous forme d’étiquette BCP 47, et un nœud déclare la sienne quand un passage est écrit dans une autre. roles permet à la requête d’employer ses propres balises, chacune rattachée par /RoleMap à une balise que la norme nomme. Un nœud soit contient des enfants, soit réclame du contenu marqué par content, soit atteint une branche construite ailleurs.
Schéma de la requête
-
structure— objet, facultatif. Absent, le fichier ne dit rien de lui-même. -
structure.lang— chaîne, facultative, une étiquette BCP 47. La langue dans laquelle les mots du document sont écrits. -
structure.roles— tableau, facultatif. Des balises propres à la requête, chacune un objet fait detaget destandard, la balise de la norme à laquelle elle équivaut. -
structure.children— tableau, facultatif. Les éléments au premier niveau de l’arbre, dans l’ordre de lecture. -
Un nœud nomme soit
branch, le nom d’une branche construite ailleurs, et rien d’autre du tout ; soittag, le nom que la norme donne à ce qu’il est (Document,Sect,H1,P,Figure), puischildren, d’autres nœuds, oucontent, l’étiquette du contenu marqué qu’un élément a laissé derrière lui — l’un des deux, jamais les deux. Un nœud qui ne nomme ni tag ni branche est refusé. -
Un nœud prend aussi
namespace,langpour un passage dans une autre langue,alt, une phrase décrivant ce qu’on ne peut pas voir, etactual_text, ce qu’un passage dit vraiment quand son encre ne l’épelle pas. -
Un nœud prend aussi
expansion, les mots qu’une abréviation ou un sigle abrège, écrits en toutes lettres, qu’un logiciel de lecture dit à la place des lettres. -
Un nœud prend aussi
list_numberingsur le nœud d’une liste, parminone,unordered,description,disc,circle,square,ordered,decimal,upper_roman,lower_roman,upper_alphaetlower_alpha. Une liste imbriquée qui ne donne aucune numérotation prend celle de la liste qui la contient, si celle-ci en donne une. -
Un nœud prend aussi
placement, la place de l’élément dans le fil de sa page, parmiblock,inline,before,startetend. Sans lui, l’élément est un bloc ou se tient dans sa ligne, selon ce qu’est sa balise. Rien ne bouge sur la page : il dit à un logiciel qui réagence le document où remettre l’élément. -
structure.namespace_roles— tableau, facultatif. Des balises d’un espace de noms lues comme des balises d’un autre, chacune un objet denamespace,tag,standardettarget_namespace: letagdenamespacese lit commestandarddetarget_namespace. C’est ce qui permet à deux espaces de noms d’employer un même nom pour deux choses différentes. PDF 2.0. -
structure.pronunciation_lexicons— tableau de chaînes, facultatif. Lesnamede fichiers pris parmi lesattachments, chacun un lexique de prononciation au format du W3C, avec lesquels le logiciel de lecture prononce les mots du document, la première correspondance l’emportant. Un nom qu’aucune pièce jointe ne déclare est refusé. -
Un nœud prend aussi
aria_role, ce à quoi sert l’élément là où les balises de la norme n’ont pas de mot pour le dire, sous la forme d’un rôle de WAI-ARIA 1.1 ou de son module Digital Publishing, écrit comme l’écrit ce vocabulaire :doc-bibliography,doc-noteref,"alertdialog"."none"se lit comme"presentation". Un mot que le vocabulaire ne contient pas, ou l’un de ses rôles abstraits, est refusé. -
Un nœud prend aussi
phoneme, la façon dont son contenu se prononce, écrite dans un alphabet phonétique, etphonetic_alphabet, cet alphabet, que reprennent les nœuds qu’il contient quand ils n’en donnent aucun :ipa,x_sampa,pinyin,wade_giles, ou{"other": name}pour un alphabet que la norme ne nomme pas. Absent, le logiciel de lecture prend l’alphabet phonétique international. -
Le nœud d’une liste prend aussi
continues_list, la liste antérieure qu’il poursuit :"preceding", la liste qui le précède dans l’arbre, ou{"from": id}, la liste dont l’idest donné. Unidqu’aucun nœud n’a est refusé. -
Un nœud
"Form"qui entoure un champ de formulaire imprimé prend aussiprint_field, un objet derole(radio_button,check_box,push_button,text_valueoulist_box),checked(on,offouneutral) etdescription, le nom de remplacement du champ, chacun écrit seulement là où il est donné. -
Un nœud
"Artifact"accepte aussiartifact, qui décrit l’habillage qu’il entoure. Cet objet contient :kind(pagination,layout,pageouinline) ;subtype, écrit comme dans le fichier (Header,Footer,Watermark,PageNum,Bates,LineNum,Redaction, ou un nom personnalisé conforme à l’annexe E de l’ISO 32000-2, commeACME_Stamp) ; etbbox, la zone couverte, donnée par ses quatre bords en points dans le repère de la page. Chacune de ces trois clés n’est écrite que si elle est donnée. Tout autre sous-type est refusé. -
Un nœud prend aussi
refers_to, l’iddes nœuds auxquels il renvoie — une note à ce qu’elle commente, une légende à ce qu’elle légende. Unidqu’aucun nœud n’a est refusé. -
Un nœud prend aussi
attributes, les objets d’attributs qu’il déclare pour dire ce que signifie son apparence, comme le cadre qu’occupe une figure, l’alignement d’une cellule ou l’épaisseur d’une bordure. Chacun est un objet deowner(ounamespace),entriesetrevision:owner, le nom que la norme donne à la famille dont il relève (Layout,List,PrintField,Table,UserProperties) ou un nom choisi librement ;namespace, à sa place en PDF 2.0, l’adresse d’un vocabulaire propre ;entries, chaque valeur sous son nom ;revision, facultatif, la révision de l’élément auquel l’objet se rattache. Une valeur esttrueoufalse, un nombre, une chaîne, un tableau de valeurs,{"name": "Center"}pour un nom ou{"dictionary": {…}}pour des valeurs rangées chacune sous son nom. Un objet qui déclare à la foisowneretnamespace, ou ni l’un ni l’autre, est refusé. -
structure.class_map— tableau, facultatif. Les classes : des objets d’attributs rangés une fois pour toutes sous un nom. Chaque classe est un objet denameetattributes, ce dernier écrit comme celui d’un nœud. Un nœud prend aussiclasses, les classes auxquelles il appartient, chacune un objet denameetrevision, ce dernier facultatif ; les objets d’attributs de ces classes comptent comme les siens. -
Une cellule d’un tableau décrit nœud par nœud, un
"TH"ou un"TD", prend aussiscope(row,columnouboth, sur un"TH"),col_spanetrow_span, les colonnes et les rangées qu’elle couvre, la sienne comprise, etheaders, l’iddes cellules d’en-tête sous lesquelles elle se trouve. -
Un nœud qui contient
childrenoucontentprend aussiannotations, lemarkd’un élémentlinkou un champ de formulaire, si bien que l’élément contient ce lien ou ce champ, et que le lien renvoie à lui : ce qu’un document revendiquantpdfua1oupdfua2doit à chaque lien et à chaque champ. Un groupe de boutons radio range une entrée par bouton sous son étiquette. -
Un nœud prend aussi
imported_runs, les passages d’une page reprise par un élémentpdf_page:{"page": label, "runs": [0, 1]}, l’étiquetteown_runsde cet élément et les numéros que son document d’origine a donnés aux passages.annotationsetimported_runssont refusés sur un nœud dont lecontentnomme plusieurs passages. -
Un élément qui dessine, là où aucun élément de l’arbre ne possède son passage, prend
described, ce que le passage dit de lui-même : un objet deexpansion,actual_text,altetlang, l’un au moins donné. Il est refusé à côté detagou d’artifact, et dans un dessin nommé.
Portée : le document entier. C’est à son aune qu'accessible est jugée ; seule, elle ne coûte rien, et quiconque veut l’ordre et le sens plutôt que les coordonnées peut simplement la lire.
Une requête entière qui crée un PDF
{
"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"
}
]
}
S’y retrouver
L’ordre du passage d’un champ au suivant Ce qu’une page déclenche à l’arrivée et au départ Fermer, enregistrer, imprimer : ce qu’exécute le document Les scripts que le document enregistre sous un nom Le sommaire cliquable sur le côté Des points d’arrivée qui ont un nom Suivre un article de colonne en colonne Comment le document s’ouvre et s’imprime
Où aller ensuite
Toutes les clés JSON d’une requête, en une page Les quarante et un autres réglages d’une requête