@kreiseck/kasseneck-api 0.10.0 → 0.12.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 +94 -1
- package/README.md +41 -0
- package/dist/cjs/client/receipts.d.ts +8 -0
- package/dist/cjs/client/receipts.js +18 -0
- package/dist/cjs/printing/escpos.d.ts +85 -1
- package/dist/cjs/printing/escpos.js +140 -4
- package/dist/cjs/printing/index.d.ts +2 -1
- package/dist/cjs/printing/index.js +13 -1
- package/dist/cjs/printing/qr-groesse.d.ts +122 -0
- package/dist/cjs/printing/qr-groesse.js +126 -0
- package/dist/cjs/receipt/epos.d.ts +42 -1
- package/dist/cjs/receipt/epos.js +66 -5
- package/dist/cjs/receipt/index.d.ts +2 -2
- package/dist/cjs/receipt/index.js +3 -1
- package/dist/cjs/receipt/layout-escpos.d.ts +50 -2
- package/dist/cjs/receipt/layout-escpos.js +59 -2
- package/dist/esm/client/receipts.d.ts +8 -0
- package/dist/esm/client/receipts.js +18 -0
- package/dist/esm/printing/escpos.d.ts +85 -1
- package/dist/esm/printing/escpos.js +138 -4
- package/dist/esm/printing/index.d.ts +2 -1
- package/dist/esm/printing/index.js +2 -1
- package/dist/esm/printing/qr-groesse.d.ts +122 -0
- package/dist/esm/printing/qr-groesse.js +120 -0
- package/dist/esm/receipt/epos.d.ts +42 -1
- package/dist/esm/receipt/epos.js +65 -5
- package/dist/esm/receipt/index.d.ts +2 -2
- package/dist/esm/receipt/index.js +2 -2
- package/dist/esm/receipt/layout-escpos.d.ts +50 -2
- package/dist/esm/receipt/layout-escpos.js +59 -3
- package/fixtures/hobex-hps-codes.json +1 -1
- package/fixtures/kasse-texte.json +1 -1
- package/fixtures/oberflaeche.json +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,98 @@ 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.12.0
|
|
8
|
+
|
|
9
|
+
### Storno mit Kartendaten der Erstattung
|
|
10
|
+
|
|
11
|
+
**Anlass:** sastre zieht vom alten Storno-Weg (`createCancelReceipt`, ohne
|
|
12
|
+
Bezug) auf `cancelReceipt` um. Bei einer Kartenerstattung haengt sastre heute
|
|
13
|
+
die Terminaldaten der Gutschrift/Aufhebung an den Stornobeleg -- ueber den
|
|
14
|
+
neuen Endpunkt ging das bisher nicht, der Kartenblock fiele vom Storno-Bon.
|
|
15
|
+
Backend: keck#371.
|
|
16
|
+
|
|
17
|
+
- **`cancelReceipt` nimmt `creditCardProvider`, `cardPaymentId` und
|
|
18
|
+
`cardPaymentData` an** -- die Daten der ERSTATTUNG, nie der Originalzahlung.
|
|
19
|
+
Nur bei Rueckzahlweg Karte: ein ausdruecklich anderer `paymentMethod` wird
|
|
20
|
+
schon hier abgewiesen, ohne Angabe entscheidet das Backend an der
|
|
21
|
+
Zahlungsart des Originals. Ein unbekannter Kartenanbieter geht gar nicht erst
|
|
22
|
+
raus.
|
|
23
|
+
- Ohne Kartendaten aendert sich nichts.
|
|
24
|
+
- `package-lock.json` traegt wieder die Paketversion (stand seit 0.11.0 auf
|
|
25
|
+
0.10.0).
|
|
26
|
+
|
|
27
|
+
## 0.11.0
|
|
28
|
+
|
|
29
|
+
### Die QR-Modulgröße wird gerechnet, nicht gesetzt — samt Notausgang und Modell 1
|
|
30
|
+
|
|
31
|
+
**Anlass:** Am echten Beleg fehlte der QR-Code, die Probe im Drucker-Wizard
|
|
32
|
+
druckte ihn. Der native QR-Befehl bekommt eine Modulgröße in Druckpunkten mit
|
|
33
|
+
und rechnet nicht nach, ob das Symbol samt Ruhezone auf die Rolle geht. Ein
|
|
34
|
+
Beleg-QR mit realer RKSV-Nutzlast hat 57 Module, mit Ruhezone also 65; bei
|
|
35
|
+
sechs Punkten je Modul sind das 390 Druckpunkte, und ein 58-mm-Kopf hat 384.
|
|
36
|
+
Zu breit heißt bei den meisten Geräten nicht „abgeschnitten", sondern **gar
|
|
37
|
+
kein QR**. Der Befund stammt aus dem Flutter-Zwilling `kasseneck_api` (dort
|
|
38
|
+
6.9.0), der fest mit sechs Punkten druckte; dieses Paket druckt seit jeher mit
|
|
39
|
+
vier und war davon nicht betroffen. Die Regel ist trotzdem dieselbe — sie
|
|
40
|
+
deckelt auch eine bewusst gewählte größere Modulgröße gegen den Papierrand ab.
|
|
41
|
+
|
|
42
|
+
- **Neu `…/printing`: die Rechenregel, rein und ohne Drucker.**
|
|
43
|
+
`qrModulAnzahl(nutzlast)` gibt die Modulanzahl bei Fehlerkorrektur **M**
|
|
44
|
+
(konservativ: der native Befehl druckt mit L, das braucht nie mehr Module);
|
|
45
|
+
`qrGroesseBerechnen({ papierbreitePunkte, moduleAnzahl, groesse })` und
|
|
46
|
+
`qrGroesseFuer({ nutzlast, papierbreitePunkte, groesse })` geben ein
|
|
47
|
+
`QrGroesse` mit `punkte` (`null` = passt nicht), `module`, `breitePunkte`,
|
|
48
|
+
`unterMindestmass` und `passt`. Dazu `QrModulGroesse`, `QR_MODUL_DECKEL`,
|
|
49
|
+
`QR_RUHEZONE_MODULE` (4), `QR_MINDEST_PUNKTE` (4), `QR_AUSNAHME_PUNKTE` (3),
|
|
50
|
+
`QR_HOECHST_PUNKTE` (8) und `QR_DRUCK_PUNKTE` (58 mm = 384, 80 mm = 576 —
|
|
51
|
+
die echte Kopfbreite, nicht die Spaltenbreite 372/558).
|
|
52
|
+
- **`escPosQrCode` rechnet, wenn keine feste `size` mitkommt.** `groesse` ist
|
|
53
|
+
ein **Deckel**, keine Vorgabe: gedruckt wird die größte Größe, die noch
|
|
54
|
+
passt, höchstens aber der Deckel. `auto` deckelt beim Bestandswert dieses
|
|
55
|
+
Pakets (4), `klein` 4, `mittel` 6, `gross` 8. **Ohne ausdrückliche Wahl
|
|
56
|
+
ändert sich kein Byte** — nur dort, wo heute gar nichts herauskommt, rechnet
|
|
57
|
+
die Regel herunter. (Im Flutter-Zwilling deckelt `auto` bei 6, weil dort 6
|
|
58
|
+
der Bestandswert ist; die Regel ist dieselbe, der Bestand nicht.)
|
|
59
|
+
- **`EscPosDocument.qrFehler` / `.qrAusweich`.** `qrFehler` heißt „Beleg ohne
|
|
60
|
+
QR" — das Symbol passt auch mit der Ausnahmegröße nicht, und ein Befehl, von
|
|
61
|
+
dem man weiß, dass er nichts druckt, täuscht nur einen Ausdruck vor.
|
|
62
|
+
`qrAusweich` heißt „gedruckt, aber nicht auf dem eingestellten Weg" — unter
|
|
63
|
+
der Mindestgröße oder als Bild. Das eine gehört dem Kunden gesagt, das
|
|
64
|
+
andere dem Chef. `escPosReset` räumt beide weg.
|
|
65
|
+
- **Neu `…/receipt`: `escPosLayoutErgebnis`** gibt `{ bytes, qrFehler,
|
|
66
|
+
qrAusweich }`; `escPosLayoutBytes` bleibt unverändert und gibt weiter nur
|
|
67
|
+
die Bytes. Neue Optionen `qrGroesse`, `qrModus` (`QrPrintMode`) und
|
|
68
|
+
`qrMatrix`.
|
|
69
|
+
- **Der Notausgang.** Passt das Symbol nativ nicht aufs Papier und ist ein
|
|
70
|
+
`qrMatrix` mitgegeben, geht der QR als Rasterbild hinaus (`GS v 0`) statt
|
|
71
|
+
gar nicht — ein Pflichtbeleg ohne QR ist der schlechteste aller Ausgänge.
|
|
72
|
+
Das Raster kommt vom Aufrufer: dieses Paket rechnet keine QR-Codes und
|
|
73
|
+
verarbeitet keine Bilder. Dafür neu `escPosQrRaster`, `qrRasterPunkte` und
|
|
74
|
+
der Typ `QrMatrix`.
|
|
75
|
+
- **Modell 1.** `qrCodeBytes(..., { modell1: true })` bzw. `qrModus:
|
|
76
|
+
'nativeModel1'` stellt den Wahlbefehl `GS ( k 04 00 31 41 31 00` voran. Für
|
|
77
|
+
günstige Drucker, die nur diesen älteren Symboltyp beherrschen; belegt ist
|
|
78
|
+
eines, das bei Modell 2 unter dem Code eine „0" ausgibt — das Parameterbyte
|
|
79
|
+
`0x30` des Druckbefehls, das es nicht als Befehl erkennt. Ohne ausdrückliche
|
|
80
|
+
Wahl geht **gar kein** Modellbefehl hinaus, wie bisher.
|
|
81
|
+
- **Derselbe Fehler im ePOS-Weg — und dort ist er der akute.** `eposPrintXml`
|
|
82
|
+
setzte `<symbol … width="6">` fest, unabhängig von der Papierbreite: 57
|
|
83
|
+
Module plus Ruhezone sind bei sechs Punkten 390 Druckpunkte, ein 58-mm-Kopf
|
|
84
|
+
hat 384, und der Epson lässt ein zu breites Symbol weg. **Genau daran fehlte
|
|
85
|
+
am echten Beleg der QR.** Jetzt gilt dieselbe Regel — Untergrenze 4,
|
|
86
|
+
Ausnahme 3 mit Meldung, darunter kein `<symbol>`. Der Bestandswert dieses
|
|
87
|
+
Wegs ist 6, deshalb ist die Vorgabe hier der Deckel `mittel`; ohne
|
|
88
|
+
ausdrückliche Wahl ändert sich nur dort etwas, wo heute gar nichts
|
|
89
|
+
herauskommt. Neu `eposPrintXmlErgebnis` (`{ xml, qrFehler, qrAusweich }`) und
|
|
90
|
+
die Optionen `qrGroesse` an `eposPrintXml` und `eposDirectPrint`; `qrBreite`
|
|
91
|
+
bleibt, ist jetzt aber ausdrücklich die **feste** Größe und schaltet die
|
|
92
|
+
Rechnung ab.
|
|
93
|
+
- **Bestandsschutz als Golden-Test.** Zwei feste SHA-256 über den gesamten
|
|
94
|
+
Bytestrom eines Belegs (58 und 80 mm) und zwei weitere über das vollständige
|
|
95
|
+
ePOS-XML halten fest, dass sich ohne Wahl kein Byte ändert. Dazu prüft `test/paket-inhalt.test.ts`, dass die Dateiliste des
|
|
96
|
+
Pakets eine Positivliste bleibt und im mitgelieferten `fixtures/` nichts
|
|
97
|
+
Örtliches liegt.
|
|
98
|
+
|
|
7
99
|
## 0.10.0
|
|
8
100
|
|
|
9
101
|
### Die Antwortcodeliste von hobex — jeder Code eingeordnet, jeder Ausgang mit Grund
|
|
@@ -12,7 +104,8 @@ nur der Grund überlebt den nächsten Umbau.
|
|
|
12
104
|
geschickt. Drei der Codes kamen seit dem 28.08.2026 im Betrieb vor (`100004`,
|
|
13
105
|
`100005`, `100015`) und waren bis jetzt ungedeutet. Jede Zahlung damit lief in
|
|
14
106
|
die Klaerung und endete erst ueber die Zwei-9027-Regel. Zwilling:
|
|
15
|
-
`kasseneck_api` 6.9.0, Begruendungen dort in
|
|
107
|
+
`kasseneck_api` 6.10.0 (6.9.0 war inzwischen vergeben), Begruendungen dort in
|
|
108
|
+
`doc/kartenzahlung.md`.
|
|
16
109
|
|
|
17
110
|
- **`HPS_CODES`** fuehrt alle 31 Codes der Liste zusammen mit den gemessenen:
|
|
18
111
|
Code, hobex-Titel, Bedeutung, Wirkung (`effect`), Grund (`reason`) und
|
package/README.md
CHANGED
|
@@ -344,6 +344,47 @@ app.post('/kasseneck-webhook', express.raw({ type: '*/*' }), async (req, res) =>
|
|
|
344
344
|
|
|
345
345
|
So zieht sich niemand den React-Adapter in ein Node-Programm.
|
|
346
346
|
|
|
347
|
+
## Der QR-Code passt aufs Papier
|
|
348
|
+
|
|
349
|
+
Der native QR-Befehl bekommt eine Modulgröße in Druckpunkten mit und rechnet
|
|
350
|
+
selbst nicht nach, ob das Symbol samt Ruhezone auf die Rolle geht. Zu breit
|
|
351
|
+
heißt bei den meisten Bondruckern nicht „abgeschnitten", sondern **gar kein
|
|
352
|
+
QR** — auf einem Pflichtbeleg der schlechteste aller Ausgänge. Deshalb rechnet
|
|
353
|
+
dieses Paket die Größe, statt sie zu setzen:
|
|
354
|
+
|
|
355
|
+
```ts
|
|
356
|
+
import { qrGroesseFuer, QR_DRUCK_PUNKTE } from '@kreiseck/kasseneck-api/printing';
|
|
357
|
+
|
|
358
|
+
const mass = qrGroesseFuer({ nutzlast: beleg.qr, papierbreitePunkte: QR_DRUCK_PUNKTE.mm58 });
|
|
359
|
+
// mass.punkte: Punkte je Modul, null = passt auch mit der Ausnahmegröße nicht
|
|
360
|
+
// mass.unterMindestmass: gedruckt, aber unter 4 Punkten je Modul
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Am Belegweg passiert das von selbst. `qrGroesse` ist ein **Deckel**, keine
|
|
364
|
+
Vorgabe: gedruckt wird die größte Größe, die noch passt, höchstens aber der
|
|
365
|
+
Deckel. `auto` (Vorgabe) deckelt beim Bestandswert 4 — ohne ausdrückliche Wahl
|
|
366
|
+
ändert sich also kein Byte.
|
|
367
|
+
|
|
368
|
+
```ts
|
|
369
|
+
import { escPosLayoutErgebnis } from '@kreiseck/kasseneck-api/receipt';
|
|
370
|
+
|
|
371
|
+
const { bytes, qrFehler, qrAusweich } = escPosLayoutErgebnis(layout, {
|
|
372
|
+
qrGroesse: 'gross', // 'auto' | 'klein' | 'mittel' | 'gross'
|
|
373
|
+
qrModus: 'nativeModel1', // ältere Drucker, die nur Modell 1 können
|
|
374
|
+
qrMatrix: rasterFuer, // Notausgang: der QR als Bild statt gar nicht
|
|
375
|
+
});
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Der Epson-Weg (`eposPrintXml` / `eposDirectPrint`) rechnet genauso;
|
|
379
|
+
`eposPrintXmlErgebnis` gibt dort `{ xml, qrFehler, qrAusweich }`. Sein
|
|
380
|
+
Bestandswert ist 6, deshalb ist die Vorgabe dort der Deckel `mittel`.
|
|
381
|
+
|
|
382
|
+
`qrFehler` heißt „Beleg ohne QR" — das gehört dem Kunden gesagt. `qrAusweich`
|
|
383
|
+
heißt „gedruckt, aber der eingestellte Weg taugt für dieses Gerät nicht" — das
|
|
384
|
+
gehört dem Chef gesagt. Den Bildweg fährt das Paket nur mit einem `qrMatrix`,
|
|
385
|
+
das die Nutzlast in ein fertiges Raster übersetzt: hier wird bewusst weder ein
|
|
386
|
+
QR gerechnet noch ein Bild verarbeitet.
|
|
387
|
+
|
|
347
388
|
## Hobex HPS über Kasseneck Connect
|
|
348
389
|
|
|
349
390
|
Ein Browser hat weiterhin keine rohen TCP-Sockets — ein **direkter**
|
|
@@ -117,6 +117,14 @@ export type CancelReceiptOptions = {
|
|
|
117
117
|
note?: string;
|
|
118
118
|
/** Rueckzahlweg; ohne Angabe die Zahlungsart des stornierten Belegs. */
|
|
119
119
|
paymentMethod?: KeckPaymentMethod | KeckPaymentMethodKey;
|
|
120
|
+
/**
|
|
121
|
+
* Kartendaten der ERSTATTUNG (Gutschrift oder Aufhebung am Terminal) fuer
|
|
122
|
+
* den Kartenblock am Storno-Bon -- nur bei Rueckzahlweg Karte. Beschreiben
|
|
123
|
+
* nie die Originalzahlung; das Backend uebernimmt sie nicht vom Original.
|
|
124
|
+
*/
|
|
125
|
+
creditCardProvider?: CreditCardProvider;
|
|
126
|
+
cardPaymentId?: string;
|
|
127
|
+
cardPaymentData?: Record<string, unknown>;
|
|
120
128
|
} & ({
|
|
121
129
|
receipt: Receipt;
|
|
122
130
|
cashregisterId?: string;
|
|
@@ -154,6 +154,24 @@ async function cancelReceipt(rufen, options) {
|
|
|
154
154
|
params.note = options.note;
|
|
155
155
|
if (options.paymentMethod != null)
|
|
156
156
|
params.paymentMethod = gepruefteZahlungsart(options.paymentMethod);
|
|
157
|
+
const karte = options.creditCardProvider != null || options.cardPaymentId != null || options.cardPaymentData != null;
|
|
158
|
+
if (karte) {
|
|
159
|
+
// Ohne paymentMethod entscheidet das Backend an der Zahlungsart des
|
|
160
|
+
// Originals; ein ausdruecklich anderer Rueckzahlweg ist hier schon falsch.
|
|
161
|
+
if (params.paymentMethod != null && params.paymentMethod !== index_js_1.KeckPaymentMethod.creditCard.value) {
|
|
162
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', 'Kartendaten gibt es nur bei paymentMethod creditCard', 'request');
|
|
163
|
+
}
|
|
164
|
+
if (options.creditCardProvider != null) {
|
|
165
|
+
if (!Object.prototype.hasOwnProperty.call(index_js_1.CreditCardProvider, options.creditCardProvider)) {
|
|
166
|
+
throw new errors_js_1.KasseneckValidationError('cancelReceipt', `Kartenanbieter: unbekannter Schluessel "${options.creditCardProvider}"`, 'request');
|
|
167
|
+
}
|
|
168
|
+
params.creditCardProvider = options.creditCardProvider;
|
|
169
|
+
}
|
|
170
|
+
if (options.cardPaymentId != null && options.cardPaymentId !== '')
|
|
171
|
+
params.cardPaymentId = options.cardPaymentId;
|
|
172
|
+
if (options.cardPaymentData != null)
|
|
173
|
+
params.cardPaymentData = options.cardPaymentData;
|
|
174
|
+
}
|
|
157
175
|
const daten = await rufen('cancelReceipt', params);
|
|
158
176
|
const receipt = belegAusHuelle(daten, 'cancelReceipt');
|
|
159
177
|
const huelle = daten;
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
* Nicht enthalten (bewusst): Rasterbilder/Logos, Capability-Profile einzelner
|
|
28
28
|
* Druckermodelle, Kassenlade, 1D-Barcodes.
|
|
29
29
|
*/
|
|
30
|
+
import { type QrModulGroesse } from './qr-groesse.js';
|
|
30
31
|
/** Papierbreite der Bonrolle. */
|
|
31
32
|
export type PosPaperSize = 'mm58' | 'mm80';
|
|
32
33
|
/** Ausrichtung einer Textzeile bzw. innerhalb einer Spalte. */
|
|
@@ -43,6 +44,14 @@ export type PosTextSize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
|
|
43
44
|
export type QrSize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
|
|
44
45
|
/** Fehlerkorrekturstufe des QR-Codes. */
|
|
45
46
|
export type QrCorrection = 'L' | 'M' | 'Q' | 'H';
|
|
47
|
+
/**
|
|
48
|
+
* Fertig gerechnetes QR-Raster, quadratisch, `true` = schwarzes Modul —
|
|
49
|
+
* **ohne** Ruhezone, die setzt der Drucker-Weg selbst.
|
|
50
|
+
*
|
|
51
|
+
* Dieses Paket rastert bewusst nicht selbst (keine Bildverarbeitung, siehe
|
|
52
|
+
* Kopf dieser Datei); wer den Bildweg braucht, bringt sein eigenes Raster mit.
|
|
53
|
+
*/
|
|
54
|
+
export type QrMatrix = readonly (readonly boolean[])[];
|
|
46
55
|
/** Textstil. Fehlende Felder gelten als Vorgabewert (nicht als "unveraendert"). */
|
|
47
56
|
export interface PosStyles {
|
|
48
57
|
bold?: boolean;
|
|
@@ -88,8 +97,26 @@ export interface EscPosHrOptions {
|
|
|
88
97
|
}
|
|
89
98
|
export interface EscPosQrOptions {
|
|
90
99
|
align?: PosAlign;
|
|
100
|
+
/**
|
|
101
|
+
* Feste Modulgroesse in Druckpunkten. Gesetzt schaltet sie die Rechnung ab —
|
|
102
|
+
* fuer Aufrufer, die genau wissen, was ihr Geraet kann. Ohne sie entscheidet
|
|
103
|
+
* die Regel in `qr-groesse.ts`.
|
|
104
|
+
*/
|
|
91
105
|
size?: QrSize;
|
|
92
106
|
correction?: QrCorrection;
|
|
107
|
+
/** Deckel fuer die gerechnete Modulgroesse; wirkungslos neben `size`. */
|
|
108
|
+
groesse?: QrModulGroesse;
|
|
109
|
+
/** Modell 1 des Symbols ausdruecklich waehlen — siehe `qrCodeBytes`. */
|
|
110
|
+
modell1?: boolean;
|
|
111
|
+
}
|
|
112
|
+
export interface EscPosQrRasterOptions {
|
|
113
|
+
align?: PosAlign;
|
|
114
|
+
/** Feste Punkte je Modul; ohne Angabe gerechnet (mindestens 1). */
|
|
115
|
+
punkteJeModul?: number;
|
|
116
|
+
/** Deckel fuer die gerechnete Groesse. */
|
|
117
|
+
groesse?: QrModulGroesse;
|
|
118
|
+
/** Ruhezone je Seite in Modulen; Vorgabe `QR_RUHEZONE_MODULE` (4). */
|
|
119
|
+
ruhezoneModule?: number;
|
|
93
120
|
}
|
|
94
121
|
/** Interner Stilzustand — immer vollstaendig, nie teilbefuellt. */
|
|
95
122
|
interface AktuelleStile {
|
|
@@ -111,6 +138,25 @@ interface AktuelleStile {
|
|
|
111
138
|
export interface EscPosDocument {
|
|
112
139
|
readonly paperSize: PosPaperSize;
|
|
113
140
|
readonly spaceBetweenRows: number;
|
|
141
|
+
/**
|
|
142
|
+
* Der Beleg ging ohne QR hinaus — `null`, solange alles in Ordnung ist.
|
|
143
|
+
* Gesetzt, wenn das Symbol auch mit der Ausnahmegroesse nicht auf das Papier
|
|
144
|
+
* passt und kein Bildweg mitgegeben wurde. Auf einer oesterreichischen Kassa
|
|
145
|
+
* ist der QR die maschinenlesbare Signatur: das muss der Aufrufer erfahren,
|
|
146
|
+
* ohne den Bytestrom zu durchsuchen.
|
|
147
|
+
*/
|
|
148
|
+
qrFehler: string | null;
|
|
149
|
+
/**
|
|
150
|
+
* Der QR steht auf dem Papier, aber nicht so wie eingestellt — `null`,
|
|
151
|
+
* solange nichts abgewichen ist. Zwei Faelle, beide mit Grund im Text: das
|
|
152
|
+
* Symbol war fuer den nativen Befehl zu breit und ging als Bild hinaus, oder
|
|
153
|
+
* es passte nur unter der Mindest-Modulgroesse.
|
|
154
|
+
*
|
|
155
|
+
* Getrennt von `qrFehler`, weil die Handlung eine andere ist: dort heisst es
|
|
156
|
+
* "Beleg ohne QR, nachdrucken oder elektronisch ausgeben", hier "gedruckt,
|
|
157
|
+
* aber der eingestellte Weg taugt fuer dieses Geraet nicht".
|
|
158
|
+
*/
|
|
159
|
+
qrAusweich: string | null;
|
|
114
160
|
/** intern: bisher erzeugte Bytes */
|
|
115
161
|
readonly bytes: number[];
|
|
116
162
|
/** intern: global gesetzte Codepage (ueberlebt `escPosReset`) */
|
|
@@ -213,7 +259,45 @@ export declare function escPosRow(doc: EscPosDocument, columns: readonly PosColu
|
|
|
213
259
|
export declare function qrCodeBytes(text: string, options?: {
|
|
214
260
|
size?: QrSize;
|
|
215
261
|
correction?: QrCorrection;
|
|
262
|
+
modell1?: boolean;
|
|
216
263
|
}): Uint8Array;
|
|
217
|
-
/**
|
|
264
|
+
/**
|
|
265
|
+
* Setzt die Ausrichtung und haengt den nativen QR-Befehl an — mit
|
|
266
|
+
* **gerechneter** Modulgroesse, sofern `options.size` sie nicht festlegt.
|
|
267
|
+
*
|
|
268
|
+
* Ohne `size` entscheidet die Regel aus `qr-groesse.ts`: so gross wie
|
|
269
|
+
* moeglich, gedeckelt durch `options.groesse` (Vorgabe `auto` = der
|
|
270
|
+
* Bestandswert 4 dieses Pakets). Passt das Symbol auch mit der
|
|
271
|
+
* Ausnahmegroesse nicht aufs Papier, geht **kein** QR-Befehl hinaus und
|
|
272
|
+
* `doc.qrFehler` sagt warum: der Drucker schneidet ein zu breites Symbol
|
|
273
|
+
* nicht ab, er laesst es weg — ein Befehl, von dem man weiss, dass er nichts
|
|
274
|
+
* druckt, taeuschte nur einen Ausdruck vor. Den Bildweg kennt diese Ebene
|
|
275
|
+
* nicht; den faehrt `escPosQrRaster` bzw. der Belegweg in `layout-escpos.ts`.
|
|
276
|
+
*
|
|
277
|
+
* Eine leere Nutzlast geht unveraendert durch (fester Bestandsweg, keine
|
|
278
|
+
* Rechnung): sie ist ein Datenfehler, kein Papierfehler, und der Aufrufer
|
|
279
|
+
* behandelt sie ohnehin schon.
|
|
280
|
+
*/
|
|
218
281
|
export declare function escPosQrCode(doc: EscPosDocument, text: string, options?: EscPosQrOptions): void;
|
|
282
|
+
/**
|
|
283
|
+
* Der Bildweg: ein fertiges QR-Raster als Rasterbild (`GS v 0`) — der
|
|
284
|
+
* Notausgang, wenn der native Befehl das Symbol nicht auf das Papier bringt.
|
|
285
|
+
*
|
|
286
|
+
* Ein Pflichtbeleg ohne QR ist der schlechteste aller Ausgaenge; als Bild
|
|
287
|
+
* geht jedes Symbol hinaus, weil die Punkte je Modul hier bis auf 1 fallen
|
|
288
|
+
* duerfen. Dafuer ist das Bild langsamer und auf manchen Geraeten blasser.
|
|
289
|
+
*
|
|
290
|
+
* Das Raster selbst kommt vom Aufrufer (siehe `QrMatrix`): dieses Paket
|
|
291
|
+
* rechnet keine QR-Codes und verarbeitet keine Bilder.
|
|
292
|
+
*/
|
|
293
|
+
export declare function escPosQrRaster(doc: EscPosDocument, matrix: QrMatrix, options?: EscPosQrRasterOptions): void;
|
|
294
|
+
/**
|
|
295
|
+
* Punkte je Modul, mit denen `escPosQrRaster` ein Raster dieser Groesse auf
|
|
296
|
+
* dieses Papier bringt — dieselbe Rechnung, nur ohne Untergrenze 3: ein Bild
|
|
297
|
+
* darf bis auf einen Punkt je Modul schrumpfen und passt darum immer.
|
|
298
|
+
*/
|
|
299
|
+
export declare function qrRasterPunkte(paperSize: PosPaperSize, moduleAnzahl: number, options?: {
|
|
300
|
+
groesse?: QrModulGroesse;
|
|
301
|
+
ruhezoneModule?: number;
|
|
302
|
+
}): number;
|
|
219
303
|
export {};
|
|
@@ -47,6 +47,9 @@ exports.escPosHr = escPosHr;
|
|
|
47
47
|
exports.escPosRow = escPosRow;
|
|
48
48
|
exports.qrCodeBytes = qrCodeBytes;
|
|
49
49
|
exports.escPosQrCode = escPosQrCode;
|
|
50
|
+
exports.escPosQrRaster = escPosQrRaster;
|
|
51
|
+
exports.qrRasterPunkte = qrRasterPunkte;
|
|
52
|
+
const qr_groesse_js_1 = require("./qr-groesse.js");
|
|
50
53
|
// -------------------------------------------------------------- Befehlsbytes
|
|
51
54
|
// Wortwoertlich aus commands.dart. Die Zahlen sind ASCII-Codes der dortigen
|
|
52
55
|
// Zeichenketten: cCutFull = '$gs' + 'V0' ist GS 0x56 0x30 — die Ziffer '0',
|
|
@@ -81,6 +84,8 @@ const ZEILENUMBRUCH = 0x0a;
|
|
|
81
84
|
const CODEPAGE_ID = { CP437: 0, CP1252: 16 };
|
|
82
85
|
/** Korrekturstufen fuer GS ( k Funktion 169 — aus qrcode.dart. */
|
|
83
86
|
const QR_KORREKTUR = { L: 48, M: 49, Q: 50, H: 51 };
|
|
87
|
+
/** Nennbreite der Rolle in Millimetern — nur fuer Meldungstexte. */
|
|
88
|
+
const PAPIER_MM = { mm58: 58, mm80: 80 };
|
|
84
89
|
/** Druckbreite in Punkten je Papierformat — aus enums.dart (EscPaperSize.width). */
|
|
85
90
|
const PAPIER_BREITE = { mm58: 372, mm80: 558 };
|
|
86
91
|
/** Zeichen je Zeile nach Papier und Schrift — aus generator.dart. */
|
|
@@ -231,6 +236,8 @@ function createEscPosDocument(options = {}) {
|
|
|
231
236
|
globalFont: null,
|
|
232
237
|
maxCharsPerLine: null,
|
|
233
238
|
styles: vollstaendigeStile(),
|
|
239
|
+
qrFehler: null,
|
|
240
|
+
qrAusweich: null,
|
|
234
241
|
};
|
|
235
242
|
}
|
|
236
243
|
/** Die bisher erzeugten Bytes als Kopie. */
|
|
@@ -245,6 +252,10 @@ function escPosBytes(doc) {
|
|
|
245
252
|
function escPosReset(doc) {
|
|
246
253
|
anhaengen(doc, C_INIT);
|
|
247
254
|
doc.styles = vollstaendigeStile();
|
|
255
|
+
// Wie `PrintPaper.reset()` im Flutter-Zwilling: ein neu begonnener Beleg
|
|
256
|
+
// erbt die QR-Meldungen des vorigen nicht.
|
|
257
|
+
doc.qrFehler = null;
|
|
258
|
+
doc.qrAusweich = null;
|
|
248
259
|
escPosSetGlobalCodeTable(doc, doc.globalCodeTable);
|
|
249
260
|
escPosSetGlobalFont(doc, doc.globalFont);
|
|
250
261
|
}
|
|
@@ -609,6 +620,16 @@ function qrCodeBytes(text, options = {}) {
|
|
|
609
620
|
throw new Error('QR-Inhalt ist zu lang');
|
|
610
621
|
}
|
|
611
622
|
const bytes = [];
|
|
623
|
+
// Funktion 165: Symboltyp. Ohne diesen Befehl — dem Bestandsweg — waehlt der
|
|
624
|
+
// Drucker sein eigenes Modell, in aller Regel Modell 2. Genau das koennen
|
|
625
|
+
// manche guenstigen Geraete nicht: belegt ist eines, das unter dem Code eine
|
|
626
|
+
// "0" ausgibt, das Parameterbyte 0x30 des Druckbefehls, das es nicht als
|
|
627
|
+
// Befehl erkannt hat. Der Befehl geht deshalb nur hinaus, wenn er
|
|
628
|
+
// ausdruecklich verlangt ist; ein aufgedraengtes "Modell 2 fuer alle" waere
|
|
629
|
+
// eine stille Umstellung an jedem Bestandsgeraet.
|
|
630
|
+
if (options.modell1 === true) {
|
|
631
|
+
bytes.push(...C_QR_HEADER, 0x04, 0x00, 0x31, 0x41, 0x31, 0x00);
|
|
632
|
+
}
|
|
612
633
|
// Funktion 167: Modulgroesse
|
|
613
634
|
bytes.push(...C_QR_HEADER, 0x03, 0x00, 0x31, 0x43, size);
|
|
614
635
|
// Funktion 169: Fehlerkorrektur
|
|
@@ -624,15 +645,57 @@ function qrCodeBytes(text, options = {}) {
|
|
|
624
645
|
bytes.push(...C_QR_HEADER, 0x03, 0x00, 0x31, 0x51, 0x30);
|
|
625
646
|
return Uint8Array.from(bytes);
|
|
626
647
|
}
|
|
627
|
-
/**
|
|
648
|
+
/**
|
|
649
|
+
* Setzt die Ausrichtung und haengt den nativen QR-Befehl an — mit
|
|
650
|
+
* **gerechneter** Modulgroesse, sofern `options.size` sie nicht festlegt.
|
|
651
|
+
*
|
|
652
|
+
* Ohne `size` entscheidet die Regel aus `qr-groesse.ts`: so gross wie
|
|
653
|
+
* moeglich, gedeckelt durch `options.groesse` (Vorgabe `auto` = der
|
|
654
|
+
* Bestandswert 4 dieses Pakets). Passt das Symbol auch mit der
|
|
655
|
+
* Ausnahmegroesse nicht aufs Papier, geht **kein** QR-Befehl hinaus und
|
|
656
|
+
* `doc.qrFehler` sagt warum: der Drucker schneidet ein zu breites Symbol
|
|
657
|
+
* nicht ab, er laesst es weg — ein Befehl, von dem man weiss, dass er nichts
|
|
658
|
+
* druckt, taeuschte nur einen Ausdruck vor. Den Bildweg kennt diese Ebene
|
|
659
|
+
* nicht; den faehrt `escPosQrRaster` bzw. der Belegweg in `layout-escpos.ts`.
|
|
660
|
+
*
|
|
661
|
+
* Eine leere Nutzlast geht unveraendert durch (fester Bestandsweg, keine
|
|
662
|
+
* Rechnung): sie ist ein Datenfehler, kein Papierfehler, und der Aufrufer
|
|
663
|
+
* behandelt sie ohnehin schon.
|
|
664
|
+
*/
|
|
628
665
|
function escPosQrCode(doc, text, options = {}) {
|
|
629
666
|
escPosSetStyles(doc, { align: options.align ?? 'center' });
|
|
630
667
|
const qrOptionen = {};
|
|
631
|
-
if (options.size !== undefined)
|
|
632
|
-
qrOptionen.size = options.size;
|
|
633
668
|
if (options.correction !== undefined)
|
|
634
669
|
qrOptionen.correction = options.correction;
|
|
635
|
-
|
|
670
|
+
if (options.modell1 !== undefined)
|
|
671
|
+
qrOptionen.modell1 = options.modell1;
|
|
672
|
+
let drucken = true;
|
|
673
|
+
if (options.size !== undefined) {
|
|
674
|
+
qrOptionen.size = options.size;
|
|
675
|
+
}
|
|
676
|
+
else if (text !== '') {
|
|
677
|
+
const mass = (0, qr_groesse_js_1.qrGroesseFuer)({
|
|
678
|
+
nutzlast: text,
|
|
679
|
+
papierbreitePunkte: qr_groesse_js_1.QR_DRUCK_PUNKTE[doc.paperSize],
|
|
680
|
+
groesse: options.groesse ?? 'auto',
|
|
681
|
+
});
|
|
682
|
+
if (!mass.passt) {
|
|
683
|
+
doc.qrFehler =
|
|
684
|
+
`QR mit ${mass.module} Modulen ist fuer ${PAPIER_MM[doc.paperSize]} mm ` +
|
|
685
|
+
`(${qr_groesse_js_1.QR_DRUCK_PUNKTE[doc.paperSize]} Punkte) zu breit`;
|
|
686
|
+
drucken = false;
|
|
687
|
+
}
|
|
688
|
+
else {
|
|
689
|
+
if (mass.unterMindestmass) {
|
|
690
|
+
doc.qrAusweich =
|
|
691
|
+
`QR mit ${mass.module} Modulen passt nur mit ${String(mass.punkte)} Punkten ` +
|
|
692
|
+
`je Modul — unter dem Mindestmass von ${qr_groesse_js_1.QR_MINDEST_PUNKTE}`;
|
|
693
|
+
}
|
|
694
|
+
qrOptionen.size = mass.punkte;
|
|
695
|
+
}
|
|
696
|
+
}
|
|
697
|
+
if (drucken)
|
|
698
|
+
anhaengen(doc, qrCodeBytes(text, qrOptionen));
|
|
636
699
|
// Ausrichtung SOFORT zuruecksetzen: `ESC a` gilt nur am Zeilenanfang. Die
|
|
637
700
|
// Spalten-Positionierung (`ESC $`) schickt ihren Reset sonst mitten in der
|
|
638
701
|
// Zeile — Epson ignoriert ihn, und alles nach dem QR rueckte nach rechts
|
|
@@ -641,3 +704,76 @@ function escPosQrCode(doc, text, options = {}) {
|
|
|
641
704
|
escPosSetStyles(doc, { align: 'left' });
|
|
642
705
|
}
|
|
643
706
|
}
|
|
707
|
+
/**
|
|
708
|
+
* Der Bildweg: ein fertiges QR-Raster als Rasterbild (`GS v 0`) — der
|
|
709
|
+
* Notausgang, wenn der native Befehl das Symbol nicht auf das Papier bringt.
|
|
710
|
+
*
|
|
711
|
+
* Ein Pflichtbeleg ohne QR ist der schlechteste aller Ausgaenge; als Bild
|
|
712
|
+
* geht jedes Symbol hinaus, weil die Punkte je Modul hier bis auf 1 fallen
|
|
713
|
+
* duerfen. Dafuer ist das Bild langsamer und auf manchen Geraeten blasser.
|
|
714
|
+
*
|
|
715
|
+
* Das Raster selbst kommt vom Aufrufer (siehe `QrMatrix`): dieses Paket
|
|
716
|
+
* rechnet keine QR-Codes und verarbeitet keine Bilder.
|
|
717
|
+
*/
|
|
718
|
+
function escPosQrRaster(doc, matrix, options = {}) {
|
|
719
|
+
const module = matrix.length;
|
|
720
|
+
if (module <= 0)
|
|
721
|
+
throw new Error('QR-Raster ist leer');
|
|
722
|
+
for (const zeile of matrix) {
|
|
723
|
+
if (zeile.length !== module)
|
|
724
|
+
throw new Error('QR-Raster ist nicht quadratisch');
|
|
725
|
+
}
|
|
726
|
+
const ruhezone = options.ruhezoneModule ?? qr_groesse_js_1.QR_RUHEZONE_MODULE;
|
|
727
|
+
if (!istGanzzahl(ruhezone) || ruhezone < 0) {
|
|
728
|
+
throw new Error('ruhezoneModule muss eine Ganzzahl >= 0 sein');
|
|
729
|
+
}
|
|
730
|
+
const gesamtModule = module + 2 * ruhezone;
|
|
731
|
+
let punkte = options.punkteJeModul;
|
|
732
|
+
if (punkte === undefined) {
|
|
733
|
+
const deckel = qr_groesse_js_1.QR_MODUL_DECKEL[options.groesse ?? 'auto'];
|
|
734
|
+
punkte = Math.max(1, Math.min(deckel, Math.floor(qr_groesse_js_1.QR_DRUCK_PUNKTE[doc.paperSize] / gesamtModule)));
|
|
735
|
+
}
|
|
736
|
+
if (!istGanzzahl(punkte) || punkte < 1) {
|
|
737
|
+
throw new Error('punkteJeModul muss eine Ganzzahl >= 1 sein');
|
|
738
|
+
}
|
|
739
|
+
const breite = gesamtModule * punkte;
|
|
740
|
+
const byteJeZeile = Math.ceil(breite / 8);
|
|
741
|
+
const daten = new Uint8Array(byteJeZeile * breite);
|
|
742
|
+
for (let y = 0; y < breite; y++) {
|
|
743
|
+
const modulY = Math.floor(y / punkte) - ruhezone;
|
|
744
|
+
if (modulY < 0 || modulY >= module)
|
|
745
|
+
continue;
|
|
746
|
+
const zeile = matrix[modulY];
|
|
747
|
+
for (let x = 0; x < breite; x++) {
|
|
748
|
+
const modulX = Math.floor(x / punkte) - ruhezone;
|
|
749
|
+
if (modulX < 0 || modulX >= module)
|
|
750
|
+
continue;
|
|
751
|
+
if (zeile[modulX] !== true)
|
|
752
|
+
continue;
|
|
753
|
+
const i = y * byteJeZeile + (x >> 3);
|
|
754
|
+
daten[i] = daten[i] | (0x80 >> (x & 7));
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
escPosSetStyles(doc, { align: options.align ?? 'center' });
|
|
758
|
+
// GS v 0 m xL xH yL yH d1...dk — m = 0: normale Dichte, 1:1.
|
|
759
|
+
anhaengen(doc, [
|
|
760
|
+
GS, 0x76, 0x30, 0x00,
|
|
761
|
+
byteJeZeile & 0xff, (byteJeZeile >> 8) & 0xff,
|
|
762
|
+
breite & 0xff, (breite >> 8) & 0xff,
|
|
763
|
+
...daten,
|
|
764
|
+
]);
|
|
765
|
+
anhaengen(doc, [ZEILENUMBRUCH]);
|
|
766
|
+
if ((options.align ?? 'center') !== 'left') {
|
|
767
|
+
escPosSetStyles(doc, { align: 'left' });
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
/**
|
|
771
|
+
* Punkte je Modul, mit denen `escPosQrRaster` ein Raster dieser Groesse auf
|
|
772
|
+
* dieses Papier bringt — dieselbe Rechnung, nur ohne Untergrenze 3: ein Bild
|
|
773
|
+
* darf bis auf einen Punkt je Modul schrumpfen und passt darum immer.
|
|
774
|
+
*/
|
|
775
|
+
function qrRasterPunkte(paperSize, moduleAnzahl, options = {}) {
|
|
776
|
+
const ruhezone = options.ruhezoneModule ?? qr_groesse_js_1.QR_RUHEZONE_MODULE;
|
|
777
|
+
const deckel = qr_groesse_js_1.QR_MODUL_DECKEL[options.groesse ?? 'auto'];
|
|
778
|
+
return Math.max(1, Math.min(deckel, Math.floor(qr_groesse_js_1.QR_DRUCK_PUNKTE[paperSize] / (moduleAnzahl + 2 * ruhezone))));
|
|
779
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { type PosPaperSize, type PosAlign, type PosFont, type PosCutMode, type PosCodeTable, type PosTextSize, type QrSize, type QrCorrection, type PosStyles, type PosColumn, type EscPosOptions, type EscPosTextOptions, type EscPosHrOptions, type EscPosQrOptions, type EscPosDocument, createEscPosDocument, escPosBytes, escPosReset, escPosSetGlobalCodeTable, escPosSetGlobalFont, escPosSetStyles, escPosText, escPosEmptyLines, escPosFeed, escPosCut, escPosHr, escPosRow, escPosQrCode, encodeEscPosText, qrCodeBytes, escPosMaxCharsPerLine, escPosWortzeilen, wortzeilenText, } from './escpos.js';
|
|
1
|
+
export { type PosPaperSize, type PosAlign, type PosFont, type PosCutMode, type PosCodeTable, type PosTextSize, type QrSize, type QrCorrection, type QrMatrix, type PosStyles, type PosColumn, type EscPosOptions, type EscPosTextOptions, type EscPosHrOptions, type EscPosQrOptions, type EscPosQrRasterOptions, type EscPosDocument, createEscPosDocument, escPosBytes, escPosReset, escPosSetGlobalCodeTable, escPosSetGlobalFont, escPosSetStyles, escPosText, escPosEmptyLines, escPosFeed, escPosCut, escPosHr, escPosRow, escPosQrCode, escPosQrRaster, qrRasterPunkte, encodeEscPosText, qrCodeBytes, escPosMaxCharsPerLine, escPosWortzeilen, wortzeilenText, } from './escpos.js';
|
|
2
|
+
export { type QrModulGroesse, type QrGroesse, QR_MODUL_DECKEL, QR_RUHEZONE_MODULE, QR_MINDEST_PUNKTE, QR_AUSNAHME_PUNKTE, QR_HOECHST_PUNKTE, QR_DRUCK_PUNKTE, qrModulAnzahl, qrGroesseBerechnen, qrGroesseFuer, } from './qr-groesse.js';
|
|
2
3
|
export { escPosPrintableText } from './printable.js';
|
|
3
4
|
export { type UsbEndpointLike, type UsbAlternateLike, type UsbInterfaceLike, type UsbConfigurationLike, type UsbTransferOutResultLike, type UsbWriterLike, type UsbIdentityLike, type UsbDeviceLike, type UsbPrinterEndpoint, type UsbPrinterConnection, USB_VENDOR_EPSON, USB_CLASS_PRINTER, UsbTimeoutError, usbDeviceKey, usbFindPrinterEndpoint, usbWriteAll, usbConnectPrinter, usbPrint, usbDisconnect, } from './webusb.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.usbDisconnect = exports.usbPrint = exports.usbConnectPrinter = exports.usbWriteAll = exports.usbFindPrinterEndpoint = exports.usbDeviceKey = exports.UsbTimeoutError = exports.USB_CLASS_PRINTER = exports.USB_VENDOR_EPSON = exports.escPosPrintableText = exports.wortzeilenText = exports.escPosWortzeilen = exports.escPosMaxCharsPerLine = exports.qrCodeBytes = exports.encodeEscPosText = exports.escPosQrCode = exports.escPosRow = exports.escPosHr = exports.escPosCut = exports.escPosFeed = exports.escPosEmptyLines = exports.escPosText = exports.escPosSetStyles = exports.escPosSetGlobalFont = exports.escPosSetGlobalCodeTable = exports.escPosReset = exports.escPosBytes = exports.createEscPosDocument = void 0;
|
|
3
|
+
exports.usbDisconnect = exports.usbPrint = exports.usbConnectPrinter = exports.usbWriteAll = exports.usbFindPrinterEndpoint = exports.usbDeviceKey = exports.UsbTimeoutError = exports.USB_CLASS_PRINTER = exports.USB_VENDOR_EPSON = exports.escPosPrintableText = exports.qrGroesseFuer = exports.qrGroesseBerechnen = exports.qrModulAnzahl = exports.QR_DRUCK_PUNKTE = exports.QR_HOECHST_PUNKTE = exports.QR_AUSNAHME_PUNKTE = exports.QR_MINDEST_PUNKTE = exports.QR_RUHEZONE_MODULE = exports.QR_MODUL_DECKEL = exports.wortzeilenText = exports.escPosWortzeilen = exports.escPosMaxCharsPerLine = exports.qrCodeBytes = exports.encodeEscPosText = exports.qrRasterPunkte = exports.escPosQrRaster = exports.escPosQrCode = exports.escPosRow = exports.escPosHr = exports.escPosCut = exports.escPosFeed = exports.escPosEmptyLines = exports.escPosText = exports.escPosSetStyles = exports.escPosSetGlobalFont = exports.escPosSetGlobalCodeTable = exports.escPosReset = exports.escPosBytes = exports.createEscPosDocument = void 0;
|
|
4
4
|
var escpos_js_1 = require("./escpos.js");
|
|
5
5
|
Object.defineProperty(exports, "createEscPosDocument", { enumerable: true, get: function () { return escpos_js_1.createEscPosDocument; } });
|
|
6
6
|
Object.defineProperty(exports, "escPosBytes", { enumerable: true, get: function () { return escpos_js_1.escPosBytes; } });
|
|
@@ -15,11 +15,23 @@ Object.defineProperty(exports, "escPosCut", { enumerable: true, get: function ()
|
|
|
15
15
|
Object.defineProperty(exports, "escPosHr", { enumerable: true, get: function () { return escpos_js_1.escPosHr; } });
|
|
16
16
|
Object.defineProperty(exports, "escPosRow", { enumerable: true, get: function () { return escpos_js_1.escPosRow; } });
|
|
17
17
|
Object.defineProperty(exports, "escPosQrCode", { enumerable: true, get: function () { return escpos_js_1.escPosQrCode; } });
|
|
18
|
+
Object.defineProperty(exports, "escPosQrRaster", { enumerable: true, get: function () { return escpos_js_1.escPosQrRaster; } });
|
|
19
|
+
Object.defineProperty(exports, "qrRasterPunkte", { enumerable: true, get: function () { return escpos_js_1.qrRasterPunkte; } });
|
|
18
20
|
Object.defineProperty(exports, "encodeEscPosText", { enumerable: true, get: function () { return escpos_js_1.encodeEscPosText; } });
|
|
19
21
|
Object.defineProperty(exports, "qrCodeBytes", { enumerable: true, get: function () { return escpos_js_1.qrCodeBytes; } });
|
|
20
22
|
Object.defineProperty(exports, "escPosMaxCharsPerLine", { enumerable: true, get: function () { return escpos_js_1.escPosMaxCharsPerLine; } });
|
|
21
23
|
Object.defineProperty(exports, "escPosWortzeilen", { enumerable: true, get: function () { return escpos_js_1.escPosWortzeilen; } });
|
|
22
24
|
Object.defineProperty(exports, "wortzeilenText", { enumerable: true, get: function () { return escpos_js_1.wortzeilenText; } });
|
|
25
|
+
var qr_groesse_js_1 = require("./qr-groesse.js");
|
|
26
|
+
Object.defineProperty(exports, "QR_MODUL_DECKEL", { enumerable: true, get: function () { return qr_groesse_js_1.QR_MODUL_DECKEL; } });
|
|
27
|
+
Object.defineProperty(exports, "QR_RUHEZONE_MODULE", { enumerable: true, get: function () { return qr_groesse_js_1.QR_RUHEZONE_MODULE; } });
|
|
28
|
+
Object.defineProperty(exports, "QR_MINDEST_PUNKTE", { enumerable: true, get: function () { return qr_groesse_js_1.QR_MINDEST_PUNKTE; } });
|
|
29
|
+
Object.defineProperty(exports, "QR_AUSNAHME_PUNKTE", { enumerable: true, get: function () { return qr_groesse_js_1.QR_AUSNAHME_PUNKTE; } });
|
|
30
|
+
Object.defineProperty(exports, "QR_HOECHST_PUNKTE", { enumerable: true, get: function () { return qr_groesse_js_1.QR_HOECHST_PUNKTE; } });
|
|
31
|
+
Object.defineProperty(exports, "QR_DRUCK_PUNKTE", { enumerable: true, get: function () { return qr_groesse_js_1.QR_DRUCK_PUNKTE; } });
|
|
32
|
+
Object.defineProperty(exports, "qrModulAnzahl", { enumerable: true, get: function () { return qr_groesse_js_1.qrModulAnzahl; } });
|
|
33
|
+
Object.defineProperty(exports, "qrGroesseBerechnen", { enumerable: true, get: function () { return qr_groesse_js_1.qrGroesseBerechnen; } });
|
|
34
|
+
Object.defineProperty(exports, "qrGroesseFuer", { enumerable: true, get: function () { return qr_groesse_js_1.qrGroesseFuer; } });
|
|
23
35
|
var printable_js_1 = require("./printable.js");
|
|
24
36
|
Object.defineProperty(exports, "escPosPrintableText", { enumerable: true, get: function () { return printable_js_1.escPosPrintableText; } });
|
|
25
37
|
var webusb_js_1 = require("./webusb.js");
|