Un tableau qui se pagine tout seul

Une facture de trois cents lignes. Un état de stock. Un mois de tickets de caisse. Aucun ne tient sur une page, et aucun n'a non plus une longueur sur laquelle compter : le même état fait quatre pages un mois et onze le mois suivant. Quelqu'un doit malgré tout décider où chaque page s'arrête — et c'est dans cette décision qu'une page vide surgit de nulle part, qu'une ligne est coupée en deux, ou qu'un titre de section reste seul en bas d'une page, sans rien dessous.

Ici, le tableau entier est remis d'un coup et calcule lui-même ses pages. Le titre revient en haut de chacune, la note de bas revient sous la dernière ligne de chacune, et un titre de section reste avec les lignes qu'il introduit. Si le tableau atteignait un point où il ne peut plus avancer, il s'arrête et le dit, plutôt que d'ajouter en silence une page vide — le défaut que personne ne remarque avant qu'un client ne compte les pages.

Ce que montre cet exemple

  • Un seul appel, qui répond en indiquant quoi dessiner sur chacune des pages nécessaires.
  • Lignes d'en-tête et de note répétées sur chaque page.
  • Des intertitres gardés avec les lignes qui les suivent.

Le code source complet

Rien n'est omis et rien n'est simplifié : c'est le programme exactement tel qu'il tourne, pour le développeur qui utilise cette bibliothèque. La troisième est la description elle-même : une simple liste de ce que la page doit dire, et c'est elle qu'on envoie au service.

Voir le code Rust Voir le code Python Voir le code JSON

Le document lui-même

Ouvrir le document en anglais Ouvrir le document en français

Un tableau qui se pagine tout seul, première page

Optimisé, ce document pèse 27.5 ko — au moins 85 % de moins que ce qu'écriraient la plupart des générateurs de PDF

Le document est plus léger qu'avant, et chaque page a exactement le même aspect. Voir la ligne de ce document dans le tableau de tous les exemples.

Des exemples voisins de celui-ci

Un tableau de facture multi-pages

Douze lignes de facture tiennent sur une page, trente en occupent deux, la seconde reprenant l'en-tête et la mise en page de la première.

Des cellules fusionnées sur la hauteur

Une fiche technique dont les cellules sont fusionnées sur la hauteur : chaque groupe est nommé une seule fois en face de toutes ses lignes, avec une remarque à côté ; les traits de séparation s'arrêtent au bord de ces cellules, et une remarque trop longue pour les lignes qu'elle couvre les fait grandir.

Des colonnes mesurées sur leur contenu

La même liste de pièces deux fois : quatre colonnes qui se partagent la largeur à parts égales, puis la référence, la quantité et le prix chacun aussi large que sa propre cellule la plus large, la désignation prenant tout ce qu'ils laissent.

Des images dans les cellules d'un tableau

Un catalogue dont la première colonne est une image et non du texte : quatre images de tailles et de proportions très différentes, chacune posée entière et sans déformation dans la cellule que le tableau lui donne, contre un coin différent — sans réclamer ni largeur à sa colonne ni hauteur à sa ligne.

Tous les exemples, par sujet