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
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-apercuL'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,FormFielddans 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
| Cible | Prise en charge |
|---|---|
| Studio | commande 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érique | services 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/.
Cette page en Markdown · llms.txt · documentation complète pour les IA