setBelegBlatt method

Future<void> setBelegBlatt(
  1. BelegLayout layout, {
  2. bool marke = false,
  3. bool cut = true,
  4. QrPrintMode qrMode = QrPrintMode.imageRaster,
  5. QrModulGroesse qrGroesse = QrModulGroesse.auto,
})

Druckt das Blatt (Zwilling von escPosLayoutBytes ab npm 0.14.0): Rasterzeilen, Firmenlogo nach dem fuehrenden Rahmen, QR im eingestellten Modus, Marke am Ende -- dieselbe Folge wie Bildschirm und PDF.

Wirft ArgumentError, wenn das Rasterbild von logo nicht so gross ist, wie das Blatt das Logo setzt -- vor dem ersten Byte, das Papier bleibt dann unangetastet.

Implementation

Future<void> setBelegBlatt(BelegLayout layout,
    {DruckLogo? logo,
    bool marke = false,
    bool cut = true,
    QrPrintMode qrMode = QrPrintMode.imageRaster,
    QrModulGroesse qrGroesse = QrModulGroesse.auto}) async {
  final blatt = belegBlatt(
    _druckbaresLayout(layout),
    zeichen: paperSize.defaultCharCount,
    logo: logo == null ? null : BlattLogo(stufe: logo.stufe, pxBreite: logo.pxBreite, pxHoehe: logo.pxHoehe),
    marke: marke,
    qrGroesse: qrGroesse,
  );
  if (logo != null) {
    // Das Rasterbild muss so gross sein, wie das Blatt das Logo setzt --
    // sonst stuende am Bon ein anderes Logo als am Schirm. Vor dem ersten Byte.
    final block = blatt.bloecke.whereType<BlattLogoBlock>().single;
    final soll = logoRasterMass(LogoMass(breiteAnteil: block.breiteAnteil, hoeheZeilen: block.hoeheZeilen), blatt.zeichen);
    if (logo.raster.breite != soll.breite || logo.raster.hoehe != soll.hoehe) {
      throw ArgumentError('Logo-Raster ${logo.raster.breite}x${logo.raster.hoehe} passt nicht zum Blatt (${soll.breite}x${soll.hoehe})');
    }
  }
  reset();
  for (final b in blatt.bloecke) {
    switch (b) {
      case BlattZeile():
        if (b.leer) {
          addFeed(lines: 1);
        } else {
          addText(b.text.trimRight(), styles: PosStyles(align: PosAlign.left, bold: b.fett));
        }
      case BlattLogoBlock():
        await addImage(logo!.raster.alsRasterImage(), align: PosAlign.center);
      case BlattQr():
        // Das Layout liefert beim QR NUR die Nutzlast; wie daraus ein QR
        // wird, entscheidet der Renderer -- am Drucker also der Modus, den
        // der Chef fuer sein Geraet eingestellt hat. Fest `addQrCode` zu
        // rufen hiesse `native` fuer alle, und Drucker ohne `GS ( k` drucken
        // dann GAR KEINEN QR. Auf einer oesterreichischen Kassa ist der QR
        // die maschinenlesbare Signatur -- er darf nie stillschweigend
        // wegfallen, nur weil das Blatt aus dem Zeilenmodell kommt.
        // Anteil 0 bei nicht leerer Nutzlast: der Inhalt passt in keine
        // QR-Version -- weder Befehl noch Bild koennen ihn setzen. Der Beleg
        // geht ohne QR hinaus und meldet es ueber [qrFehler] (npm: `qrFehler`).
        if (b.nutzlast.isNotEmpty && b.breiteAnteil <= 0) {
          _qrAusfall(b.nutzlast, 'QR-Inhalt passt in keine QR-Version -- Beleg ohne QR');
          break;
        }
        await _qrNachModus(b.nutzlast, qrMode, groesse: qrGroesse, blattAnteil: b.breiteAnteil);
    }
  }
  if (cut) addCut();
}