@kreiseck/kasseneck-api 0.23.0 → 0.25.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 +15 -0
- package/dist/cjs/printing/escpos.d.ts +0 -4
- package/dist/cjs/printing/escpos.js +26 -32
- package/dist/esm/printing/escpos.d.ts +0 -4
- package/dist/esm/printing/escpos.js +26 -32
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +1 -1
- package/fixtures/rechnung-api.schema.json +1 -1
- package/fixtures/rechnung-texte.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,21 @@ 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.25.0
|
|
8
|
+
|
|
9
|
+
- ESC/POS: den Sofort-Reset der Ausrichtung direkt nach QR-Code, QR-Rasterbild und
|
|
10
|
+
Logo-Rasterbild entfernt. Er behandelte nur ein Symptom: seit 0.24.0 steht `ESC a`
|
|
11
|
+
ohnehin vor `ESC $`, und eine volle Zeile bekommt gar keinen Positionsbefehl mehr —
|
|
12
|
+
der Ausrichtungsbefehl des naechsten Elements steht damit selbst immer am
|
|
13
|
+
Zeilenanfang und gilt. Der erzeugte Bytestrom ist dadurch wieder deckungsgleich mit
|
|
14
|
+
dem Dart-Zwilling; bisher war dieser Reset der einzige Unterschied zwischen beiden.
|
|
15
|
+
|
|
16
|
+
## 0.24.0
|
|
17
|
+
|
|
18
|
+
- ESC/POS: `ESC a` steht vor `ESC $`, eine volle Zeile bekommt keinen Positionsbefehl mehr.
|
|
19
|
+
Der Drucker nimmt die Ausrichtung nur am Zeilenanfang an; bisher blieb nach dem QR-Code die
|
|
20
|
+
Zentrierung stehen und zentrierte jede Zeile darunter ein zweites Mal.
|
|
21
|
+
|
|
7
22
|
## 0.23.0
|
|
8
23
|
|
|
9
24
|
### Rechnung: der Rechenkern in ganzen Zahlen
|
|
@@ -208,10 +208,6 @@ export declare function escPosSetGlobalFont(doc: EscPosDocument, font: PosFont |
|
|
|
208
208
|
* weglaesst, schaltet fett also ab.
|
|
209
209
|
*/
|
|
210
210
|
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles): void;
|
|
211
|
-
/**
|
|
212
|
-
* Interner Textdruck: absolute Position setzen (`ESC $`), Stil senden, Bytes
|
|
213
|
-
* ausgeben. [colInd]/[colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
214
|
-
*/
|
|
215
211
|
/**
|
|
216
212
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
217
213
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|
|
@@ -344,10 +344,6 @@ function escPosSetStyles(doc, styles = {}) {
|
|
|
344
344
|
alt.codeTable = codepage;
|
|
345
345
|
}
|
|
346
346
|
}
|
|
347
|
-
/**
|
|
348
|
-
* Interner Textdruck: absolute Position setzen (`ESC $`), Stil senden, Bytes
|
|
349
|
-
* ausgeben. [colInd]/[colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
350
|
-
*/
|
|
351
347
|
/**
|
|
352
348
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
353
349
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|
|
@@ -449,27 +445,38 @@ function wortzeilenText(text, max) {
|
|
|
449
445
|
out.push(rest.replace(/\u00a0/g, ' '));
|
|
450
446
|
return out;
|
|
451
447
|
}
|
|
448
|
+
/**
|
|
449
|
+
* Interner Textdruck: Stil senden (Ausrichtung zuerst), absolute Position
|
|
450
|
+
* setzen (`ESC $`, ausser bei einer vollen Zeile), Bytes ausgeben. [colInd]/
|
|
451
|
+
* [colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
452
|
+
*/
|
|
452
453
|
function textIntern(doc, textBytes, optionen = {}) {
|
|
453
454
|
const stile = vollstaendigeStile(optionen.styles);
|
|
454
455
|
const colInd = optionen.colInd ?? 0;
|
|
455
456
|
const colWidth = optionen.colWidth ?? 12;
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
457
|
+
// Ausrichtung vor Position -- `ESC a` gilt nur am Zeilenanfang, nach `ESC $`
|
|
458
|
+
// verwirft der Drucker ihn. Zwilling von `_text` in generator.dart.
|
|
459
|
+
escPosSetStyles(doc, optionen.styles);
|
|
460
|
+
// Eine volle Zeile beginnt am linken Rand; ein Positionsbefehl dafuer waere
|
|
461
|
+
// nicht nur ueberfluessig, er entwertet die Ausrichtung.
|
|
462
|
+
if (!(colInd === 0 && colWidth === 12)) {
|
|
463
|
+
const breiteJeZeichen = zeichenBreite(doc, stile);
|
|
464
|
+
let von = spaltenPosition(doc, colInd);
|
|
465
|
+
if (colWidth !== 12) {
|
|
466
|
+
const bis = spaltenPosition(doc, colInd + colWidth) - doc.spaceBetweenRows;
|
|
467
|
+
const textLaenge = textBytes.length * breiteJeZeichen;
|
|
468
|
+
if (stile.align === 'right') {
|
|
469
|
+
von = bis - textLaenge;
|
|
470
|
+
}
|
|
471
|
+
else if (stile.align === 'center') {
|
|
472
|
+
von = von + (bis - von) / 2 - textLaenge / 2;
|
|
473
|
+
}
|
|
474
|
+
if (von < 0)
|
|
475
|
+
von = 0;
|
|
466
476
|
}
|
|
467
|
-
|
|
468
|
-
|
|
477
|
+
const position = runden(von);
|
|
478
|
+
anhaengen(doc, [...C_POS, position & 0xff, (position >> 8) & 0xff]);
|
|
469
479
|
}
|
|
470
|
-
const position = runden(von);
|
|
471
|
-
anhaengen(doc, [...C_POS, position & 0xff, (position >> 8) & 0xff]);
|
|
472
|
-
escPosSetStyles(doc, optionen.styles);
|
|
473
480
|
anhaengen(doc, textBytes);
|
|
474
481
|
}
|
|
475
482
|
/**
|
|
@@ -706,13 +713,6 @@ function escPosQrCode(doc, text, options = {}) {
|
|
|
706
713
|
}
|
|
707
714
|
if (drucken)
|
|
708
715
|
anhaengen(doc, qrCodeBytes(text, qrOptionen));
|
|
709
|
-
// Ausrichtung SOFORT zuruecksetzen: `ESC a` gilt nur am Zeilenanfang. Die
|
|
710
|
-
// Spalten-Positionierung (`ESC $`) schickt ihren Reset sonst mitten in der
|
|
711
|
-
// Zeile — Epson ignoriert ihn, und alles nach dem QR rueckte nach rechts
|
|
712
|
-
// (belegt am TM-T20, 2026-08-20).
|
|
713
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
714
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
715
|
-
}
|
|
716
716
|
}
|
|
717
717
|
/**
|
|
718
718
|
* Der Bildweg: ein fertiges QR-Raster als Rasterbild (`GS v 0`) — der
|
|
@@ -770,9 +770,6 @@ function escPosQrRaster(doc, matrix, options = {}) {
|
|
|
770
770
|
anhaengen(doc, rasterBildKopf(breite, breite));
|
|
771
771
|
anhaengen(doc, daten);
|
|
772
772
|
anhaengen(doc, [ZEILENUMBRUCH]);
|
|
773
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
774
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
775
|
-
}
|
|
776
773
|
}
|
|
777
774
|
/**
|
|
778
775
|
* Punkte je Modul, mit denen `escPosQrRaster` ein Raster dieser Groesse auf
|
|
@@ -845,7 +842,4 @@ function escPosRasterBild(doc, bild, options = {}) {
|
|
|
845
842
|
escPosSetStyles(doc, { align: options.align ?? 'center' });
|
|
846
843
|
anhaengen(doc, rasterBildKopf(bild.breite, bild.hoehe));
|
|
847
844
|
anhaengen(doc, daten);
|
|
848
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
849
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
850
|
-
}
|
|
851
845
|
}
|
|
@@ -208,10 +208,6 @@ export declare function escPosSetGlobalFont(doc: EscPosDocument, font: PosFont |
|
|
|
208
208
|
* weglaesst, schaltet fett also ab.
|
|
209
209
|
*/
|
|
210
210
|
export declare function escPosSetStyles(doc: EscPosDocument, styles?: PosStyles): void;
|
|
211
|
-
/**
|
|
212
|
-
* Interner Textdruck: absolute Position setzen (`ESC $`), Stil senden, Bytes
|
|
213
|
-
* ausgeben. [colInd]/[colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
214
|
-
*/
|
|
215
211
|
/**
|
|
216
212
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
217
213
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|
|
@@ -319,10 +319,6 @@ export function escPosSetStyles(doc, styles = {}) {
|
|
|
319
319
|
alt.codeTable = codepage;
|
|
320
320
|
}
|
|
321
321
|
}
|
|
322
|
-
/**
|
|
323
|
-
* Interner Textdruck: absolute Position setzen (`ESC $`), Stil senden, Bytes
|
|
324
|
-
* ausgeben. [colInd]/[colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
325
|
-
*/
|
|
326
322
|
/**
|
|
327
323
|
* Wortweiser Umbruch von (kodierten) Text-Bytes auf hoechstens `max` Zeichen
|
|
328
324
|
* je Zeile: geschnitten wird am letzten Leerzeichen innerhalb der Grenze
|
|
@@ -424,27 +420,38 @@ export function wortzeilenText(text, max) {
|
|
|
424
420
|
out.push(rest.replace(/\u00a0/g, ' '));
|
|
425
421
|
return out;
|
|
426
422
|
}
|
|
423
|
+
/**
|
|
424
|
+
* Interner Textdruck: Stil senden (Ausrichtung zuerst), absolute Position
|
|
425
|
+
* setzen (`ESC $`, ausser bei einer vollen Zeile), Bytes ausgeben. [colInd]/
|
|
426
|
+
* [colWidth] beschreiben die Spalte im Zwoelftel-Raster.
|
|
427
|
+
*/
|
|
427
428
|
function textIntern(doc, textBytes, optionen = {}) {
|
|
428
429
|
const stile = vollstaendigeStile(optionen.styles);
|
|
429
430
|
const colInd = optionen.colInd ?? 0;
|
|
430
431
|
const colWidth = optionen.colWidth ?? 12;
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
432
|
+
// Ausrichtung vor Position -- `ESC a` gilt nur am Zeilenanfang, nach `ESC $`
|
|
433
|
+
// verwirft der Drucker ihn. Zwilling von `_text` in generator.dart.
|
|
434
|
+
escPosSetStyles(doc, optionen.styles);
|
|
435
|
+
// Eine volle Zeile beginnt am linken Rand; ein Positionsbefehl dafuer waere
|
|
436
|
+
// nicht nur ueberfluessig, er entwertet die Ausrichtung.
|
|
437
|
+
if (!(colInd === 0 && colWidth === 12)) {
|
|
438
|
+
const breiteJeZeichen = zeichenBreite(doc, stile);
|
|
439
|
+
let von = spaltenPosition(doc, colInd);
|
|
440
|
+
if (colWidth !== 12) {
|
|
441
|
+
const bis = spaltenPosition(doc, colInd + colWidth) - doc.spaceBetweenRows;
|
|
442
|
+
const textLaenge = textBytes.length * breiteJeZeichen;
|
|
443
|
+
if (stile.align === 'right') {
|
|
444
|
+
von = bis - textLaenge;
|
|
445
|
+
}
|
|
446
|
+
else if (stile.align === 'center') {
|
|
447
|
+
von = von + (bis - von) / 2 - textLaenge / 2;
|
|
448
|
+
}
|
|
449
|
+
if (von < 0)
|
|
450
|
+
von = 0;
|
|
441
451
|
}
|
|
442
|
-
|
|
443
|
-
|
|
452
|
+
const position = runden(von);
|
|
453
|
+
anhaengen(doc, [...C_POS, position & 0xff, (position >> 8) & 0xff]);
|
|
444
454
|
}
|
|
445
|
-
const position = runden(von);
|
|
446
|
-
anhaengen(doc, [...C_POS, position & 0xff, (position >> 8) & 0xff]);
|
|
447
|
-
escPosSetStyles(doc, optionen.styles);
|
|
448
455
|
anhaengen(doc, textBytes);
|
|
449
456
|
}
|
|
450
457
|
/**
|
|
@@ -681,13 +688,6 @@ export function escPosQrCode(doc, text, options = {}) {
|
|
|
681
688
|
}
|
|
682
689
|
if (drucken)
|
|
683
690
|
anhaengen(doc, qrCodeBytes(text, qrOptionen));
|
|
684
|
-
// Ausrichtung SOFORT zuruecksetzen: `ESC a` gilt nur am Zeilenanfang. Die
|
|
685
|
-
// Spalten-Positionierung (`ESC $`) schickt ihren Reset sonst mitten in der
|
|
686
|
-
// Zeile — Epson ignoriert ihn, und alles nach dem QR rueckte nach rechts
|
|
687
|
-
// (belegt am TM-T20, 2026-08-20).
|
|
688
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
689
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
690
|
-
}
|
|
691
691
|
}
|
|
692
692
|
/**
|
|
693
693
|
* Der Bildweg: ein fertiges QR-Raster als Rasterbild (`GS v 0`) — der
|
|
@@ -745,9 +745,6 @@ export function escPosQrRaster(doc, matrix, options = {}) {
|
|
|
745
745
|
anhaengen(doc, rasterBildKopf(breite, breite));
|
|
746
746
|
anhaengen(doc, daten);
|
|
747
747
|
anhaengen(doc, [ZEILENUMBRUCH]);
|
|
748
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
749
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
750
|
-
}
|
|
751
748
|
}
|
|
752
749
|
/**
|
|
753
750
|
* Punkte je Modul, mit denen `escPosQrRaster` ein Raster dieser Groesse auf
|
|
@@ -820,7 +817,4 @@ export function escPosRasterBild(doc, bild, options = {}) {
|
|
|
820
817
|
escPosSetStyles(doc, { align: options.align ?? 'center' });
|
|
821
818
|
anhaengen(doc, rasterBildKopf(bild.breite, bild.hoehe));
|
|
822
819
|
anhaengen(doc, daten);
|
|
823
|
-
if ((options.align ?? 'center') !== 'left') {
|
|
824
|
-
escPosSetStyles(doc, { align: 'left' });
|
|
825
|
-
}
|
|
826
820
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kreiseck/kasseneck-api",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"description": "RKSV-Registrierkasse fuer JavaScript und TypeScript: signierte Belege, Storno, Kartenzahlung, Bondruck. Austrian fiscal cash register (RKSV) API client.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Kreiseck",
|