Les calques que le logiciel de lecture montre ou cache
Rangez ce qui est dessiné dans des calques nommés, montrés ou cachés d'un clic, et qu'un logiciel de lecture affiche selon le grossissement ou la langue.
Résumé
Un architecte travaille avec des feuilles transparentes empilées : les murs sur l'une, les meubles sur une autre, les cotes sur une troisième. Il en soulève une pour la retirer de la vue, et ici c'est exactement le même geste. Vous pouvez aussi décider qu'une couche se voit à l'écran mais ne s'imprime pas — un filigrane de brouillon, par exemple. Et une couche peut se signaler toute seule : les cotes fines d'un plan apparaissent une fois qu'on s'est assez approché pour les lire, et une légende écrite deux fois, en deux langues, montre à chacun celle sur laquelle son programme est réglé. Les couches qui vont ensemble — les murs, la toiture et les ouvertures d'un même bâtiment — se regroupent sous un intitulé, que le panneau montre comme un seul bloc, replié d'un clic.
Techniquement
Écrit au premier niveau d'une requête, sous
"layers"
layers écrit un /OCG par calque dans /OCProperties, chacun sous le nom qu'un élément indique comme celui sur lequel il est dessiné, et enveloppe dans le flux de contenu les marques dessinées sur un calque pour que le logiciel de lecture les commute ensemble. Le logiciel de lecture les liste dans son panneau, dans l'ordre où la requête les déclare, et montre ou cache d'un coup tout ce qui est sur l'un d'eux. Un calque qui énonce un heading y est listé plutôt que seul : /Order tient alors un tableau imbriqué qui s'ouvre sur cet intitulé, se tient là où le premier calque qui l'énonce a été déclaré, et contient tous les calques qui énoncent le même intitulé. /Usage tient le reste. L'affichage à l'écran et l'impression sont séparés : leur donner des réponses opposées construit un calque qui n'est jamais que regardé, ou jamais qu'imprimé. Un calque peut aussi se montrer sans le panneau : un zoom le montre entre deux grossissements, et une language le montre au logiciel de lecture réglé sur cette langue et le cache aux calques de toutes les autres. Un calque que le panneau refuse de commuter est locked, et part tout de même là où visible le place. Quatre entrées disent ce qu'est le calque plutôt que quand il se montre : intent s'écrit à côté du nom, sur le groupe lui-même, et le jeu sous lequel le document s'ouvre porte la liste des intentions sous lesquelles il se lit ; made_by, purpose et role sont trois rubriques de plus de /Usage, la deuxième écrite à côté de l'état d'impression, dans la même entrée.
Schéma de la requête
-
layers— tableau, facultatif, vide par défaut. -
layers[].name— chaîne, obligatoire. Le nom par lequel les éléments nomment ce calque, et le nom que le logiciel de lecture montre dans son panneau. -
layers[].visible— booléen, facultatif. Si le calque démarre affiché. Absent, il démarre affiché. -
layers[].printed— booléen, facultatif. Si l'impression montre le calque, quoi que dise le panneau. Absent, l'impression suit le panneau. -
layers[].on_screen— booléen, facultatif. Si l'affichage montre le calque, quoi que dise le panneau. Absent, l'écran suit le panneau. -
layers[].locked— booléen, facultatif,falsepar défaut. Si le logiciel de lecture refuse de commuter le calque dans son panneau. Un calque verrouillé garde son entrée, qui montre l'état sous lequel il part, et part tout de même là oùvisiblele place. -
layers[].zoom— objet, facultatif. Les grossissements entre lesquels le calque se montre, quoi que dise le panneau. Absent, il se montre à tous les grossissements, et un objet qui ne nomme aucune des deux bornes est refusé. -
layers[].zoom.from— nombre, facultatif. Le grossissement à partir duquel le calque se montre, celui-là compris. Absent, il n'a pas de plancher, c'est-à-dire 0. -
layers[].zoom.to— nombre, facultatif. Le grossissement en dessous duquel le calque se montre, celui-là exclu. Absent, il n'a pas de plafond. Une paire que rien ne peut satisfaire — unfromégal ou supérieur auto, ou unfromnégatif — est refusée. -
layers[].language— chaîne, facultatif, aucune langue par défaut. Une étiquette de langue,fr-FRouen-GB. Le logiciel de lecture réglé sur cette langue montre ce calque et cache les calques de toutes les autres langues, ce qui permet à une même feuille de tenir son texte deux fois et de n'en montrer qu'un. -
layers[].preferred— booléen, facultatif,falsepar défaut. Si c'est le calque sur lequel le logiciel de lecture se rabat quand aucun calque n'énonce exactement la langue sur laquelle il est réglé. L'énoncer sanslanguageest refusé. -
layers[].heading— chaîne, facultatif, aucun intitulé par défaut. L'intitulé sous lequel le logiciel de lecture regroupe le calque dans son panneau. Tout calque déclaré sous le même intitulé est montré dessous, comme un seul bloc qu'un lecteur replie et déplie, et le bloc se tient là où le premier calque qui l'énonce a été déclaré. Un calque qui n'en énonce aucun se tient seul au premier niveau du panneau. -
layers[].intent— chaîne, facultatif,viewpar défaut. Si le calque porte du contenu du document,view, ou une aide pour qui l'a fabriqué,design: une grille, un repère, un cadre de marge. Le logiciel de lecture n'applique que les calques dont l'intention figure dans le jeu sous lequel il lit. Le jeu sous lequel un document s'ouvre ne nomme que l'intention de lecture, comme le demande la norme PDF (ISO 32000) ; un calquedesignse commute donc depuis un jeu delayer_configurations, et chacun de ces jeux nomme les deux intentions dès qu'un calque est de typedesign. -
layers[].made_by— objet, facultatif. Le programme qui a fabriqué le calque et la nature du travail qu'il tient, énoncés ensemble ; l'un sans l'autre est refusé. -
layers[].made_by.application— chaîne, obligatoire. Le programme, sous le nom qu'il se donne. -
layers[].made_by.work— chaîne, obligatoire. La nature du travail que tient le calque :artwork, le contenu d'un logiciel de graphisme ou d'édition, outechnical, le contenu d'un dessin technique, comme un plan de bâtiment ou un schéma. -
layers[].purpose— chaîne, facultatif. Ce qu'est le calque sur la feuille imprimée :watermark, une marque posée par-dessus ou par-dessous ce que la page dit ;trapping, le recouvrement dont la presse a besoin là où deux encres se touchent ; ouprinters_marks, ce que lit la presse plutôt que le lecteur. Énoncé à part deprinted: dire ce qu'est un calque ne dit rien de son impression, et un calque qui ne dit que ce qu'il est n'est commuté par aucun événement d'impression. -
layers[].role— chaîne, facultatif. Ce que le calque tient de la page :header_footer(un titre ou un bas de page courant),background(tracé derrière ce que la page dit),foreground(tracé par-dessus) oulogo. Un programme qui démonte une page le lit pour remettre ensemble ce qu'il en tire. -
Un élément se pose sur un calque par sa clé
layer, qui contient le nom déclaré ici. Un élément sanslayerest toujours là, sur toutes les couches. - Les calques demandent PDF 1.5 au moins.
-
Un document qui énonce une norme
archiverefuse un calque qui énonceprinted,on_screen,zoomoulanguage: un fichier d'archivage laisse cette décision au logiciel de lecture. Le calque lui-même passe, etlockedaussi, qui ne fait dépendre rien de ce qui est sur la page de la raison pour laquelle on la regarde.
Une requête entière qui crée un PDF
{
"layers": [
{
"name": "Dimensions",
"made_by": { "application": "Plan Studio", "work": "technical" }
},
{ "name": "Draft", "on_screen": true, "printed": false },
{ "name": "Crop marks", "locked": true },
{ "name": "Fine print", "zoom": { "from": 2 } },
{
"name": "French wording",
"language": "fr-FR",
"heading": "Wording"
},
{
"name": "English wording",
"language": "en-GB",
"preferred": true,
"heading": "Wording"
},
{ "name": "Grid", "intent": "design" },
{ "name": "Draft mark", "purpose": "watermark" },
{ "name": "Badge", "role": "logo" }
],
"standard_fonts": [{ "name": "sans", "face": "helvetica" }],
"items": [
{
"type": "rect",
"rect": { "llx": 80, "lly": 560, "urx": 380, "ury": 760 },
"stroke": { "width": 2 }
},
{
"type": "text",
"rect": { "llx": 80, "lly": 540, "urx": 380, "ury": 556 },
"content": ["300 by 200"],
"font": "sans",
"font_size": 10,
"layer": "Dimensions"
},
{
"type": "text",
"rect": { "llx": 80, "lly": 700, "urx": 380, "ury": 740 },
"content": ["DRAFT"],
"font": "sans",
"font_size": 36,
"color": [0.85, 0.85, 0.85],
"layer": "Draft"
},
{
"type": "text",
"rect": { "llx": 80, "lly": 520, "urx": 380, "ury": 534 },
"content": ["Shown from twice the page size upwards"],
"font": "sans",
"font_size": 7,
"layer": "Fine print"
},
{
"type": "text",
"rect": { "llx": 80, "lly": 480, "urx": 380, "ury": 496 },
"content": ["Plan du premier etage"],
"font": "sans",
"font_size": 11,
"layer": "French wording"
},
{
"type": "text",
"rect": { "llx": 80, "lly": 480, "urx": 380, "ury": 496 },
"content": ["First floor plan"],
"font": "sans",
"font_size": 11,
"layer": "English wording"
}
]
}
Ce qui est dessiné, et comment cela sort
Tout ce qu'on peut dessiner sur une page Le poids du fichier et le temps de calcul La première page, montrée pendant que le reste arrive Un nom qui vaut pour plusieurs calques à la fois Un dessin fait une fois, montré par un bouton Les jeux de calques que le logiciel propose Les calques dont le logiciel ne montre qu'un à la fois
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