@kreiseck/kasseneck-api 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +30 -0
- package/dist/cjs/kasse/drucker.d.ts +1 -1
- package/dist/cjs/printing/escpos.d.ts +30 -1
- package/dist/cjs/printing/escpos.js +60 -4
- package/dist/cjs/react/index.js +6 -0
- package/dist/cjs/receipt/blatt.d.ts +5 -3
- package/dist/cjs/receipt/blatt.js +11 -10
- package/dist/cjs/receipt/epos.d.ts +2 -2
- package/dist/cjs/receipt/epos.js +8 -0
- package/dist/cjs/receipt/index.d.ts +3 -1
- package/dist/cjs/receipt/index.js +6 -2
- package/dist/cjs/receipt/layout-escpos.d.ts +1 -1
- package/dist/cjs/receipt/layout-escpos.js +4 -0
- package/dist/cjs/receipt/marke-daten.d.ts +14 -0
- package/dist/cjs/receipt/marke-daten.js +18 -0
- package/dist/cjs/receipt/marke.d.ts +20 -0
- package/dist/cjs/receipt/marke.js +46 -0
- package/dist/esm/kasse/drucker.d.ts +1 -1
- package/dist/esm/printing/escpos.d.ts +30 -1
- package/dist/esm/printing/escpos.js +59 -4
- package/dist/esm/react/index.js +7 -1
- package/dist/esm/receipt/blatt.d.ts +5 -3
- package/dist/esm/receipt/blatt.js +10 -9
- package/dist/esm/receipt/epos.d.ts +2 -2
- package/dist/esm/receipt/epos.js +8 -0
- package/dist/esm/receipt/index.d.ts +3 -1
- package/dist/esm/receipt/index.js +3 -1
- package/dist/esm/receipt/layout-escpos.d.ts +1 -1
- package/dist/esm/receipt/layout-escpos.js +4 -0
- package/dist/esm/receipt/marke-daten.d.ts +14 -0
- package/dist/esm/receipt/marke-daten.js +15 -0
- package/dist/esm/receipt/marke.d.ts +20 -0
- package/dist/esm/receipt/marke.js +42 -0
- package/fixtures/erwartet/karte-eigener.blatt32.json +3 -4
- package/fixtures/erwartet/karte-eigener.blatt48.json +3 -4
- package/fixtures/erwartet/karte-gptom-ios.blatt32.json +3 -4
- package/fixtures/erwartet/karte-gptom-ios.blatt48.json +3 -4
- package/fixtures/erwartet/karte-gptom.blatt32.json +3 -4
- package/fixtures/erwartet/karte-gptom.blatt48.json +3 -4
- package/fixtures/erwartet/karte-hobex-cloud.blatt32.json +3 -4
- package/fixtures/erwartet/karte-hobex-cloud.blatt48.json +3 -4
- package/fixtures/erwartet/karte-hobex-hps.blatt32.json +3 -4
- package/fixtures/erwartet/karte-hobex-hps.blatt48.json +3 -4
- package/fixtures/erwartet/karte-mypos.blatt32.json +3 -4
- package/fixtures/erwartet/karte-mypos.blatt48.json +3 -4
- package/fixtures/erwartet/karte-stripe-eps.blatt32.json +3 -4
- package/fixtures/erwartet/karte-stripe-eps.blatt48.json +3 -4
- package/fixtures/erwartet/karte-stripe.blatt32.json +3 -4
- package/fixtures/erwartet/karte-stripe.blatt48.json +3 -4
- package/fixtures/erwartet/karte-sumup.blatt32.json +3 -4
- package/fixtures/erwartet/karte-sumup.blatt48.json +3 -4
- package/fixtures/erwartet/langer-artikelname.blatt32.json +3 -4
- package/fixtures/erwartet/langer-artikelname.blatt48.json +3 -4
- package/fixtures/erwartet/null-ausfall.blatt32.json +3 -4
- package/fixtures/erwartet/null-ausfall.blatt48.json +3 -4
- package/fixtures/erwartet/null-jahr.blatt32.json +3 -4
- package/fixtures/erwartet/null-jahr.blatt48.json +3 -4
- package/fixtures/erwartet/null-monat.blatt32.json +3 -4
- package/fixtures/erwartet/null-monat.blatt48.json +3 -4
- package/fixtures/erwartet/null-pruef.blatt32.json +3 -4
- package/fixtures/erwartet/null-pruef.blatt48.json +3 -4
- package/fixtures/erwartet/null-schluss.blatt32.json +3 -4
- package/fixtures/erwartet/null-schluss.blatt48.json +3 -4
- package/fixtures/erwartet/null-start.blatt32.json +3 -4
- package/fixtures/erwartet/null-start.blatt48.json +3 -4
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt32.json +3 -4
- package/fixtures/erwartet/rabatt-chef-trinkgeld.blatt48.json +3 -4
- package/fixtures/erwartet/rabatt-einfach.blatt32.json +3 -4
- package/fixtures/erwartet/rabatt-einfach.blatt48.json +3 -4
- package/fixtures/erwartet/rabatt-trinkgeld.blatt32.json +3 -4
- package/fixtures/erwartet/rabatt-trinkgeld.blatt48.json +3 -4
- package/fixtures/erwartet/rabatt-wertgutschein.blatt32.json +3 -4
- package/fixtures/erwartet/rabatt-wertgutschein.blatt48.json +3 -4
- package/fixtures/erwartet/rabattzeilen.blatt32.json +3 -4
- package/fixtures/erwartet/rabattzeilen.blatt48.json +3 -4
- package/fixtures/erwartet/signaturausfall-verkauf.blatt32.json +3 -4
- package/fixtures/erwartet/signaturausfall-verkauf.blatt48.json +3 -4
- package/fixtures/erwartet/storno-rabatt.blatt32.json +3 -4
- package/fixtures/erwartet/storno-rabatt.blatt48.json +3 -4
- package/fixtures/erwartet/storno-teil.blatt32.json +3 -4
- package/fixtures/erwartet/storno-teil.blatt48.json +3 -4
- package/fixtures/erwartet/storno-voll.blatt32.json +3 -4
- package/fixtures/erwartet/storno-voll.blatt48.json +3 -4
- package/fixtures/erwartet/testkasse-verkauf.blatt32.json +3 -4
- package/fixtures/erwartet/testkasse-verkauf.blatt48.json +3 -4
- package/fixtures/erwartet/testsignatur-verkauf.blatt32.json +3 -4
- package/fixtures/erwartet/testsignatur-verkauf.blatt48.json +3 -4
- package/fixtures/erwartet/training.blatt32.json +3 -4
- package/fixtures/erwartet/training.blatt48.json +3 -4
- package/fixtures/erwartet/verkauf-bar.blatt32.json +3 -4
- package/fixtures/erwartet/verkauf-bar.blatt48.json +3 -4
- package/fixtures/erwartet/verkauf-karte.blatt32.json +3 -4
- package/fixtures/erwartet/verkauf-karte.blatt48.json +3 -4
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt32.json +3 -4
- package/fixtures/erwartet/verkauf-kleinunternehmer.blatt48.json +3 -4
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/manifest.json +62 -62
- package/fixtures/oberflaeche.json +1 -1
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,36 @@ Was vor 0.7.0 geschah, steht in der Commit-Historie (`git log`); ab hier wird
|
|
|
4
4
|
es hier geführt. Ein Eintrag nennt die Änderung **und ihren Grund** —
|
|
5
5
|
nur der Grund überlebt den nächsten Umbau.
|
|
6
6
|
|
|
7
|
+
## 0.26.0
|
|
8
|
+
|
|
9
|
+
- Beleg: Am Ende steht das Kasseneck-Logo als Bild statt der Zeile „erstellt mit Kasseneck".
|
|
10
|
+
Das Raster entsteht beim Bauen in den beiden Druckmaßen (352 × 51 für 80 mm, 234 × 34 für 58 mm);
|
|
11
|
+
zur Laufzeit wird nichts gerastert, damit beide Pakete denselben Bytestrom erzeugen.
|
|
12
|
+
- **ESC/POS: der Vorspann setzt den Druckbereich auf die Breite des Blatts** (`GS L 0` +
|
|
13
|
+
`GS W`, acht Bytes hinter `ESC @`). `ESC a 1` mittelt nicht im Blatt, sondern in der
|
|
14
|
+
Fläche des *Geräts*: Ein 58-mm-Blatt auf einem 80-mm-Drucker setzte den Text in die
|
|
15
|
+
linken 384 Punkte, QR, Logo und Marke aber mittig in die 576 — alles Bildhafte stand
|
|
16
|
+
gegenüber dem Text nach rechts gerückt. Am Gerät nachgestellt und behoben. Passen Gerät
|
|
17
|
+
und Blatt zusammen (der Regelfall), ist der gesetzte Wert der Vorgabewert des Druckers
|
|
18
|
+
und das Druckbild bleibt unverändert; die Bestandsschutz-Digests sind allein wegen
|
|
19
|
+
dieser acht Bytes neu gezogen (Gegenprobe byteweise: sonst hat sich nichts verschoben).
|
|
20
|
+
Der ePOS-Weg trägt denselben Bezugsfehler und ist noch offen — die ePOS-Print-Einheit
|
|
21
|
+
des Prüfgeräts war nicht erreichbar, und ungeprüft geht dorthin nichts.
|
|
22
|
+
- `MARKE_TEXT` entfällt. Wer die Marke selbst gesetzt hat, nimmt jetzt den Blockart `marke`.
|
|
23
|
+
- ESC/POS: `row()` gibt der ersten Spalte am Drucker nur noch links, nie ihre eigentliche
|
|
24
|
+
Ausrichtung — eine zentrierte oder rechtsbündige erste Spalte ließ den Drucker seine
|
|
25
|
+
eigene Ausrichtung sonst auf jede weitere Spalte derselben Zeile anwenden (dieselbe
|
|
26
|
+
Fehlerklasse wie der in 0.24.0/0.25.0 behobene Ausrichtungsfehler, eine Ebene tiefer).
|
|
27
|
+
Die tatsächliche Ausrichtung fließt weiterhin in die von Hand berechnete Position ein.
|
|
28
|
+
- ESC/POS: ein `ESC a`, das der Drucker mitten in der Zeile (Spalte ab der zweiten)
|
|
29
|
+
wortlos verwirft, gilt intern nicht mehr als gesetzt — eine spätere, echte Zeile hielt
|
|
30
|
+
sich sonst fälschlich schon für umgestellt und unterließ den Befehl.
|
|
31
|
+
- Prüfung: Der Zwillingsabgleich am **Bytestrom** ist jetzt Teil der Test-Suite
|
|
32
|
+
(`test/zwilling-bytestrom.test.ts`) statt eines Skripts von Hand. Vier SHA-256 über den
|
|
33
|
+
fertigen Bon (58/80 mm, mit und ohne Marke) stehen wortgleich im Dart-Paket; wer in
|
|
34
|
+
einem der beiden Pakete am Druckweg dreht, macht dort oder hier rot. Die bisherigen
|
|
35
|
+
gemeinsamen Prüffälle deckten Raster, Zeilen und Blatt ab — alles Stufen vor den Bytes.
|
|
36
|
+
|
|
7
37
|
## 0.25.0
|
|
8
38
|
|
|
9
39
|
- ESC/POS: den Sofort-Reset der Ausrichtung direkt nach QR-Code, QR-Rasterbild und
|
|
@@ -49,7 +49,7 @@ export interface CreatePrintJobOptions {
|
|
|
49
49
|
quelle?: string;
|
|
50
50
|
/** Firmenlogo als fertiges Rasterbild (`logoRaster`); der Server dekodiert keine Bilder. */
|
|
51
51
|
logo?: DruckLogo | null;
|
|
52
|
-
/**
|
|
52
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
53
53
|
marke?: boolean;
|
|
54
54
|
}
|
|
55
55
|
export declare function createPrintJob(rufen: InternerTransport, o: CreatePrintJobOptions): Promise<DruckJob>;
|
|
@@ -189,6 +189,25 @@ export declare function escPosBytes(doc: EscPosDocument): Uint8Array;
|
|
|
189
189
|
* sie beim Initialisieren.
|
|
190
190
|
*/
|
|
191
191
|
export declare function escPosReset(doc: EscPosDocument): void;
|
|
192
|
+
/**
|
|
193
|
+
* `GS L` + `GS W`: linker Rand auf 0, Druckbereich auf die Breite des Blatts.
|
|
194
|
+
*
|
|
195
|
+
* **Warum das noetig ist.** `ESC a 1` mittelt nicht im Blatt, sondern im
|
|
196
|
+
* Druckbereich des *Geraets*. Steht das Blatt auf 58 mm (32 Zeichen) und
|
|
197
|
+
* haengt ein 80-mm-Drucker daran, setzt er den Text in die linken 384 Punkte,
|
|
198
|
+
* mittelt QR, Logo und Marke aber in seinen 576 -- am Papier sitzt dann alles
|
|
199
|
+
* Bildhafte gegenueber dem Text nach rechts gerueckt. Am Geraet nachgestellt
|
|
200
|
+
* und bestaetigt: mit diesen acht Bytes im Vorspann steht beides buendig.
|
|
201
|
+
*
|
|
202
|
+
* Der Befehl beschreibt also nicht das Papier, sondern das Blatt: er sagt dem
|
|
203
|
+
* Drucker, welche Flaeche gemeint ist, statt ihn raten zu lassen. Passt das
|
|
204
|
+
* Geraet ohnehin zum Blatt (der Regelfall), ist es sein eigener Vorgabewert
|
|
205
|
+
* und aendert am Druckbild nichts.
|
|
206
|
+
*
|
|
207
|
+
* Es ist dieselbe Fehlerklasse wie in 0.24.0 und 0.25.0: eine Ausrichtung,
|
|
208
|
+
* die sich am falschen Bezug orientiert.
|
|
209
|
+
*/
|
|
210
|
+
export declare function escPosSetDruckbereich(doc: EscPosDocument): void;
|
|
192
211
|
/**
|
|
193
212
|
* `ESC t n`: Codepage waehlen. Sie gilt bis zum naechsten `escPosReset` und
|
|
194
213
|
* wird von diesem erneut gesendet. `null` schaltet die Vorgabe ab; dann
|
|
@@ -206,8 +225,18 @@ export declare function escPosSetGlobalFont(doc: EscPosDocument, font: PosFont |
|
|
|
206
225
|
* Sendet die Stilbefehle, die sich gegenueber dem zuletzt gesendeten Stand
|
|
207
226
|
* geaendert haben. Fehlende Felder in [styles] gelten als Vorgabe: wer fett
|
|
208
227
|
* weglaesst, schaltet fett also ab.
|
|
228
|
+
*
|
|
229
|
+
* `zeilenanfang` (Vorgabe `true`) sagt, ob dieser Aufruf am Anfang einer
|
|
230
|
+
* Druckzeile steht. Nur dort nimmt der Drucker `ESC a` (Ausrichtung)
|
|
231
|
+
* ueberhaupt an; mitten in der Zeile verwirft er den Befehl wortlos. Der
|
|
232
|
+
* Bytestrom bekommt ihn trotzdem -- die Bytefolge soll sich dadurch nicht
|
|
233
|
+
* aendern --, aber der intern gemerkte Zustand darf sich NICHT auf den neuen
|
|
234
|
+
* Wert stellen: sonst haelt eine spaetere, echte Zeile die Ausrichtung
|
|
235
|
+
* faelschlich schon fuer gesetzt und unterlaesst den Befehl.
|
|
209
236
|
*/
|
|
210
|
-
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles
|
|
237
|
+
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles, optionen?: {
|
|
238
|
+
zeilenanfang?: boolean;
|
|
239
|
+
}): void;
|
|
211
240
|
/**
|
|
212
241
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
213
242
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|
|
@@ -35,6 +35,7 @@ exports.escPosMaxCharsPerLine = escPosMaxCharsPerLine;
|
|
|
35
35
|
exports.createEscPosDocument = createEscPosDocument;
|
|
36
36
|
exports.escPosBytes = escPosBytes;
|
|
37
37
|
exports.escPosReset = escPosReset;
|
|
38
|
+
exports.escPosSetDruckbereich = escPosSetDruckbereich;
|
|
38
39
|
exports.escPosSetGlobalCodeTable = escPosSetGlobalCodeTable;
|
|
39
40
|
exports.escPosSetGlobalFont = escPosSetGlobalFont;
|
|
40
41
|
exports.escPosSetStyles = escPosSetStyles;
|
|
@@ -71,6 +72,8 @@ const C_UNDERLINE_OFF = [ESC, 0x2d, 0x00]; // ESC - 0
|
|
|
71
72
|
const C_UNDERLINE_1DOT = [ESC, 0x2d, 0x01]; // ESC - 1
|
|
72
73
|
const C_BOLD_ON = [ESC, 0x45, 0x01]; // ESC E 1
|
|
73
74
|
const C_BOLD_OFF = [ESC, 0x45, 0x00]; // ESC E 0
|
|
75
|
+
const C_LEFT_MARGIN = [GS, 0x4c]; // GS L nL nH
|
|
76
|
+
const C_PRINT_AREA = [GS, 0x57]; // GS W nL nH
|
|
74
77
|
const C_FONT_A = [ESC, 0x4d, 0x00]; // ESC M 0
|
|
75
78
|
const C_FONT_B = [ESC, 0x4d, 0x01]; // ESC M 1
|
|
76
79
|
const C_TURN90_ON = [ESC, 0x56, 0x01]; // ESC V 1
|
|
@@ -92,6 +95,14 @@ const QR_KORREKTUR = { L: 48, M: 49, Q: 50, H: 51 };
|
|
|
92
95
|
const PAPIER_MM = { mm58: 58, mm80: 80 };
|
|
93
96
|
/** Druckbreite in Punkten je Papierformat — aus enums.dart (EscPaperSize.width). */
|
|
94
97
|
const PAPIER_BREITE = { mm58: 372, mm80: 558 };
|
|
98
|
+
/**
|
|
99
|
+
* Breite des **Blatts** in Punkten: Zeichen je Zeile in Font A mal 12 Punkte.
|
|
100
|
+
*
|
|
101
|
+
* Das ist bewusst NICHT `PAPIER_BREITE` (372/558, das Erbe aus enums.dart fuer
|
|
102
|
+
* die Spaltenrechnung), sondern das Raster, in dem der Text wirklich steht --
|
|
103
|
+
* ein Zeichen in Font A ist 12 Punkte breit, 32 Zeichen also 384 Punkte.
|
|
104
|
+
*/
|
|
105
|
+
const BLATT_PUNKTE = { mm58: 32 * 12, mm80: 48 * 12 };
|
|
95
106
|
/** Zeichen je Zeile nach Papier und Schrift — aus generator.dart. */
|
|
96
107
|
const ZEICHEN_JE_ZEILE = {
|
|
97
108
|
mm58: { fontA: 32, fontB: 42 },
|
|
@@ -255,6 +266,7 @@ function escPosBytes(doc) {
|
|
|
255
266
|
*/
|
|
256
267
|
function escPosReset(doc) {
|
|
257
268
|
anhaengen(doc, C_INIT);
|
|
269
|
+
escPosSetDruckbereich(doc);
|
|
258
270
|
doc.styles = vollstaendigeStile();
|
|
259
271
|
// Wie `PrintPaper.reset()` im Flutter-Zwilling: ein neu begonnener Beleg
|
|
260
272
|
// erbt die QR-Meldungen des vorigen nicht.
|
|
@@ -263,6 +275,29 @@ function escPosReset(doc) {
|
|
|
263
275
|
escPosSetGlobalCodeTable(doc, doc.globalCodeTable);
|
|
264
276
|
escPosSetGlobalFont(doc, doc.globalFont);
|
|
265
277
|
}
|
|
278
|
+
/**
|
|
279
|
+
* `GS L` + `GS W`: linker Rand auf 0, Druckbereich auf die Breite des Blatts.
|
|
280
|
+
*
|
|
281
|
+
* **Warum das noetig ist.** `ESC a 1` mittelt nicht im Blatt, sondern im
|
|
282
|
+
* Druckbereich des *Geraets*. Steht das Blatt auf 58 mm (32 Zeichen) und
|
|
283
|
+
* haengt ein 80-mm-Drucker daran, setzt er den Text in die linken 384 Punkte,
|
|
284
|
+
* mittelt QR, Logo und Marke aber in seinen 576 -- am Papier sitzt dann alles
|
|
285
|
+
* Bildhafte gegenueber dem Text nach rechts gerueckt. Am Geraet nachgestellt
|
|
286
|
+
* und bestaetigt: mit diesen acht Bytes im Vorspann steht beides buendig.
|
|
287
|
+
*
|
|
288
|
+
* Der Befehl beschreibt also nicht das Papier, sondern das Blatt: er sagt dem
|
|
289
|
+
* Drucker, welche Flaeche gemeint ist, statt ihn raten zu lassen. Passt das
|
|
290
|
+
* Geraet ohnehin zum Blatt (der Regelfall), ist es sein eigener Vorgabewert
|
|
291
|
+
* und aendert am Druckbild nichts.
|
|
292
|
+
*
|
|
293
|
+
* Es ist dieselbe Fehlerklasse wie in 0.24.0 und 0.25.0: eine Ausrichtung,
|
|
294
|
+
* die sich am falschen Bezug orientiert.
|
|
295
|
+
*/
|
|
296
|
+
function escPosSetDruckbereich(doc) {
|
|
297
|
+
const punkte = BLATT_PUNKTE[doc.paperSize];
|
|
298
|
+
anhaengen(doc, [...C_LEFT_MARGIN, 0, 0]);
|
|
299
|
+
anhaengen(doc, [...C_PRINT_AREA, punkte & 0xff, punkte >> 8]);
|
|
300
|
+
}
|
|
266
301
|
/**
|
|
267
302
|
* `ESC t n`: Codepage waehlen. Sie gilt bis zum naechsten `escPosReset` und
|
|
268
303
|
* wird von diesem erneut gesendet. `null` schaltet die Vorgabe ab; dann
|
|
@@ -298,13 +333,23 @@ function escPosSetGlobalFont(doc, font, options = {}) {
|
|
|
298
333
|
* Sendet die Stilbefehle, die sich gegenueber dem zuletzt gesendeten Stand
|
|
299
334
|
* geaendert haben. Fehlende Felder in [styles] gelten als Vorgabe: wer fett
|
|
300
335
|
* weglaesst, schaltet fett also ab.
|
|
336
|
+
*
|
|
337
|
+
* `zeilenanfang` (Vorgabe `true`) sagt, ob dieser Aufruf am Anfang einer
|
|
338
|
+
* Druckzeile steht. Nur dort nimmt der Drucker `ESC a` (Ausrichtung)
|
|
339
|
+
* ueberhaupt an; mitten in der Zeile verwirft er den Befehl wortlos. Der
|
|
340
|
+
* Bytestrom bekommt ihn trotzdem -- die Bytefolge soll sich dadurch nicht
|
|
341
|
+
* aendern --, aber der intern gemerkte Zustand darf sich NICHT auf den neuen
|
|
342
|
+
* Wert stellen: sonst haelt eine spaetere, echte Zeile die Ausrichtung
|
|
343
|
+
* faelschlich schon fuer gesetzt und unterlaesst den Befehl.
|
|
301
344
|
*/
|
|
302
|
-
function escPosSetStyles(doc, styles = {}) {
|
|
345
|
+
function escPosSetStyles(doc, styles = {}, optionen = {}) {
|
|
303
346
|
const neu = vollstaendigeStile(styles);
|
|
304
347
|
const alt = doc.styles;
|
|
348
|
+
const zeilenanfang = optionen.zeilenanfang ?? true;
|
|
305
349
|
if (neu.align !== alt.align) {
|
|
306
350
|
anhaengen(doc, neu.align === 'left' ? C_ALIGN_LEFT : neu.align === 'center' ? C_ALIGN_CENTER : C_ALIGN_RIGHT);
|
|
307
|
-
|
|
351
|
+
if (zeilenanfang)
|
|
352
|
+
alt.align = neu.align;
|
|
308
353
|
}
|
|
309
354
|
if (neu.bold !== alt.bold) {
|
|
310
355
|
anhaengen(doc, neu.bold ? C_BOLD_ON : C_BOLD_OFF);
|
|
@@ -454,12 +499,23 @@ function textIntern(doc, textBytes, optionen = {}) {
|
|
|
454
499
|
const stile = vollstaendigeStile(optionen.styles);
|
|
455
500
|
const colInd = optionen.colInd ?? 0;
|
|
456
501
|
const colWidth = optionen.colWidth ?? 12;
|
|
502
|
+
const volleZeile = colInd === 0 && colWidth === 12;
|
|
503
|
+
// Bekommt die Spalte ohnehin eine von Hand berechnete Position (siehe
|
|
504
|
+
// unten), darf an den Drucker nur "links" gehen -- nie ihre eigentliche
|
|
505
|
+
// Ausrichtung. `ESC a` wirkt nicht auf die Spalte, sondern auf die ganze
|
|
506
|
+
// Zeile bis zum naechsten Zeilenumbruch: eine zentrierte oder rechts-
|
|
507
|
+
// buendige erste Spalte wuerde sonst den Drucker seine eigene Zentrierung
|
|
508
|
+
// auf jede weitere Spalte derselben Zeile anwenden lassen -- dieselbe
|
|
509
|
+
// Fehlerklasse wie der behobene Ausrichtungsfehler, eine Ebene tiefer.
|
|
510
|
+
// Die tatsaechliche Ausrichtung fliesst nur noch in die Positionsrechnung
|
|
511
|
+
// unten ein (ueber `stile`, nicht ueber diesen Befehl).
|
|
512
|
+
const stileFuerDrucker = colInd === 0 && !volleZeile ? { ...optionen.styles, align: 'left' } : optionen.styles;
|
|
457
513
|
// Ausrichtung vor Position -- `ESC a` gilt nur am Zeilenanfang, nach `ESC $`
|
|
458
514
|
// verwirft der Drucker ihn. Zwilling von `_text` in generator.dart.
|
|
459
|
-
escPosSetStyles(doc,
|
|
515
|
+
escPosSetStyles(doc, stileFuerDrucker, { zeilenanfang: colInd === 0 });
|
|
460
516
|
// Eine volle Zeile beginnt am linken Rand; ein Positionsbefehl dafuer waere
|
|
461
517
|
// nicht nur ueberfluessig, er entwertet die Ausrichtung.
|
|
462
|
-
if (!
|
|
518
|
+
if (!volleZeile) {
|
|
463
519
|
const breiteJeZeichen = zeichenBreite(doc, stile);
|
|
464
520
|
let von = spaltenPosition(doc, colInd);
|
|
465
521
|
if (colWidth !== 12) {
|
package/dist/cjs/react/index.js
CHANGED
|
@@ -7,6 +7,7 @@ exports.BelegBlattView = BelegBlattView;
|
|
|
7
7
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
8
|
const react_1 = require("react");
|
|
9
9
|
const blatt_js_1 = require("../receipt/blatt.js");
|
|
10
|
+
const marke_daten_js_1 = require("../receipt/marke-daten.js");
|
|
10
11
|
const AUSRICHTUNG = {
|
|
11
12
|
left: 'left',
|
|
12
13
|
center: 'center',
|
|
@@ -88,6 +89,11 @@ function BelegBlattZeilen({ blatt, logoUrl, renderQr, qrVerdeckt = false, qrVerd
|
|
|
88
89
|
return ((0, jsx_runtime_1.jsx)("div", { className: "keck-blatt-zeile", style: { whiteSpace: 'pre', height: '2ch', lineHeight: '2ch', overflow: 'hidden', fontWeight: b.fett ? 'bold' : 'normal' }, children: b.text }, i));
|
|
89
90
|
case 'logo':
|
|
90
91
|
return ((0, jsx_runtime_1.jsx)("div", { className: "keck-blatt-logo", style: { height: `${b.hoeheZeilen * 2}ch`, display: 'flex', justifyContent: 'center' }, children: logoUrl === undefined ? null : ((0, jsx_runtime_1.jsx)("img", { src: logoUrl, alt: "", "aria-hidden": "true", style: { width: `${b.breiteAnteil * z}ch`, height: `${b.hoeheZeilen * 2}ch`, objectFit: 'contain' } })) }, i));
|
|
92
|
+
case 'marke':
|
|
93
|
+
// Kein Rasterbild wie am Bon: Dieses Paket hat bewusst keine
|
|
94
|
+
// Abhaengigkeiten, und die Pfade liegen ohnehin schon vor (PDF
|
|
95
|
+
// zeichnet dieselben). Ein SVG bleibt in jeder Aufloesung scharf.
|
|
96
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: "keck-blatt-marke", style: { height: `${b.hoehe / blatt_js_1.PUNKTE_JE_ZEICHEN}ch`, display: 'flex', justifyContent: 'center' }, children: (0, jsx_runtime_1.jsx)("svg", { viewBox: `0 0 ${marke_daten_js_1.MARKE_PFADE.breite} ${marke_daten_js_1.MARKE_PFADE.hoehe}`, width: `${b.breite / blatt_js_1.PUNKTE_JE_ZEICHEN}ch`, height: `${b.hoehe / blatt_js_1.PUNKTE_JE_ZEICHEN}ch`, role: "img", "aria-label": "Kasseneck", fill: "currentColor", children: marke_daten_js_1.MARKE_PFADE.pfade.map((d, j) => (0, jsx_runtime_1.jsx)("path", { d: d }, j)) }) }, i));
|
|
91
97
|
case 'qr': {
|
|
92
98
|
// Auch beim Anteil 0 (leer oder in keine Version passend) bekommt
|
|
93
99
|
// `renderQr` die Nutzlast: die Oberflaeche muss sagen koennen, dass
|
|
@@ -23,8 +23,6 @@ export declare const LOGO_STUFEN: Readonly<Record<LogoStufe, {
|
|
|
23
23
|
}>>;
|
|
24
24
|
export declare const PUNKTE_JE_ZEICHEN = 12;
|
|
25
25
|
export declare const PUNKTE_JE_ZEILE = 24;
|
|
26
|
-
/** Die Marke am Belegende (Konto-Flag `kreiseck_logo`) -- Text, damit jeder Weg sie gleich setzt. */
|
|
27
|
-
export declare const MARKE_TEXT = "erstellt mit Kasseneck";
|
|
28
26
|
export interface BlattLogo {
|
|
29
27
|
stufe: LogoStufe;
|
|
30
28
|
/** Pixelmass des Originalbilds -- ohne das laesst sich nicht einpassen. */
|
|
@@ -50,6 +48,10 @@ export type BlattBlock = {
|
|
|
50
48
|
readonly art: 'qr';
|
|
51
49
|
readonly nutzlast: string;
|
|
52
50
|
readonly breiteAnteil: number;
|
|
51
|
+
} | {
|
|
52
|
+
readonly art: 'marke';
|
|
53
|
+
readonly breite: number;
|
|
54
|
+
readonly hoehe: number;
|
|
53
55
|
};
|
|
54
56
|
export interface BelegBlatt {
|
|
55
57
|
readonly zeichen: number;
|
|
@@ -60,7 +62,7 @@ export interface BelegBlattOptionen {
|
|
|
60
62
|
zeichen?: number;
|
|
61
63
|
/** Firmenlogo; ohne Angabe kein Logo-Block. */
|
|
62
64
|
logo?: BlattLogo | null;
|
|
63
|
-
/**
|
|
65
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
64
66
|
marke?: boolean;
|
|
65
67
|
/** Geraete-Einstellung fuer die QR-Modulgroesse; Vorgabe `auto` (hoechstens 6 Punkte je Modul) — wie die Druckwege. */
|
|
66
68
|
qrGroesse?: QrModulGroesse;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LOGO_PIXEL_MAX = exports.
|
|
3
|
+
exports.LOGO_PIXEL_MAX = exports.PUNKTE_JE_ZEILE = exports.PUNKTE_JE_ZEICHEN = exports.LOGO_STUFEN = void 0;
|
|
4
4
|
exports.papierFuerZeichen = papierFuerZeichen;
|
|
5
5
|
exports.logoPixelZulaessig = logoPixelZulaessig;
|
|
6
6
|
exports.logoMass = logoMass;
|
|
@@ -9,6 +9,7 @@ exports.qrBlattAnteil = qrBlattAnteil;
|
|
|
9
9
|
exports.belegBlatt = belegBlatt;
|
|
10
10
|
const index_js_1 = require("../printing/index.js");
|
|
11
11
|
const grid_js_1 = require("./grid.js");
|
|
12
|
+
const marke_daten_js_1 = require("./marke-daten.js");
|
|
12
13
|
/** Kasten je Stufe: Anteil der Blattbreite und Hoehe in Zeilen (Werte der Web-Kasse). */
|
|
13
14
|
exports.LOGO_STUFEN = {
|
|
14
15
|
S: { breiteAnteil: 0.42, hoeheZeilen: 5 },
|
|
@@ -18,8 +19,6 @@ exports.LOGO_STUFEN = {
|
|
|
18
19
|
};
|
|
19
20
|
exports.PUNKTE_JE_ZEICHEN = 12;
|
|
20
21
|
exports.PUNKTE_JE_ZEILE = 24;
|
|
21
|
-
/** Die Marke am Belegende (Konto-Flag `kreiseck_logo`) -- Text, damit jeder Weg sie gleich setzt. */
|
|
22
|
-
exports.MARKE_TEXT = 'erstellt mit Kasseneck';
|
|
23
22
|
/**
|
|
24
23
|
* 32 Zeichen sind 58 mm, 48 sind 80 mm; andere Breiten behalten das Papier des
|
|
25
24
|
* Layouts. Der QR-Anteil (`qrBlattAnteil`) wird dann fuer die Kopfbreite
|
|
@@ -97,11 +96,6 @@ function qrBlattAnteil(nutzlast, papier, groesse = 'auto') {
|
|
|
97
96
|
return mass.breitePunkte / papierPunkte;
|
|
98
97
|
return ((mass.module + 2 * index_js_1.QR_RUHEZONE_MODULE) * (0, index_js_1.qrRasterPunkte)(papier, mass.module, { groesse })) / papierPunkte;
|
|
99
98
|
}
|
|
100
|
-
function zentriert(text, zeichen) {
|
|
101
|
-
const t = text.length > zeichen ? text.slice(0, zeichen) : text;
|
|
102
|
-
const links = Math.floor((zeichen - t.length) / 2);
|
|
103
|
-
return ' '.repeat(links) + t + ' '.repeat(zeichen - t.length - links);
|
|
104
|
-
}
|
|
105
99
|
function belegBlatt(layout, optionen = {}) {
|
|
106
100
|
const grid = (0, grid_js_1.renderReceiptGrid)(layout, optionen.zeichen === undefined ? {} : { zeichen: optionen.zeichen });
|
|
107
101
|
const zeichen = grid.zeichen;
|
|
@@ -130,8 +124,15 @@ function belegBlatt(layout, optionen = {}) {
|
|
|
130
124
|
for (; i < grid.lines.length; i += 1)
|
|
131
125
|
bloecke.push(block(grid.lines[i]));
|
|
132
126
|
if (optionen.marke === true) {
|
|
133
|
-
|
|
134
|
-
|
|
127
|
+
// Das Raster deckt nur die beiden bekannten Papierbreiten ab (`MARKE_RASTER`).
|
|
128
|
+
// Faende sich hier eine dritte, faellt die Marke weg statt ein Raster in
|
|
129
|
+
// falscher Groesse zu drucken -- derselbe Grundsatz wie beim Firmenlogo:
|
|
130
|
+
// eine Marke ist Zierde, der Beleg ist Pflicht.
|
|
131
|
+
const raster = marke_daten_js_1.MARKE_RASTER[papier];
|
|
132
|
+
if (raster) {
|
|
133
|
+
bloecke.push(leerzeile);
|
|
134
|
+
bloecke.push({ art: 'marke', breite: raster.breite, hoehe: raster.hoehe });
|
|
135
|
+
}
|
|
135
136
|
}
|
|
136
137
|
return { zeichen, bloecke };
|
|
137
138
|
}
|
|
@@ -35,7 +35,7 @@ export interface EposPrintXmlOptions {
|
|
|
35
35
|
cut?: boolean;
|
|
36
36
|
/** Firmenlogo; ohne Angabe kein Logo. */
|
|
37
37
|
logo?: DruckLogo | null;
|
|
38
|
-
/**
|
|
38
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
39
39
|
marke?: boolean;
|
|
40
40
|
}
|
|
41
41
|
/**
|
|
@@ -86,7 +86,7 @@ export interface EposDirectOptions {
|
|
|
86
86
|
qrGroesse?: QrModulGroesse;
|
|
87
87
|
/** Firmenlogo; ohne Angabe kein Logo. */
|
|
88
88
|
logo?: DruckLogo | null;
|
|
89
|
-
/**
|
|
89
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
90
90
|
marke?: boolean;
|
|
91
91
|
timeoutMs?: number;
|
|
92
92
|
}
|
package/dist/cjs/receipt/epos.js
CHANGED
|
@@ -12,7 +12,9 @@ exports.eposDirectPrint = eposDirectPrint;
|
|
|
12
12
|
exports.eposDirectStatus = eposDirectStatus;
|
|
13
13
|
const index_js_1 = require("../printing/index.js");
|
|
14
14
|
const grid_js_1 = require("./grid.js");
|
|
15
|
+
const blatt_js_1 = require("./blatt.js");
|
|
15
16
|
const layout_escpos_js_1 = require("./layout-escpos.js");
|
|
17
|
+
const marke_js_1 = require("./marke.js");
|
|
16
18
|
function eposXmlEscape(text) {
|
|
17
19
|
return text.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''');
|
|
18
20
|
}
|
|
@@ -37,6 +39,7 @@ function eposPrintXml(layout, options = {}) {
|
|
|
37
39
|
*/
|
|
38
40
|
function eposPrintXmlErgebnis(layout, options = {}) {
|
|
39
41
|
const zeichen = options.zeichen ?? grid_js_1.ZEICHEN_JE_PAPIER[layout.paperSize];
|
|
42
|
+
const papier = (0, blatt_js_1.papierFuerZeichen)(zeichen, layout.paperSize);
|
|
40
43
|
const deckel = options.qrGroesse ?? 'auto';
|
|
41
44
|
const blatt = (0, layout_escpos_js_1.blattFuerDruck)(layout, { zeichen, logo: options.logo, marke: options.marke, qrGroesse: deckel });
|
|
42
45
|
const fest = options.qrBreite === undefined
|
|
@@ -106,6 +109,11 @@ function eposPrintXmlErgebnis(layout, options = {}) {
|
|
|
106
109
|
out.push('<text align="left"/>');
|
|
107
110
|
}
|
|
108
111
|
break;
|
|
112
|
+
case 'marke':
|
|
113
|
+
out.push('<text align="center"/>');
|
|
114
|
+
out.push(eposBildXml((0, marke_js_1.markeBild)(papier)));
|
|
115
|
+
out.push('<text align="left"/>');
|
|
116
|
+
break;
|
|
109
117
|
case 'qr': {
|
|
110
118
|
const breite = qrBreiteFuer(block.nutzlast);
|
|
111
119
|
if (breite === null)
|
|
@@ -2,5 +2,7 @@ export { type LayoutAlign, type LayoutColumn, type LayoutTextLine, type LayoutCo
|
|
|
2
2
|
export { type EscPosLayoutOptions, type EscPosLayoutErgebnis, type QrPrintMode, type DruckLogo, pruefeLogoRaster, escPosLayoutBytes, escPosLayoutErgebnis, } from './layout-escpos.js';
|
|
3
3
|
export { type GridLine, type GridLineKind, type ReceiptGrid, type RenderReceiptGridOptions, renderReceiptGrid, gridSpaltenBreiten, gridAlsText, ZEICHEN_JE_PAPIER, } from './grid.js';
|
|
4
4
|
export { type EposPrintXmlOptions, type EposPrintErgebnis, type EposDirectOptions, type EposResponse, EposConnectionError, eposPrintXml, eposPrintXmlErgebnis, eposXmlEscape, eposBildXml, eposServiceUrl, eposSoapEnvelope, eposParseResponse, eposDirectPrint, eposDirectStatus } from './epos.js';
|
|
5
|
-
export { type LogoStufe, type BlattLogo, type LogoMass, type BlattBlock, type BelegBlatt, type BelegBlattOptionen, LOGO_STUFEN, LOGO_PIXEL_MAX, PUNKTE_JE_ZEICHEN, PUNKTE_JE_ZEILE,
|
|
5
|
+
export { type LogoStufe, type BlattLogo, type LogoMass, type BlattBlock, type BelegBlatt, type BelegBlattOptionen, LOGO_STUFEN, LOGO_PIXEL_MAX, PUNKTE_JE_ZEICHEN, PUNKTE_JE_ZEILE, papierFuerZeichen, logoMass, logoPixelZulaessig, logoRasterMass, qrBlattAnteil, belegBlatt, } from './blatt.js';
|
|
6
6
|
export { logoRaster } from './bild.js';
|
|
7
|
+
export { type MarkeRasterDaten, MARKE_RASTER, MARKE_PFADE } from './marke-daten.js';
|
|
8
|
+
export { markeBild } from './marke.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.logoRaster = exports.belegBlatt = exports.qrBlattAnteil = exports.logoRasterMass = exports.logoPixelZulaessig = exports.logoMass = exports.papierFuerZeichen = exports.
|
|
3
|
+
exports.markeBild = exports.MARKE_PFADE = exports.MARKE_RASTER = exports.logoRaster = exports.belegBlatt = exports.qrBlattAnteil = exports.logoRasterMass = exports.logoPixelZulaessig = exports.logoMass = exports.papierFuerZeichen = exports.PUNKTE_JE_ZEILE = exports.PUNKTE_JE_ZEICHEN = exports.LOGO_PIXEL_MAX = exports.LOGO_STUFEN = exports.eposDirectStatus = exports.eposDirectPrint = exports.eposParseResponse = exports.eposSoapEnvelope = exports.eposServiceUrl = exports.eposBildXml = exports.eposXmlEscape = exports.eposPrintXmlErgebnis = exports.eposPrintXml = exports.EposConnectionError = exports.ZEICHEN_JE_PAPIER = exports.gridAlsText = exports.gridSpaltenBreiten = exports.renderReceiptGrid = exports.escPosLayoutErgebnis = exports.escPosLayoutBytes = exports.pruefeLogoRaster = exports.formatCents = exports.SMALL_BUSINESS_NOTICE = exports.AKTUELLES_REGELWERK = exports.receiptZdaText = exports.receiptIsSmallBusinessConsistent = exports.receiptAmountsAreZero = exports.receiptIsZero = exports.receiptSignatureIsTest = exports.receiptSignatureFailed = exports.buildReceiptLayout = void 0;
|
|
4
4
|
var layout_js_1 = require("./layout.js");
|
|
5
5
|
Object.defineProperty(exports, "buildReceiptLayout", { enumerable: true, get: function () { return layout_js_1.buildReceiptLayout; } });
|
|
6
6
|
Object.defineProperty(exports, "receiptSignatureFailed", { enumerable: true, get: function () { return layout_js_1.receiptSignatureFailed; } });
|
|
@@ -37,7 +37,6 @@ Object.defineProperty(exports, "LOGO_STUFEN", { enumerable: true, get: function
|
|
|
37
37
|
Object.defineProperty(exports, "LOGO_PIXEL_MAX", { enumerable: true, get: function () { return blatt_js_1.LOGO_PIXEL_MAX; } });
|
|
38
38
|
Object.defineProperty(exports, "PUNKTE_JE_ZEICHEN", { enumerable: true, get: function () { return blatt_js_1.PUNKTE_JE_ZEICHEN; } });
|
|
39
39
|
Object.defineProperty(exports, "PUNKTE_JE_ZEILE", { enumerable: true, get: function () { return blatt_js_1.PUNKTE_JE_ZEILE; } });
|
|
40
|
-
Object.defineProperty(exports, "MARKE_TEXT", { enumerable: true, get: function () { return blatt_js_1.MARKE_TEXT; } });
|
|
41
40
|
Object.defineProperty(exports, "papierFuerZeichen", { enumerable: true, get: function () { return blatt_js_1.papierFuerZeichen; } });
|
|
42
41
|
Object.defineProperty(exports, "logoMass", { enumerable: true, get: function () { return blatt_js_1.logoMass; } });
|
|
43
42
|
Object.defineProperty(exports, "logoPixelZulaessig", { enumerable: true, get: function () { return blatt_js_1.logoPixelZulaessig; } });
|
|
@@ -46,3 +45,8 @@ Object.defineProperty(exports, "qrBlattAnteil", { enumerable: true, get: functio
|
|
|
46
45
|
Object.defineProperty(exports, "belegBlatt", { enumerable: true, get: function () { return blatt_js_1.belegBlatt; } });
|
|
47
46
|
var bild_js_1 = require("./bild.js");
|
|
48
47
|
Object.defineProperty(exports, "logoRaster", { enumerable: true, get: function () { return bild_js_1.logoRaster; } });
|
|
48
|
+
var marke_daten_js_1 = require("./marke-daten.js");
|
|
49
|
+
Object.defineProperty(exports, "MARKE_RASTER", { enumerable: true, get: function () { return marke_daten_js_1.MARKE_RASTER; } });
|
|
50
|
+
Object.defineProperty(exports, "MARKE_PFADE", { enumerable: true, get: function () { return marke_daten_js_1.MARKE_PFADE; } });
|
|
51
|
+
var marke_js_1 = require("./marke.js");
|
|
52
|
+
Object.defineProperty(exports, "markeBild", { enumerable: true, get: function () { return marke_js_1.markeBild; } });
|
|
@@ -80,7 +80,7 @@ export interface EscPosLayoutOptions {
|
|
|
80
80
|
qrMatrix?: (nutzlast: string) => QrMatrix;
|
|
81
81
|
/** Firmenlogo; ohne Angabe kein Logo (Bestand). */
|
|
82
82
|
logo?: DruckLogo | null;
|
|
83
|
-
/**
|
|
83
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
84
84
|
marke?: boolean;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
@@ -7,6 +7,7 @@ exports.escPosLayoutErgebnis = escPosLayoutErgebnis;
|
|
|
7
7
|
const index_js_1 = require("../printing/index.js");
|
|
8
8
|
const blatt_js_1 = require("./blatt.js");
|
|
9
9
|
const grid_js_1 = require("./grid.js");
|
|
10
|
+
const marke_js_1 = require("./marke.js");
|
|
10
11
|
/** Das Rasterbild muss genau so gross sein, wie das Blatt das Logo setzt -- sonst stuende am Bon ein anderes Logo als am Schirm. */
|
|
11
12
|
function pruefeLogoRaster(logo, mass, zeichen) {
|
|
12
13
|
const soll = (0, blatt_js_1.logoRasterMass)(mass, zeichen);
|
|
@@ -154,6 +155,9 @@ function escPosLayoutErgebnis(layout, options = {}) {
|
|
|
154
155
|
if (options.logo)
|
|
155
156
|
(0, index_js_1.escPosRasterBild)(doc, options.logo.raster, { align: 'center' });
|
|
156
157
|
break;
|
|
158
|
+
case 'marke':
|
|
159
|
+
(0, index_js_1.escPosRasterBild)(doc, (0, marke_js_1.markeBild)(paperSize), { align: 'center' });
|
|
160
|
+
break;
|
|
157
161
|
case 'zeile':
|
|
158
162
|
if (block.leer)
|
|
159
163
|
(0, index_js_1.escPosFeed)(doc, 1);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { PosPaperSize } from '../printing/escpos.js';
|
|
2
|
+
export interface MarkeRasterDaten {
|
|
3
|
+
readonly breite: number;
|
|
4
|
+
readonly hoehe: number;
|
|
5
|
+
/** Rasterzeilen als Bits, MSB zuerst, je Zeile auf volle Bytes aufgefuellt; base64. */
|
|
6
|
+
readonly bits: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const MARKE_RASTER: Readonly<Record<PosPaperSize, MarkeRasterDaten>>;
|
|
9
|
+
/** Die Marke als Pfade (fuer PDF und Bildschirm), im Kasten der Markendatei. */
|
|
10
|
+
export declare const MARKE_PFADE: {
|
|
11
|
+
readonly breite: number;
|
|
12
|
+
readonly hoehe: number;
|
|
13
|
+
readonly pfade: readonly string[];
|
|
14
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MARKE_PFADE = exports.MARKE_RASTER = void 0;
|
|
4
|
+
exports.MARKE_RASTER = {
|
|
5
|
+
mm80: { breite: 352, hoehe: 51, bits: "////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8AAA////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAD+AAAAAAfgAAAD+AAH/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAP4AAAAAB+AAAAf4AA/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAA/gAAAAAH4AAAB/gAH/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAD+AAAAAAfgAAAH+AAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAP4AAAAAB+AAAAf4AD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAA/gAAAAAH4AAAB/gAf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf4AAD+AAAAAAfgAAAH+AD/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/gAAP4AAAAAB+AAAAf4Af8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAA/gAAAAAH4AAAB/gD/gAAPgAAAHgAAAHgAAAPgAAAAeAAAB8AAAB8AAf4AAD+AAAAAAfgAAAH+Af8AAP/4AAP/8AAP/4AAP/4AH4P/AAB//AAB//AB/gB/v4AAAAAB+AAAAf4D/gAD//4AD//8AD//4AD//4Afj//AAf//AAP//AH+AP8/gAAAAAH4AAAB/gf8AAf//wAf//4Af//wAf//wB+f/+AD//+AD//+Af4B/j+AAAAAAfgAAAH+D/gAD///gD///wD///gD///gH///4Af//8Af//8B/gP8P4AAAAAB+AAAAf4f8AAf///Af///Af///Af///Af///wD///4B///4H+B/g/gAAAAAH4AAAB/j/gAB/gf8B/wP+D/gf8B/wP8B////Af+D/gP/D/wf4P+D+AAAAAAfgAAAH+f8AAH8AfwH8Af4P8Af4P8Af4H/gP+B/gD/A/wD/B/g/wP4AAAAAB+AAAAf7/wAA/wB/A/wA/g/gA/g/wA/gf8Af4P8AP8H+AH8H+H+A/gAAAAAH4AAAB///gAB+AH8D/AD+D+AD+D+AD/B/gB/g/wAfwfwAfwf4/wD+AAAAAAfgAAAH///AAAAAf4P+AAAP8AAAf4AH8H+AD+D+AB/B/AB/h/n+AP4AAAAAB+AAAAf//8AAAAB/gf+AAA/8AAB/AAfwfwAP4P4AH+P8AH+H+/wA/gAAAAAH4AAAB///4AAAAH+B//AAB//AAH+AD/B/AA/g/gAf4/wAAAf//AD+AAAAAAfgAAAH///wAAD//4D//wAH//gAf///8H8AD+D////j+AAAB//8AP4AAAAAB+AAAAf/j/AAB///gP//4AP//wB////wfwAP4f///+P4AAAH//wA/gAAAAAH4AAAB/8P+AAf//+AP//4Af//wH////B/AA/h////4/gAAAf//gD+AAAAAA/gAAAH/gf8AD///4Af//wAf//gf///8H8AD+H////j+AAAB///AP4AAAD//+AAAAf8A/wAf///gAP//gAf//B////wfwAP4f///+P4AAAH//8A/gAAAP//4AAAB/gD/gD/wH+AAH/+AAH/+H8AAAB/AA/g/gAAA/gAAAf/f4D+AAAA///gAAAH+AH/AP8Af4AAB/8AAD/4fwAAAH8AD+D+AAAD/AAAB/4/gP4AAAD//+AAAAf4AP8B/gB/gAAB/wAAB/h/AAfwfwAP4P4AD8P8AD+H/D/A/gAAAP//4AAAB/gA/4H8AH+D8AD/D8AD/H+AB/B/AA/g/gAP4fwAP4f4H8D+AAAA///gAAAH+AB/wfwAf4P4AH8fwAP8P4AH8H8AD+D/AB/h/AB/B/gf4P4AAAD//+AAAAf4AD/B/AD/g/gAfx/gA/g/wA/wfwAP4H8AH8H+AH8H+A/w/gAAAP//4AAAB/gAP+H+Af+D/AD/D/AD+D/AH+B/AA/gf4A/wP8A/wf4D/D+AAAA///gAAAH+AAf8f+P/8P/A/4P/A/4H/A/4H8AD+B/4P/A/8P+B/gH+P4AAAD//+AAAAf4AA/w////8f///g////Af///AfwAP4D///4B///4H+Af4/gAAAP//4AAAB/gAD/j////w///8B///8A///8B/AA/gH///AH///Af4A/z+AAAA///gAAAH+AAH/H//n/B///gD///gB///gH8AD+AP//4AP//4B/gD/P4AAAH//+AAAAf4AAf8P/8f8D//8AD//8AB//4AfwAP4Af//AAP//AH+AH+////////4AAAA/gAA/4f/A/wD//AAD/+AAB/+AB/AA/gAf/wAAP/wAPwAP7////////gAAAAAAAAAAHAAAAAeAAAAcAAAAeAAAAAAAAADgAAADgAAAAAAP///////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" },
|
|
6
|
+
mm58: { breite: 234, hoehe: 34, bits: "/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAA+AAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwAfgAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwA/AAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwB+AAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwD8AAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwH4AAAAAAAAAAAAAAAAAAAAAAAA+AAA8AAAA8AAHwPwAPwAD8AA+AAPwAAfAAPgAD4A+AAA8AAAA8AAHwfgB/8AP/AH/wB/8B5/wB/8Af/A+B+A8AAAA8AAHw/AD/+A//wP/4D/+B7/4D/+A//g+D8A8AAAA8AAHx+AH//B//4f/8H//B//4H//B//w+D4A8AAAA8AAHz+AHwfB8H4fB+H4fh/n8PwfB+P4+HwA8AAAA8AAH/8AHwPh8D4+A+PgPh+B8PgPj8D4+PgA8AAAA8AAH/+AHgPh8B4+AcPgPh8B8PgPj4D4+fgA8AAAA8AAH/+AAAPh+AA/gAPgHh8B8fAPj4D4+/AA8AAAA8AAH//AAA/h/4Af8AP//x8B8f//jwAA/+AA8AAAA8AAH/fgA//g//Af/gf//x8B8f//jwAA//AA8AAAA8AAH8PgD//gf/wH/4f//x8B8f//nwAA//AA8AAD/8AAH4PwH//gH/4B/8f//x8B8f//nwAA//gA8AAH/8AAH4H4P4PgA/4AP+PAAB8B8fAADwAA/vgA8AAH/8AAHwH4PgPgAD8AB+PgCh8B8fAAD4B4/HwA8AAH/8AAHwD8PgPj4B88A+PgHx8B8fAHj4D4+HwA8AAH/8AAHwB+Pgfj4B8+A+PgHh8B8PgPj4D4+D4A8AAH/8AAHwB+Pg/j8D4/A+HwPh8B8Pwfh8H4+D8A8AAH/8AAHwA/P//5//4f/+H//h8B8H//B//w+B8A8AAH/8AAHwAfn//4//wf/8D//B8B8D//A//g+B+A+AAH/8AAHwAfn/n4f/gP/4B/+B8B8B/8Af/A+A+A/////8AADwAPh+D4H+AB/gAf4B4A8AfwAH8AeAeA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" },
|
|
7
|
+
};
|
|
8
|
+
/** Die Marke als Pfade (fuer PDF und Bildschirm), im Kasten der Markendatei. */
|
|
9
|
+
exports.MARKE_PFADE = {
|
|
10
|
+
breite: 332,
|
|
11
|
+
hoehe: 48,
|
|
12
|
+
pfade: [
|
|
13
|
+
"M0 0H48V30H42V6H0Z",
|
|
14
|
+
"M0 6V48H30V42H6V6Z",
|
|
15
|
+
"M30 30H48V48H30Z",
|
|
16
|
+
"M73.028 43V6.642H79.918V23.496L96.03 6.642H104.457L90.359 21.376L104.722 43H96.56L85.695 26.199L79.918 31.287V43Z M113.515 43.636Q112.349 43.636 110.838 43.344Q109.328 43.053 107.923 42.258Q106.519 41.463 105.618 39.9Q104.717 38.336 104.717 35.792Q104.717 32.93 105.989 31.049Q107.261 29.167 109.566 28.081Q111.872 26.994 115.078 26.544Q118.285 26.093 122.101 26.093V23.814Q122.101 22.595 121.73 21.641Q121.359 20.687 120.379 20.131Q119.398 19.574 117.437 19.574Q115.476 19.574 114.363 20.051Q113.25 20.528 112.826 21.217Q112.402 21.906 112.402 22.648V23.39H106.148Q106.095 23.125 106.095 22.86Q106.095 22.595 106.095 22.224Q106.095 19.839 107.526 18.09Q108.957 16.341 111.501 15.414Q114.045 14.486 117.384 14.486Q121.2 14.486 123.664 15.546Q126.129 16.606 127.348 18.567Q128.567 20.528 128.567 23.337V36.481Q128.567 37.488 129.15 37.912Q129.733 38.336 130.422 38.336H132.118V42.788Q131.588 43 130.581 43.291Q129.574 43.583 128.09 43.583Q126.712 43.583 125.625 43.133Q124.539 42.682 123.797 41.834Q123.055 40.986 122.737 39.82H122.419Q121.518 40.933 120.272 41.808Q119.027 42.682 117.357 43.159Q115.688 43.636 113.515 43.636ZM115.476 38.336Q117.066 38.336 118.311 37.859Q119.557 37.382 120.378 36.534Q121.2 35.686 121.65 34.467Q122.101 33.248 122.101 31.817V30.545Q119.186 30.545 116.721 30.916Q114.257 31.287 112.799 32.294Q111.342 33.301 111.342 35.156Q111.342 36.11 111.792 36.825Q112.243 37.541 113.17 37.938Q114.098 38.336 115.476 38.336Z M145.893 43.636Q142.872 43.636 140.593 42.974Q138.314 42.311 136.777 41.145Q135.24 39.979 134.471 38.416Q133.703 36.852 133.703 34.997Q133.703 34.732 133.73 34.52Q133.756 34.308 133.756 34.202H140.116Q140.116 34.308 140.116 34.414Q140.116 34.52 140.116 34.626Q140.169 36.057 141.017 36.931Q141.865 37.806 143.243 38.177Q144.621 38.548 146.158 38.548Q147.536 38.548 148.781 38.257Q150.027 37.965 150.849 37.303Q151.67 36.64 151.67 35.58Q151.67 34.202 150.61 33.46Q149.55 32.718 147.827 32.241Q146.105 31.764 144.144 31.234Q142.395 30.757 140.646 30.174Q138.897 29.591 137.493 28.69Q136.088 27.789 135.214 26.358Q134.339 24.927 134.339 22.807Q134.339 20.74 135.24 19.203Q136.141 17.666 137.731 16.633Q139.321 15.599 141.494 15.069Q143.667 14.539 146.211 14.539Q148.702 14.539 150.743 15.069Q152.783 15.599 154.293 16.58Q155.804 17.56 156.625 18.965Q157.447 20.369 157.447 22.065Q157.447 22.436 157.421 22.807Q157.394 23.178 157.394 23.231H151.087V22.86Q151.087 21.853 150.477 21.138Q149.868 20.422 148.728 19.998Q147.589 19.574 145.893 19.574Q144.621 19.574 143.667 19.786Q142.713 19.998 142.103 20.369Q141.494 20.74 141.176 21.217Q140.858 21.694 140.858 22.277Q140.858 23.284 141.653 23.867Q142.448 24.45 143.8 24.874Q145.151 25.298 146.741 25.775Q148.649 26.305 150.663 26.861Q152.677 27.418 154.399 28.266Q156.122 29.114 157.182 30.651Q158.242 32.188 158.242 34.732Q158.242 37.17 157.315 38.892Q156.387 40.615 154.718 41.648Q153.048 42.682 150.796 43.159Q148.543 43.636 145.893 43.636Z M173.766 43.636Q170.745 43.636 168.466 42.974Q166.187 42.311 164.65 41.145Q163.113 39.979 162.345 38.416Q161.576 36.852 161.576 34.997Q161.576 34.732 161.603 34.52Q161.629 34.308 161.629 34.202H167.989Q167.989 34.308 167.989 34.414Q167.989 34.52 167.989 34.626Q168.042 36.057 168.89 36.931Q169.738 37.806 171.116 38.177Q172.494 38.548 174.031 38.548Q175.409 38.548 176.655 38.257Q177.9 37.965 178.721 37.303Q179.543 36.64 179.543 35.58Q179.543 34.202 178.483 33.46Q177.423 32.718 175.701 32.241Q173.978 31.764 172.017 31.234Q170.268 30.757 168.519 30.174Q166.77 29.591 165.365 28.69Q163.961 27.789 163.087 26.358Q162.212 24.927 162.212 22.807Q162.212 20.74 163.113 19.203Q164.014 17.666 165.604 16.633Q167.194 15.599 169.367 15.069Q171.54 14.539 174.084 14.539Q176.575 14.539 178.615 15.069Q180.656 15.599 182.167 16.58Q183.677 17.56 184.499 18.965Q185.32 20.369 185.32 22.065Q185.32 22.436 185.294 22.807Q185.267 23.178 185.267 23.231H178.96V22.86Q178.96 21.853 178.351 21.138Q177.741 20.422 176.602 19.998Q175.462 19.574 173.766 19.574Q172.494 19.574 171.54 19.786Q170.586 19.998 169.977 20.369Q169.367 20.74 169.049 21.217Q168.731 21.694 168.731 22.277Q168.731 23.284 169.526 23.867Q170.321 24.45 171.673 24.874Q173.024 25.298 174.614 25.775Q176.522 26.305 178.536 26.861Q180.55 27.418 182.273 28.266Q183.995 29.114 185.055 30.651Q186.115 32.188 186.115 34.732Q186.115 37.17 185.188 38.892Q184.26 40.615 182.591 41.648Q180.921 42.682 178.669 43.159Q176.416 43.636 173.766 43.636Z M202.752 43.636Q198.3 43.636 195.332 42.073Q192.364 40.509 190.88 37.276Q189.396 34.043 189.396 29.061Q189.396 24.026 190.88 20.819Q192.364 17.613 195.332 16.05Q198.3 14.486 202.752 14.486Q206.78 14.486 209.51 15.997Q212.239 17.507 213.617 20.634Q214.995 23.761 214.995 28.743V30.651H196.021Q196.127 33.248 196.816 35.023Q197.505 36.799 198.963 37.674Q200.42 38.548 202.805 38.548Q204.024 38.548 205.084 38.23Q206.144 37.912 206.939 37.249Q207.734 36.587 208.185 35.58Q208.635 34.573 208.635 33.248H214.995Q214.995 35.898 214.067 37.859Q213.14 39.82 211.471 41.092Q209.801 42.364 207.575 43Q205.349 43.636 202.752 43.636ZM196.127 26.093H208.264Q208.264 24.344 207.867 23.125Q207.469 21.906 206.754 21.111Q206.038 20.316 205.031 19.971Q204.024 19.627 202.752 19.627Q200.685 19.627 199.281 20.316Q197.876 21.005 197.134 22.436Q196.392 23.867 196.127 26.093Z M219.707 43V15.122H225.113L225.643 18.832H226.014Q226.968 17.56 228.266 16.58Q229.565 15.599 231.234 15.043Q232.904 14.486 234.918 14.486Q237.568 14.486 239.608 15.44Q241.649 16.394 242.815 18.514Q243.981 20.634 243.981 24.185V43H237.462V25.351Q237.462 23.867 237.117 22.887Q236.773 21.906 236.11 21.297Q235.448 20.687 234.494 20.422Q233.54 20.157 232.374 20.157Q230.625 20.157 229.22 21.005Q227.816 21.853 226.994 23.337Q226.173 24.821 226.173 26.782V43Z M261.837 43.636Q257.385 43.636 254.417 42.073Q251.449 40.509 249.965 37.276Q248.481 34.043 248.481 29.061Q248.481 24.026 249.965 20.819Q251.449 17.613 254.417 16.05Q257.385 14.486 261.837 14.486Q265.865 14.486 268.594 15.997Q271.324 17.507 272.702 20.634Q274.08 23.761 274.08 28.743V30.651H255.106Q255.212 33.248 255.901 35.023Q256.59 36.799 258.047 37.674Q259.505 38.548 261.89 38.548Q263.109 38.548 264.169 38.23Q265.229 37.912 266.024 37.249Q266.819 36.587 267.269 35.58Q267.72 34.573 267.72 33.248H274.08Q274.08 35.898 273.152 37.859Q272.225 39.82 270.555 41.092Q268.886 42.364 266.66 43Q264.434 43.636 261.837 43.636ZM255.212 26.093H267.349Q267.349 24.344 266.951 23.125Q266.554 21.906 265.838 21.111Q265.123 20.316 264.116 19.971Q263.109 19.627 261.837 19.627Q259.77 19.627 258.365 20.316Q256.961 21.005 256.219 22.436Q255.477 23.867 255.212 26.093Z M290.399 43.636Q286.053 43.636 283.164 42.073Q280.276 40.509 278.845 37.276Q277.414 34.043 277.414 29.061Q277.414 24.026 278.871 20.819Q280.329 17.613 283.217 16.05Q286.106 14.486 290.399 14.486Q293.208 14.486 295.381 15.175Q297.554 15.864 299.117 17.269Q300.681 18.673 301.476 20.74Q302.271 22.807 302.271 25.563H295.699Q295.699 23.602 295.116 22.33Q294.533 21.058 293.34 20.395Q292.148 19.733 290.293 19.733Q288.12 19.733 286.742 20.74Q285.364 21.747 284.702 23.735Q284.039 25.722 284.039 28.743V29.432Q284.039 32.4 284.702 34.414Q285.364 36.428 286.795 37.409Q288.226 38.389 290.558 38.389Q292.36 38.389 293.553 37.727Q294.745 37.064 295.381 35.739Q296.017 34.414 296.017 32.559H302.271Q302.271 35.156 301.476 37.223Q300.681 39.29 299.144 40.721Q297.607 42.152 295.407 42.894Q293.208 43.636 290.399 43.636Z M306.983 43V4.681H313.449V26.994L323.466 15.122H331.045L321.717 25.934L331.575 43H324.155L317.583 30.651L313.449 34.626V43Z"
|
|
17
|
+
],
|
|
18
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PosPaperSize, RasterBild } from '../printing/escpos.js';
|
|
2
|
+
/**
|
|
3
|
+
* Entpackt gepackte Rasterzeilen (Base64, MSB zuerst, je Zeile auf volle Bytes
|
|
4
|
+
* aufgefuellt -- die Form von [rasterZeilenBytes]) in ein Punkt-je-Byte-Bild.
|
|
5
|
+
*
|
|
6
|
+
* Eigene, exportierte Funktion statt Code inline in `markeBild`: ein
|
|
7
|
+
* Rundlauf-Test (packen mit `rasterZeilenBytes`, entpacken hiermit) kann so
|
|
8
|
+
* denselben Entpacker pruefen, den die Marke zur Laufzeit auch benutzt --
|
|
9
|
+
* ein vertauschter Bit-Index waere sonst nur am schiefen Ausdruck sichtbar.
|
|
10
|
+
*/
|
|
11
|
+
export declare function entpackeRasterBits(bits: string, breite: number, hoehe: number): RasterBild;
|
|
12
|
+
/**
|
|
13
|
+
* Die Marke als Rasterbild fuer diese Papierbreite.
|
|
14
|
+
*
|
|
15
|
+
* Entpackt die gepackten Zeilen in ein Punkt-je-Byte-Bild, wie es
|
|
16
|
+
* [escPosRasterBild] erwartet. Zur Laufzeit wird nichts gerechnet und nichts
|
|
17
|
+
* skaliert -- die beiden Masse stehen fest, damit JS und Dart fuer denselben
|
|
18
|
+
* Beleg dieselben Bytes erzeugen.
|
|
19
|
+
*/
|
|
20
|
+
export declare function markeBild(paperSize: PosPaperSize): RasterBild;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.entpackeRasterBits = entpackeRasterBits;
|
|
4
|
+
exports.markeBild = markeBild;
|
|
5
|
+
const marke_daten_js_1 = require("./marke-daten.js");
|
|
6
|
+
/** Base64 -> Bytes ohne `Buffer` -- laeuft im Browser und in Node gleich (wie `rasterZeilenBase64`). */
|
|
7
|
+
function base64Bytes(base64) {
|
|
8
|
+
const binaer = atob(base64);
|
|
9
|
+
const bytes = new Uint8Array(binaer.length);
|
|
10
|
+
for (let i = 0; i < binaer.length; i++)
|
|
11
|
+
bytes[i] = binaer.charCodeAt(i);
|
|
12
|
+
return bytes;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Entpackt gepackte Rasterzeilen (Base64, MSB zuerst, je Zeile auf volle Bytes
|
|
16
|
+
* aufgefuellt -- die Form von [rasterZeilenBytes]) in ein Punkt-je-Byte-Bild.
|
|
17
|
+
*
|
|
18
|
+
* Eigene, exportierte Funktion statt Code inline in `markeBild`: ein
|
|
19
|
+
* Rundlauf-Test (packen mit `rasterZeilenBytes`, entpacken hiermit) kann so
|
|
20
|
+
* denselben Entpacker pruefen, den die Marke zur Laufzeit auch benutzt --
|
|
21
|
+
* ein vertauschter Bit-Index waere sonst nur am schiefen Ausdruck sichtbar.
|
|
22
|
+
*/
|
|
23
|
+
function entpackeRasterBits(bits, breite, hoehe) {
|
|
24
|
+
const byteJeZeile = Math.ceil(breite / 8);
|
|
25
|
+
const roh = base64Bytes(bits);
|
|
26
|
+
const punkte = new Uint8Array(breite * hoehe);
|
|
27
|
+
for (let y = 0; y < hoehe; y++) {
|
|
28
|
+
for (let x = 0; x < breite; x++) {
|
|
29
|
+
const byte = roh[y * byteJeZeile + (x >> 3)];
|
|
30
|
+
punkte[y * breite + x] = (byte >> (7 - (x & 7))) & 1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return { breite, hoehe, punkte };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Die Marke als Rasterbild fuer diese Papierbreite.
|
|
37
|
+
*
|
|
38
|
+
* Entpackt die gepackten Zeilen in ein Punkt-je-Byte-Bild, wie es
|
|
39
|
+
* [escPosRasterBild] erwartet. Zur Laufzeit wird nichts gerechnet und nichts
|
|
40
|
+
* skaliert -- die beiden Masse stehen fest, damit JS und Dart fuer denselben
|
|
41
|
+
* Beleg dieselben Bytes erzeugen.
|
|
42
|
+
*/
|
|
43
|
+
function markeBild(paperSize) {
|
|
44
|
+
const d = marke_daten_js_1.MARKE_RASTER[paperSize];
|
|
45
|
+
return entpackeRasterBits(d.bits, d.breite, d.hoehe);
|
|
46
|
+
}
|
|
@@ -49,7 +49,7 @@ export interface CreatePrintJobOptions {
|
|
|
49
49
|
quelle?: string;
|
|
50
50
|
/** Firmenlogo als fertiges Rasterbild (`logoRaster`); der Server dekodiert keine Bilder. */
|
|
51
51
|
logo?: DruckLogo | null;
|
|
52
|
-
/**
|
|
52
|
+
/** Das Kasseneck-Logo am Ende (Konto-Flag `kreiseck_logo`). */
|
|
53
53
|
marke?: boolean;
|
|
54
54
|
}
|
|
55
55
|
export declare function createPrintJob(rufen: InternerTransport, o: CreatePrintJobOptions): Promise<DruckJob>;
|
|
@@ -189,6 +189,25 @@ export declare function escPosBytes(doc: EscPosDocument): Uint8Array;
|
|
|
189
189
|
* sie beim Initialisieren.
|
|
190
190
|
*/
|
|
191
191
|
export declare function escPosReset(doc: EscPosDocument): void;
|
|
192
|
+
/**
|
|
193
|
+
* `GS L` + `GS W`: linker Rand auf 0, Druckbereich auf die Breite des Blatts.
|
|
194
|
+
*
|
|
195
|
+
* **Warum das noetig ist.** `ESC a 1` mittelt nicht im Blatt, sondern im
|
|
196
|
+
* Druckbereich des *Geraets*. Steht das Blatt auf 58 mm (32 Zeichen) und
|
|
197
|
+
* haengt ein 80-mm-Drucker daran, setzt er den Text in die linken 384 Punkte,
|
|
198
|
+
* mittelt QR, Logo und Marke aber in seinen 576 -- am Papier sitzt dann alles
|
|
199
|
+
* Bildhafte gegenueber dem Text nach rechts gerueckt. Am Geraet nachgestellt
|
|
200
|
+
* und bestaetigt: mit diesen acht Bytes im Vorspann steht beides buendig.
|
|
201
|
+
*
|
|
202
|
+
* Der Befehl beschreibt also nicht das Papier, sondern das Blatt: er sagt dem
|
|
203
|
+
* Drucker, welche Flaeche gemeint ist, statt ihn raten zu lassen. Passt das
|
|
204
|
+
* Geraet ohnehin zum Blatt (der Regelfall), ist es sein eigener Vorgabewert
|
|
205
|
+
* und aendert am Druckbild nichts.
|
|
206
|
+
*
|
|
207
|
+
* Es ist dieselbe Fehlerklasse wie in 0.24.0 und 0.25.0: eine Ausrichtung,
|
|
208
|
+
* die sich am falschen Bezug orientiert.
|
|
209
|
+
*/
|
|
210
|
+
export declare function escPosSetDruckbereich(doc: EscPosDocument): void;
|
|
192
211
|
/**
|
|
193
212
|
* `ESC t n`: Codepage waehlen. Sie gilt bis zum naechsten `escPosReset` und
|
|
194
213
|
* wird von diesem erneut gesendet. `null` schaltet die Vorgabe ab; dann
|
|
@@ -206,8 +225,18 @@ export declare function escPosSetGlobalFont(doc: EscPosDocument, font: PosFont |
|
|
|
206
225
|
* Sendet die Stilbefehle, die sich gegenueber dem zuletzt gesendeten Stand
|
|
207
226
|
* geaendert haben. Fehlende Felder in [styles] gelten als Vorgabe: wer fett
|
|
208
227
|
* weglaesst, schaltet fett also ab.
|
|
228
|
+
*
|
|
229
|
+
* `zeilenanfang` (Vorgabe `true`) sagt, ob dieser Aufruf am Anfang einer
|
|
230
|
+
* Druckzeile steht. Nur dort nimmt der Drucker `ESC a` (Ausrichtung)
|
|
231
|
+
* ueberhaupt an; mitten in der Zeile verwirft er den Befehl wortlos. Der
|
|
232
|
+
* Bytestrom bekommt ihn trotzdem -- die Bytefolge soll sich dadurch nicht
|
|
233
|
+
* aendern --, aber der intern gemerkte Zustand darf sich NICHT auf den neuen
|
|
234
|
+
* Wert stellen: sonst haelt eine spaetere, echte Zeile die Ausrichtung
|
|
235
|
+
* faelschlich schon fuer gesetzt und unterlaesst den Befehl.
|
|
209
236
|
*/
|
|
210
|
-
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles
|
|
237
|
+
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles, optionen?: {
|
|
238
|
+
zeilenanfang?: boolean;
|
|
239
|
+
}): void;
|
|
211
240
|
/**
|
|
212
241
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
213
242
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|