setBelegBlatt method
Future<void>
setBelegBlatt(
- BelegLayout layout, {
- DruckLogo? logo,
- bool marke = false,
- bool cut = true,
- QrPrintMode qrMode = QrPrintMode.imageRaster,
- 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();
}