setBelegLayout method

void setBelegLayout(
  1. BelegLayout layout, {
  2. bool cut = true,
})

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();
}