receiptSheet function
ReceiptSheet
receiptSheet(
- ReceiptLayout layout, {
- int? charsPerLine,
- SheetLogo? logo,
- bool brandMark = false,
- QrModuleSize qrModuleSize = QrModuleSize.auto,
Implementation
ReceiptSheet receiptSheet(ReceiptLayout layout,
{int? charsPerLine, SheetLogo? logo, bool brandMark = false, QrModuleSize qrModuleSize = QrModuleSize.auto}) {
final raster = ReceiptGrid.render(layout, charsPerLine: charsPerLine);
final n = raster.charsPerLine;
final papier = paperSizeForChars(n, layout.paperSize);
final leerzeile = SheetLine(text: ' ' * n, bold: false, blank: true);
SheetBlock block(GridLine z) => z.kind == GridLineKind.qr
? SheetQr(payload: z.qr ?? '', widthFraction: qrSheetWidthFraction(z.qr ?? '', papier, moduleSize: qrModuleSize))
: SheetLine(text: z.text, bold: z.bold, blank: z.kind == GridLineKind.space);
final bloecke = <SheetBlock>[];
var i = 0;
if (logo != null) {
// Fuehrende Aufdrucke bleiben ganz oben; die Leerzeilen um das Logo sind Vertrag.
while (i < raster.lines.length && raster.lines[i].kind == GridLineKind.banner) {
bloecke.add(block(raster.lines[i]));
i += 1;
}
if (i > 0) bloecke.add(leerzeile);
final mass = logoDimensions(logo, n);
bloecke.add(SheetLogoBlock(widthFraction: mass.widthFraction, heightLines: mass.heightLines));
bloecke.add(leerzeile);
}
for (; i < raster.lines.length; i++) {
bloecke.add(block(raster.lines[i]));
}
if (brandMark) {
// Das Raster deckt nur die beiden bekannten Papierbreiten ab
// (markeRaster). Faende sich hier eine dritte, faellt die Marke weg statt
// ein Raster in falscher Groesse zu drucken -- derselbe Grundsatz wie
// beim Firmenlogo: eine Marke ist Zierde, der Beleg ist Pflicht.
final raster = brandMarkRasters[papier];
if (raster != null) {
bloecke.add(leerzeile);
bloecke.add(SheetBrandMark(width: raster.width, height: raster.height));
}
}
return ReceiptSheet(charsPerLine: n, blocks: bloecke);
}