getPaperFromReceipt static method
- KasseneckReceipt receipt,
- KeckPaperSize paperSize, {
- QrPrintMode qrMode = QrPrintMode.imageRaster,
- QrModuleSize qrModuleSize = QrModuleSize.auto,
- CodeTableId? codeTable,
- @Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.') PrintLogo? logo,
- @Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.') bool brandMark = false,
Setzt receipt als Beleg und gibt das fertige Papier zurueck -- die
eine Stelle, an der PrintPaper fuer einen Beleg entsteht.
Der Rueckgabewert traegt neben bytes und myPosPaper auch
PrintPaper.qrError; dieser Weg ruehrt lastQrError nicht an und
ist damit frei von globalem Zustand.
Das Logo kommt aus receipt.logoUrl -- logo greift nur noch als
Rueckfallebene fuer Belege ohne Logo-Adresse. Fuer paperSize muss es
gerastert sein (loadPrintLogo(url, size, paperSize)); passt ein
PrintLogo nicht (z. B. fuer eine andere Papierbreite gerastert), gilt:
kommt es selbst aus receipt.logoUrl, druckt der Beleg ohne Logo weiter --
ein Datenfehler am Konto darf den Bon nicht verhindern. Nur ein
ausdruecklich uebergebenes logo laesst den Druck mit ArgumentError
abbrechen, bevor ein Byte entsteht.
codeTable ist die im Drucker-Wizard gewaehlte Tabelle dieses Druckers
(siehe PrintPaper.codeTable); ohne Wahl bleibt der Bon byte-gleich.
Implementation
static Future<PrintPaper> getPaperFromReceipt(
KasseneckReceipt receipt,
KeckPaperSize paperSize, {
QrPrintMode qrMode = QrPrintMode.imageRaster,
QrModuleSize qrModuleSize = QrModuleSize.auto,
CodeTableId? codeTable,
@Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.')
PrintLogo? logo,
@Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.')
bool brandMark = false,
}) async {
final PrintPaper paper =
PrintPaper(paperSize: paperSize, profile: KeckPrinterService.profile ?? CapabilityProfile(), codeTable: codeTable);
// Ein Server-Layout gewinnt immer (receiptLayoutFromResult), auch wenn
// ihm ein Kartenblock zu fehlen scheint: Aufdruck (TESTKASSE, Belegart)
// und QR wiegen schwerer, und Bildschirm, Bon und PDF zeigen so denselben
// Beleg. Nur ohne Layout zeichnet der Rueckfall.
final ReceiptLayout? layout = receiptLayoutFromResult(receipt, fallbackPaperSize: paperSize).layout;
if (layout != null) {
final bool belegTraegtLogo = receipt.logoUrl != null && receipt.logoUrl!.isNotEmpty;
PrintLogo? logoAusBeleg;
if (belegTraegtLogo) {
try {
logoAusBeleg = await logoLoader(receipt.logoUrl, receipt.logoScale, paperSize);
} catch (_) {
// Ein Logo, das nicht kommt, ist kein Druckfehler: der Beleg steht
// laengst in der Signaturkette, der Bon muss hinaus.
logoAusBeleg = null;
}
}
// Traegt der Beleg eine Adresse, entscheidet AUSSCHLIESSLICH sie -- auch
// wenn der Abruf scheiterte. Sonst stuende auf dem Bon ein anderes Logo
// als im PDF und in der Online-Ansicht, und genau das soll nie wieder
// auseinanderlaufen.
final PrintLogo? wirksamesLogo = belegTraegtLogo ? logoAusBeleg : logo;
final bool wirksameMarke = receipt.showKreiseckLogo || brandMark;
// [wirksamesLogo] und [wirksameMarke] gelten nur fuer das Blatt; der
// Altweg kennt sein eigenes Logo (`receipt.logo`) und Branding
// (`showKreiseckLogo`).
try {
await paper.setReceiptSheet(layout,
logo: wirksamesLogo, brandMark: wirksameMarke, qrMode: qrMode, qrModuleSize: qrModuleSize);
} on ArgumentError {
// [setReceiptSheet] wirft nur ueber ein gesetztes Logo -- diese Pruefung
// war fuer den AUFRUFER gedacht, der ein eigenes Raster mitbringt. Kommt
// das Logo hier stattdessen selbst aus dem Beleg (Kontodaten), darf ein
// Datenfehler dort nicht den ganzen Bon verhindern, den gesetzlich
// vorgeschriebenen QR eingeschlossen: der Bon druckt dann ohne Logo.
// Ein ausdruecklich uebergebenes [logo] (die veraltete Rueckfallebene)
// bleibt hart -- wer ein Raster mitbringt, soll erfahren, dass es nicht passt.
if (!belegTraegtLogo) rethrow;
await paper.setReceiptSheet(layout,
brandMark: wirksameMarke, qrMode: qrMode, qrModuleSize: qrModuleSize);
}
} else {
await paper.setKeckReceipt(receipt, qrMode: qrMode, qrModuleSize: qrModuleSize);
}
return paper;
}