@mostajs/ticket-print
v0.2.0
Published
Rendu HTML d'un ticket de file d'attente (impression locale) — lean, zéro-dép ; templates, code-barres Code 128 intégré, QR généré par composition (@mostajs/qrpanel).
Downloads
60
Maintainers
Readme
@mostajs/ticket-print
Auteur : Dr Hamid MADANI [email protected] · Licence : AGPL-3.0-or-later
Rendu HTML d'un ticket de file d'attente prêt à imprimer (thermique 58/80 mm ou A4). Lean, zéro dépendance runtime.
Installation
npm i @mostajs/ticket-print
# peers OPTIONNELLES : @mostajs/themes (motif de forme), @mostajs/qrpanel (génération du QR)Exemple
import { renderTicketHtml } from '@mostajs/ticket-print';
import { shapeMotifSvg } from '@mostajs/themes'; // optionnel — motif de forme
const html = renderTicketHtml(
{ number: 'A017', service: 'État civil', createdAt: Date.now(), serverName: 'Mairie' },
{
agency: { name: 'Mairie de Mostaganem', companySlogan: 'À votre service' },
instruction: { ar: 'انتظر', fr: 'Patientez, vous serez appelé', en: 'Please wait' },
paper: '80mm', locale: 'fr',
template: 'standard', // 0.2.0 — voir ci-dessous
barcode: true, // 0.2.0 — Code 128 du numéro
motifSvg: shapeMotifSvg('cerises', '#000'), // 🍒 en filigrane
motifMode: 'coin', // ou 'plein' (l'image porte le numéro)
},
);
// Electron (impression silencieuse)
const win = new BrowserWindow({ show: false });
win.loadURL('data:text/html;charset=utf-8,' + encodeURIComponent(html));
win.webContents.on('did-finish-load', () => win.webContents.print({ silent: true }));Templates (0.2.0)
opts.template : standard (défaut) · compact · premium · minimal · administrative.
Un template déclare les blocs affichés et pose un calque CSS — le HTML n'est pas
dupliqué par template. Certains masquent des blocs : minimal retire logo, message, slogan,
pied de page et QR ; administrative retire le QR ; compact retire logo, slogan et pied de page.
Code-barres (0.2.0)
opts.barcode : true (encode le numéro du ticket) ou une chaîne (donnée explicite).
Code 128, sous-ensemble B (ASCII imprimable 32..126), rendu en SVG inline.
Intégré, synchrone, sans dépendance.
QR (0.2.0)
Le QR se génère avec la variante asynchrone, opts.qr valant true (encode le numéro)
ou une chaîne :
import { renderTicketHtmlAsync } from '@mostajs/ticket-print';
const html = await renderTicketHtmlAsync(ticket, { ...opts, qr: true, template: 'premium' });L'encodage est délégué à @mostajs/qrpanel/qr-svg (peer optionnelle, elle-même sans
dépendance), chargé en import dynamique : ce module reste zéro-dépendance pour qui
n'utilise pas le QR, et personne ne réimplémente un encodeur QR. Si la peer est absente,
le ticket s'imprime sans QR — une impression qui plante serait pire qu'un ticket sans QR.
renderTicketHtml reste synchrone et strictement rétrocompatible : opts.qrDataUri
(QR déjà rendu, injecté) est toujours honoré.
Vérification
node examples/print-ticket/verify.mjs # rendu de base (0.1)
node test-scripts/verify-0.2.mjs # templates, code-barres, QR, non-régressionAPI
renderTicketHtml(ticket, opts) → string— synchrone, zéro-dép.renderTicketHtmlAsync(ticket, opts) → Promise<string>— idem + génération du QR.barcodeSvg(text, opts) → string— Code 128-B en SVG.TEMPLATES— catalogue des templates.localized(value, locale) → string.
Signature complète : voir llms.txt.
