setBelegLayout method
Druckt ein Beleg-Zeilenmodell des Backends (KasseneckReceipt.layout)
über das Zeichenraster (BelegRaster, Zwilling von renderReceiptGrid
im JS-Paket): jede Rasterzeile geht als fertige, exakt N Zeichen breite
Textzeile raus (58 mm = 32, 80 mm = 48) — keine eigene Spaltenrechnung,
dieselben Zeilen wie Browser-Kasse, Labor und Beleg-PDF. Bevorzugt
gegenüber setKeckReceipt, sobald ein Layout vorliegt.
Implementation
void setBelegLayout(BelegLayout layout, {bool cut = true}) {
reset();
// Erst druckbar machen (Codepage, EUR statt Euro-Zeichen), DANN rastern —
// damit das Raster mit den Zeichen rechnet, die aufs Papier gehen.
final druckbar = BelegLayout(
lines: layout.lines.map((z) => switch (z) {
BelegText() => BelegText(text: _printable(z.text), align: z.align, bold: z.bold),
BelegBanner() => BelegBanner(text: _printable(z.text), warnung: z.warnung),
BelegSpalten() => BelegSpalten(z.columns.map((c) => BelegSpalte(text: _printable(c.text), width: c.width, align: c.align)).toList()),
BelegLinie() => BelegLinie(char: _printable(z.char).isEmpty ? '-' : _printable(z.char)),
_ => z,
}).toList(),
paperSize: layout.paperSize,
regelwerk: layout.regelwerk,
);
final raster = BelegRaster.render(druckbar, zeichen: paperSize.defaultCharCount);
for (final z in raster.lines) {
switch (z.art) {
case RasterArt.space:
addFeed(lines: 1);
case RasterArt.qr:
addQrCode(z.qr ?? '');
case RasterArt.banner:
// Belegart/Warnung: fett, doppelte Höhe; Warnungen invers. Text ist bereits zentriert aufgefüllt.
addText(z.text.trimRight(), styles: PosStyles(align: PosAlign.left, bold: true, height: PosTextSize.size2, reverse: z.warnung));
case RasterArt.text:
case RasterArt.columns:
case RasterArt.rule:
addText(z.text.trimRight(), styles: PosStyles(align: PosAlign.left, bold: z.bold));
}
}
if (cut) addCut();
}