Du texte coulé en colonnes

Un long passage coulé dans trois colonnes, chacune accueillant les lignes que sa hauteur permet et passant le reste à la suivante.

Cette page est le programme entier, pour celui qui écrit vos logiciels. Il n'y a rien d'autre à y lire. Revenir au document qu'il écrit.

JSON write_columns.json 99 lignes

Celui-ci n'est pas un programme. C'est la requête envoyée au serveur de documents : la même page, demandée par le réseau, par une application qui n'écrit pas une ligne de code PDF.

La bibliothèque découpe le passage en lignes une seule fois, à la largeur d'une colonne, puis donne à chaque colonne autant de ces lignes que sa hauteur permet d'en tenir. Une demande n'a pas de paquet de mots qui passe du bas d'une colonne au haut de la suivante : le passage voyage donc en trois paquets, chacun portant déjà les mots revenus à sa colonne. Les lignes tombent aux mêmes endroits, parce qu'une ligne se coupe sur la place qu'elle a devant elle. Les deux premières colonnes s'arrêtent au milieu du passage et le disent, pour que leur dernière ligne soit étalée comme celles du dessus ; la troisième termine le passage et laisse sa dernière ligne courte. La bibliothèque trace aussi le filet autour d'une colonne comme un rectangle, là où un rectangle demandé au serveur est le tour de ses quatre coins, refermé sur lui-même.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
{
  "items": [
    {
      "type": "flow",
      "rect": {
        "llx": 70.0,
        "lly": 590.0,
        "urx": 215.0,
        "ury": 720.0
      },
      "content": "A flow too long for one column is set column by column. Each column takes as many of the broken lines as its height allows, draws them, and hands the rest to the column beside it, which takes up exactly where the last one stopped. The words",
      "font": "DejaVuSans",
      "font_size": 10.0,
      "align": "justify",
      "leading": 14.0,
      "last_align": "justify"
    },
    {
      "type": "rect",
      "rect": {
        "llx": 70.0,
        "lly": 590.0,
        "urx": 215.0,
        "ury": 720.0
      },
      "stroke": {
        "width": 0.5,
        "color": [
          0.8,
          0.8,
          0.8
        ]
      }
    },
    {
      "type": "flow",
      "rect": {
        "llx": 240.0,
        "lly": 590.0,
        "urx": 385.0,
        "ury": 720.0
      },
      "content": "are broken once, to the width one column has, so every column is set to the same measure. A line that would fall below a column's foot opens the next column instead, and the reading runs down one column and on into the top of the next",
      "font": "DejaVuSans",
      "font_size": 10.0,
      "align": "justify",
      "leading": 14.0,
      "last_align": "justify"
    },
    {
      "type": "rect",
      "rect": {
        "llx": 240.0,
        "lly": 590.0,
        "urx": 385.0,
        "ury": 720.0
      },
      "stroke": {
        "width": 0.5,
        "color": [
          0.8,
          0.8,
          0.8
        ]
      }
    },
    {
      "type": "flow",
      "rect": {
        "llx": 410.0,
        "lly": 590.0,
        "urx": 555.0,
        "ury": 720.0
      },
      "content": "with no line lost and none set twice. This is what sets a newspaper's text, a report's two columns, or the narrow measure a wide page reads best in.",
      "font": "DejaVuSans",
      "font_size": 10.0,
      "align": "justify",
      "leading": 14.0
    },
    {
      "type": "rect",
      "rect": {
        "llx": 410.0,
        "lly": 590.0,
        "urx": 555.0,
        "ury": 720.0
      },
      "stroke": {
        "width": 0.5,
        "color": [
          0.8,
          0.8,
          0.8
        ]
      }
    }
  ]
}