Un dessin déclaré une fois et posé autant de fois qu’on veut

Mettre sur la page un dessin que la requête a déclaré, où vous voulez et à la taille que vous voulez, sans que le fichier contienne deux fois la même encre.

Le résultat dans un vrai PDF

Un dessin, placé autant de fois qu’on veut

Un badge construit comme un dessin et placé huit fois, plus une fois à demi-taille : le fichier contient le dessin une seule fois, quel que soit le nombre de placements. Une deuxième page montre un badge qui se tourne lui-même d’un quart de tour où qu’on le place, qui dit ce qu’il est, et qui contient son propre fichier : la liste des invités.

Ouvrir le PDF Voir l’exemple complet

Également dans les exemples : Les notes qu’un programme se laisse · Un texte qui épouse une forme · Un seul dessin, et chacun y voit le sien

Résumé

Un logo sur cent pages, un bloc de signature au bas de chaque contrat, un encadrement décoratif autour de chaque attestation : la forme est toujours la même, seule sa place change. Vous la dessinez donc une fois, vous lui donnez un nom, et ensuite il suffit de dire « celle-là, ici ». Cent pages du même badge pèsent alors à peine plus qu’une. Vous pouvez aussi la tourner ou l’étirer sans rien redessiner.

Techniquement

Demandé avec "type": "drawing"

Un élément drawing pose sur la page un dessin déclaré dans drawings, en peignant son XObject de forme avec Do. Le dessin a son propre espace et sa propre boîte ; le poser dit où l’origine de cet espace atterrit, en x et y dans les coordonnées de la page, et ce par quoi il est multiplié, c’est-à-dire la matrice que l’élément écrit. L’encre est écrite une seule fois dans le fichier, quel que soit le nombre de poses, et c’est ce qui rend un badge répété peu coûteux. Une pose a la même portée que tout autre élément : les pages où elle paraît, une matrice ou une rotation, un calque, et la balise par laquelle l’arbre de structure la revendique — ou artifact, quand le dessin relève du décor plutôt que du contenu du document.

Schéma de la requête

Clés obligatoires : drawing, le nom d’un dessin déclaré dans drawings ; x et y, chacun un nombre ou une expression entre guillemets, la position de l’origine propre du dessin, mesurée depuis le bord gauche et le bord inférieur de la page. Clés facultatives : scale, le nombre par lequel l’espace propre du dessin est multiplié, 1 par défaut ; pages, les pages où il figure, numérotées à partir de 1 (une liste vide vaut toutes les pages), ou une règle qui les désigne ; transform, six nombres [a, b, c, d, e, f] ; rotate, un angle en degrés, compté dans le sens inverse des aiguilles d’une montre, autour du centre de sa propre boîte ; layer, le nom d’un calque déclaré ; tag et mark, fournis ensemble, qui ouvrent un contenu marqué rattaché à l’arbre de structure ; artifact, le rôle du dessin dans l’habillage de la page, au choix : header (un titre courant), footer (un pied de page, un numéro de page), watermark (posé au-dessus ou au-dessous du contenu de la page), pagination (ce qui relève de la pagination sans être l’un des trois précédents), layout (filets, cadres, dégradés : ce qui sépare le contenu de la page sans rien exprimer par lui-même), page (ce qui relève de la fabrication de la feuille : repères de coupe, croix de repérage, barres de couleur) ou background (ce qui est placé derrière le contenu de la page). Combinaisons refusées : transform avec rotate ; artifact avec tag ; un drawing qui ne désigne aucun dessin déclaré dans la requête. Un dessin déclaré comporte name, box (un objet aux clés llx, lly, urx et ury, qui délimite la partie conservée de son espace propre), items, les formes qui le composent, un matrix facultatif de six nombres, et un layer facultatif, le nom d’un calque déclaré auquel appartient le dessin entier : le logiciel de lecture qui cache le calque cache le dessin partout où il est affiché, y compris là où aucun contenu marqué ne l’atteint, comme l’image d’un bouton. Un dessin qu’un état graphique utilise comme masque doux n’appartient à aucun calque. Seul un dessin peut contenir, parmi ses formes, un bloc shaped_text : un texte composé à l’intérieur d’une forme, shape, qui n’est pas forcément un rectangle — rect ou ellipse, chacun un objet aux clés llx, lly, urx et ury, ou polygon, un tableau d’au moins trois sommets, chacun [x, y] — et dont les lignes contournent chaque rectangle de around, un tableau d’objets aux clés llx, lly, urx, ury et gap, la marge laissée libre tout autour. Il accepte content, font, font_size, narrowest (la largeur minimale, en points, d’une portion de ligne) et tous les réglages d’un bloc de texte en flux, dont outline, le trait qui entoure les lettres ; les mots qui ne tiennent pas sont laissés de côté. artifact connaît aussi quatre autres types : page_number, un numéro de page isolé, hors de tout titre courant ou pied de page ; bates, un numéro apposé sur chaque page d’un ensemble de documents, qui permet de citer chacune de ses pages ; line_number, un numéro placé dans la marge à côté de la ligne qu’il compte ; redaction, la marque laissée à la place d’un contenu supprimé. Ces quatre types exigent PDF 2.0, à déclarer dans la clé version de la requête. À la place du mot, artifact accepte un objet : kind, obligatoire, l’un de ces onze mots ; attached, un tableau de top, bottom, left et right, chacun nommé une fois, les bords de la page auxquels il est rattaché, admis seulement pour pagination et background ; bbox, la boîte qu’il couvre, en points de la page, un objet aux clés llx, lly, urx et ury. Tout élément qui accepte artifact en accepte les deux formes.

Une requête entière qui crée un PDF

{
  "standard_fonts": [{ "name": "sans", "face": "helvetica" }],
  "drawings": [
    {
      "name": "badge",
      "box": { "llx": 0, "lly": 0, "urx": 60, "ury": 60 },
      "items": [
        {
          "type": "rect",
          "rect": { "llx": 0, "lly": 0, "urx": 60, "ury": 60 },
          "fill": [0.11, 0.31, 0.55]
        },
        {
          "type": "line",
          "from": { "x": 12, "y": 30 },
          "to": { "x": 48, "y": 30 },
          "stroke": { "width": 3, "color": [1, 1, 1] }
        }
      ]
    },
    {
      "name": "notice",
      "box": { "llx": 0, "lly": 0, "urx": 160, "ury": 160 },
      "items": [
        {
          "type": "shaped_text",
          "shape": { "ellipse": { "llx": 0, "lly": 0, "urx": 160, "ury": 160 } },
          "around": [{ "llx": 60, "lly": 60, "urx": 100, "ury": 100, "gap": 4 }],
          "content": "Each line keeps inside the circle and round the square.",
          "font": "sans",
          "font_size": 9
        }
      ]
    }
  ],
  "items": [
    { "type": "drawing", "drawing": "badge", "x": 72, "y": 700 },
    { "type": "drawing", "drawing": "notice", "x": 72, "y": 480 },
    {
      "type": "drawing",
      "drawing": "badge",
      "x": 160,
      "y": 700,
      "scale": 0.5,
      "artifact": { "kind": "pagination", "attached": ["top"] }
    }
  ]
}

La ligne qui l’envoie, en trois langages

Formes

Un tracé libre : lignes, courbes et surfaces Un rectangle, plein ou au trait Une ligne droite entre deux points

Où aller ensuite

Toutes les clés JSON d’une requête, en une page Les vingt-deux autres choses que l’on peut dessiner

Voir les prix Voir les exemples