9. Gestion des rapports PDF (API Ontomantics)
Ce mode de génération de rapport n’utilise pas de fichier modèle, mais le Glisser - Déposer d’Ontomantics (à l’image de celui des écrans, mais considérablement allégé). Cela permet de facilement insérer des tableaux, graphiques, cartes, etc.
La page possède un composant racine de type Page contenant différentes zones pour les en-têtes et pieds de pages.
Les labels, posés dans les zones En-tête et Pied de page, peuvent disposer des types suivants :
-
Défaut : texte classique ;
-
Numéro de page : le numéro de page courante ;
-
Nombre de page : le nombre total de pages ;
-
Contenu du titre [1..6] : affiche le contenu de la balise <h1>..<h6> de la page courante ou des pages précédentes.
Les labels peuvent aussi contenir des $variables, des conditions #if() et des boucles #for() utilisant la syntaxe Apache Velocity (comme les rapports textes). Ces variables apparaîtront alors dans l’onglet Contenu. Les #if(), #for() et leurs #end associés doivent impérativement se trouver au sein de la même étiquette.
Les sauts de page peuvent être gérés par l’utilisation des classes break-before-page, break-after-page, break-before-left, break-after-left, break-before-right, break-after-right, break-inside-avoid ou avec les styles CSS inline correspondants.
Il est possible de copier / coller les contrôles d’un écran existant, mais les composants non-compatibles (tels que les éléments de formulaires) seront remplacés par des étiquettes.
La librairie Paged.js est ensuite utilisée pour découper le contenu de la page HTML en une succession de pages indépendantes permettant l’impression des en-têtes et pieds de pages complexes.
Paged.js est une bibliothèque JavaScript gratuite et open source qui pagine le contenu dans le navigateur pour créer une sortie PDF à partir de n’importe quel contenu HTML. Cela signifie qu’il est possible de concevoir des ouvrages pour l’impression (par exemple, des livres) en utilisant HTML et CSS.
Paged.js suit les normes Paged Media publiées par le W3C (c’est-à-dire le module Paged Media et le module Generated Content for Paged Media). En effet, Paged.js agit comme un polyfill pour les modules CSS afin d’imprimer du contenu en utilisant des fonctionnalités qui ne sont pas encore supportées nativement par les navigateurs. Plus d’information ici : https://pagedjs.org/documentation/
La conversion PDF est effectuée par le navigateur Chromium (ou dérivé) via un script NodeJS utilisant l’API Puppeteer, qui se charge de démarrer et contrôler le navigateur.