/** * Das Testblatt fuer den Zeichensatz: welche Code-Tabelle druckt auf diesem * Drucker die Umlaute richtig? * * Oben steht die Vorlage-Zeile als Rasterbild -- ein Bild druckt jeder * Drucker gleich, egal welche Tabelle er gerade hat. Darunter je Tabelle des * Katalogs eine Zeile mit ihrer Nummer (gross), umgeschaltet mit `ESC t n` * und mit den Bytes dieser Tabelle. Richtig ist die Zeile ohne falsches * Zeichen; eine Luecke (Zeichen fehlt der Tabelle) ist in Ordnung, bei * mehreren die mit den wenigsten Luecken, sonst Zeile 6 (Ersatzbuchstaben). * Nicht „die erste Zeile mit richtigen Umlauten“: ein Drucker mit nur PC437 * druckt Zeile 2 und 3 mit richtigen Umlauten, aber falschem € und §. * * Alles ausserhalb der Testzeilen steht mit Ersatzbuchstaben (reines ASCII), * auch die Anleitung: „Lücke“ aus dem Katalog steht am Blatt als „Luecke“. * * Bildschirm und Papier zeigen dasselbe Blatt: `codeTableTestSheet` liefert * es im Zeilenmodell des Beleg-Blatts (`ReceiptSheet`), `codeTableTestSheetBytes` * druckt genau diese Zeilen. Das Blatt hat immer 32 Spalten (58 mm); auf * 80 mm steht der Block ueber den linken Rand (`GS L`) mittig. * * Gemeinsamer Prueffall mit dem Dart-Zwilling: * `fixtures/expected/code-table-test-sheet.{mm58,mm80}.hex` und `.lines.json`. */ import type { ReceiptSheet } from './blatt.js'; import { type CodeTable, type CodeTableId } from '../printing/code-tables.js'; import { type PosPaperSize, type RasterImage } from '../printing/escpos.js'; /** Spalten des Testblatts -- immer 58-mm-Format. */ export declare const CODE_TABLE_TEST_SHEET_CHARS = 32; export interface CodeTableTestSheetInput { /** Kassen-Kennung fuer die Kopfzeile (keine Personendaten). */ cashregisterLabel: string; /** Zeitpunkt des Drucks; die Kopfzeile zeigt ihn in Wiener Zeit. */ time: Date; /** Papier des Druckers; das Blatt bleibt 32 Spalten, auf 80 mm mittig. */ paper: PosPaperSize; } /** Eine Testzeile: Nummer, Tabelle und die Zeichen, die ihr fehlen (fuer „ohne €“ am Bildschirm). */ export interface CodeTableTestSheetRow { readonly number: CodeTable['number']; readonly codeTable: CodeTableId; readonly missing: readonly string[]; } /** Das Testblatt im Zeilenmodell des Beleg-Blatts, dazu die Testzeilen. */ export interface CodeTableTestSheet extends ReceiptSheet { readonly rows: readonly CodeTableTestSheetRow[]; } /** Die Vorlage-Zeile als Rasterbild (384 x 24 Punkte), wie sie am Papier steht. */ export declare function codeTableReferenceImage(): RasterImage; /** Das Testblatt im Zeilenmodell des Beleg-Blatts -- dieselben Zeilen wie am Papier. */ export declare function codeTableTestSheet(options: CodeTableTestSheetInput): CodeTableTestSheet; /** * Das Testblatt als ESC/POS-Bytes. Jede Testzeile schaltet nach ihrer * Nummer einmal mit `FS .` + `ESC t n` auf ihre Tabelle und traegt deren Bytes (`encodeForCodeTable`, * also das echte €-Byte, wo die Tabelle es hat). Die Nummer steht doppelt * breit und hoch (`GS !`), die Vorlage als Rasterbild (`GS v 0`). */ export declare function codeTableTestSheetBytes(options: CodeTableTestSheetInput): Uint8Array;