Du texte en paragraphes, avec retraits et tabulations

Poser plusieurs paragraphes dans un cadre, avec retrait de première ligne, espace entre eux, listes à puces et colonnes de chiffres alignées.

Résumé

Une lettre, un contrat, des conditions générales : du texte qui court, et qui se range tout seul au fur et à mesure. Les lignes peuvent tenir le bord gauche, se placer au milieu, ou s'étirer jusqu'aux deux bords à la fois. Une puce reste seule dans la marge pendant que son texte revient bien aligné en dessous. Et une ligne de petits points peut aller d'un intitulé jusqu'à un prix, à la manière d'un sommaire.

Techniquement

Demandé avec "type": "flow"

Un article flow prend le texte en une seule chaîne : un retour à la ligne termine un paragraphe, une tabulation avance au taquet suivant, et le résultat entre dans le flux de la page en texte positionné. Tout le bloc est composé dans une police et une taille uniques, ce qui laisse la place aux réglages de paragraphe, tous mesurés en points : retraits gauche, droit et de première ligne, espace avant et après, position de la première ligne de base et place gardée sous la dernière, alignement de la dernière ligne d'un paragraphe, caractère de conduite. Les taquets se règlent par pas relatifs, à la machine à écrire, ou par une règle de positions explicites, chacun aligné à gauche, au centre, à droite ou sur un caractère décimal. La liste à puce est un raccourci qui pose d'un coup le retrait gauche, le retrait de première ligne et le taquet du corps de la liste.

Schéma de la requête

Clés obligatoires : rect ; content, chaîne unique ; font ; font_size. Facultatives : align (défaut left, puis right, center, justify) ; last_align, alignement de la dernière ligne de chaque paragraphe (absent : comme le reste, sauf sous justify où elle se range à gauche) ; overlong (overflow par défaut, break) ; leading (défaut 1,2 × font_size) ; break_after ; color (défaut noir) ; outline, objet à width, un nombre de points obligatoire, color (défaut noir) et filled (défaut false), les lettres cernées d'un trait sur leur pourtour, creuses tant que filled ne les remplit pas aussi ; shadow (dx, dy, color, les trois obligatoires) ; left_indent, right_indent, first_line_indent, nombres de points, le dernier acceptant une valeur négative qui sort la première ligne à gauche des autres ; space_before, space_after ; first_baseline, valant "leading" (défaut), "ascender", "cap_height" ou {"points": n} ; last_baseline, valant "none" (défaut), "descender" ou {"points": n}, la place que le bloc garde sous sa dernière ligne de base, celle contre laquelle se mesure l'interligne qui remplit une boîte, de sorte que deux blocs de longueurs différentes finissent sur une même ligne d'encre et non sur une même ligne de base ; leader, un caractère ; tabs, objet à method (relative par défaut, typewriter, ruler), size ({"fraction": n} ou {"points": n}, défaut 7,5 % de la ligne), ruler (tableau de nombres, défaut vide), alignments (tableau de left, center, right, decimal, défaut vide), align_char (défaut .) ; hanging_list, objet à marker et body, les deux nombres obligatoires ; fill_leading, objet à un seul limit obligatoire, un nombre de points, l'interligne que prennent les lignes pour que la dernière finisse sur le plancher du rectangle — les lignes sont écartées, et rien d'autre : la place gardée autour d'un paragraphe, la descente sous la dernière ligne de base et la hauteur du texte lui-même restent où elles sont, et un limit inférieur à l'interligne que le bloc prendrait laisse cet interligne où il est ; fit_size, objet à un seul floor obligatoire, un nombre de points, la taille que le bloc trouve lui-même pour que tout son texte tienne dans le rectangle — les tailles essayées descendent depuis celle que le bloc a demandée, chacune coupée à la boîte et pesée contre elle, et la plus grande qui contient le texte est celle à laquelle il est composé, tandis qu'une boîte qu'aucune taille ne remplit compose le texte au floor et le laisse déborder ; absent, le bloc est composé à la taille qu'il a demandée, quoi qu'il en déborde ; pages (défaut vide) ; id ; relative_to ; transform ; rotate ; layer. Refus croisés : hanging_list avec left_indent, first_line_indent, tabs.method ou tabs.ruler ; fill_leading avec leading ; transform avec rotate.

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

{
  "standard_fonts": [{"name": "serif", "face": "times_roman"}],
  "items": [
    {
      "type": "flow",
      "rect": {"llx": 72, "lly": 640, "urx": 523, "ury": 780},
      "content": "First paragraph, set in one font.\nSecond paragraph, indented.",
      "font": "serif",
      "font_size": 11,
      "first_line_indent": 14,
      "space_after": 6,
      "first_baseline": "cap_height",
      "last_baseline": "descender",
      "overlong": "break",
      "tabs": {
        "method": "relative",
        "size": { "points": 36 },
        "ruler": [72, 180],
        "alignments": ["left", "decimal"]
      }
    }
  ]
}

La ligne qui l'envoie, en trois langages

Texte

Un bloc de texte posé sur la page Un tampon en travers de la page Une ligne de mots posée le long d'un chemin Des blocs posés les uns sous les autres, page après page

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