BERKIOSDocs
Modules

Bibliothèque pdflab — générer des PDF par le code

Clone de ReportLab (Python) en JavaScript pur, sans dépendance. Le moteur est dans pdflab/ ; la bibliothèque BERKIOS pdflab.bkl (44 commandes, fr/en) l'expose aux composants via la commande native pdf <action> ….

Cycle d'un document

  1. pdf-nouveau (réinitialise) — 2. réglages (pdf-format, pdf-orientation, pdf-marges, pdf-auteur, pdf-entete, pdf-pied, pdf-numerotation, pdf-filigrane, pdf-proteger, pdf-police, pdf-couleur, pdf-nom, pdf-proteger) — 3. contenu (pdf-titre, pdf-sous-titre, pdf-section, pdf-texte, pdf-note, pdf-bloc-citation, pdf-puces, pdf-numerotee, pdf-tableau, pdf-total, pdf-fiche, pdf-image, pdf-graphique, pdf-code-barres, pdf-qr, pdf-champ, pdf-case, pdf-liste, pdf-code, pdf-espace, pdf-ligne, pdf-saut-page, pdf-sommaire) — 4. sortie (pdf-generer, pdf-pages, pdf-apercu, pdf-imprimer, pdf-telecharger, pdf-ouvrir).

Le texte accepte le mini-balisage de ReportLab : <b>, <i>, <u>, <font color="#c00">, <a href="…">, <br/>, entités HTML. Un tableau se saisit A;B|1;2|3;4 (lignes séparées par |, colonnes par ;). Les pieds et en-têtes acceptent {page}, {pages}, {date}, {titre}.

Exemple

pdf-nouveau
pdf-titre "Facture 2026-014"
pdf-tableau "Désignation;Qté;Prix|Clavier;2;40|Souris;1;15"
pdf-total "Total;;95"
pdf-numerotation "Page {page} / {pages}"
pdf-apercu

L'aperçu s'ouvre dans une fenêtre avec Imprimer et Télécharger.

API JavaScript (navigateur ou Node)

import { SimpleDocTemplate, Paragraph, Table, getSampleStyleSheet, cm } from "pdflab/dist/pdflab.mjs";
const ss = getSampleStyleSheet();
const bytes = new SimpleDocTemplate("a.pdf").build([new Paragraph("Bonjour", ss.Title), new Table([["A","B"],["1","2"]])]);

Navigateur : <script src="pdflab.js"> expose window.pdfLab (downloadPdf, printPdf, openPdf). Spécification JSON : pdfLab.buildDocument({title, pageSize, content:[…]}).

Sécurité, QR code et formulaires

  • pdf-qr "https://exemple.org" 30 M : QR code vectoriel (octets UTF-8, versions 1 à 10, niveaux L/M/Q/H ; jusqu'à 271 octets).
  • pdf-proteger "ouvrir123" "admin456" "copie,modification" : chiffrement AES-128 (gestionnaire standard V4/R4) ; mot de passe d'ouverture (vide = ouverture libre), mot de passe propriétaire, droits interdits (copie, modification, impression, annotation).
  • pdf-champ, pdf-case, pdf-liste : champs de formulaire remplissables (texte, case à cocher, liste déroulante), avec apparence statique incluse. API : canvas.textField / checkBox / comboBox, FormField dans un récit.
  • Polices .otf (CFF) : registerTTFont("Nom", octets) les accepte ; elles sont incorporées en entier (pas de sous-ensemble). PNG entrelacés (Adam7) pris en charge.

Runtimes

CiblePrise en charge
Studiocommande native pdf + fenêtre d'aperçu (Imprimer / Télécharger)
Moteur du protocole (BRP)le moteur construit le PDF et appelle les services client pdf.apercu, pdf.telecharger, pdf.imprimer (base64)
Client Flutter génériqueservices pdf.* via le paquet printing (aperçu, impression, partage) — code Dart non compilé ici (pas de SDK)
Applications Flutter exportées (interpréteur Dart natif)non raccordées : moteur JavaScript uniquement

Permissions et limites

Permissions inférées : impression (commande pdf), fichiers (téléchargement). Non gérés : signatures numériques, chiffrement AES-256 (R6), polices à variantes, boutons radio. L'aperçu en iframe n'est pas pris en charge par certains navigateurs mobiles (utiliser Télécharger).

Régénération : node scripts/build-bibliotheque-pdflab.mjs ; exemple : node scripts/build-pdflab-example.mjs ; bundle : node pdflab/tools/build-bundle.mjs puis recopier pdflab/dist/pdflab.js dans examples/application/pdf/.