NX.Escpos
— NexaEscpos
NexaEscpos membangun byte mentah ESC/POS untuk printer thermal (serial/USB/Ethernet
lewat driver atau bridge). Modul ini tidak memanggil window.print() dan
tidak mengirim data ke perangkat keras — Anda meneruskan Uint8Array / file ke
WebUSB, backend (Node, Python, dll.), atau aplikasi desktop.
API utama: new NX.Escpos() setelah nxdom.js memuat NX.
Alias: NX.Escpos sama dengan NX.NexaEscpos.
window.NexaEscpos diset untuk debugging. Demo: templates/escpos.js (rute
/escpos jika terdaftar).
Cetak lewat browser (HTML): NX.Prind.
1. Perbedaan dengan NX.Prind
NX.Prind |
NX.Escpos |
|
|---|---|---|
| Target | Elemen HTML → dialog cetak browser | Byte perintah printer thermal |
| Saluran | window.print / iframe / tab baru |
WebUSB, serial, socket, file .bin |
| Cocok untuk | Invoice / laporan A4 | Struk POS, kitchen printer |
Keduanya bisa dipakai bersamaan untuk skenario berbeda.
2. Cara memakai (minimal)
Metode builder mengembalikan this (chainable).
const esc = new NX.Escpos();
esc
.init()
.align("center")
.bold(true)
.text("TOKO")
.lf()
.resetModes()
.text("Item 1")
.lf()
.feedLines(3)
.cut("partial");
const bytes = esc.toUint8Array();
// esc.download("struk.bin");3. Metode builder (ringkasan)
| Metode | Keterangan |
|---|---|
clone() |
Salin buffer ke instance baru. |
raw(input) |
Lihat §4. |
init() |
ESC @ — inisialisasi umum. |
text(s) |
Teks; §5. |
lf() |
Line feed (0x0A). |
crlf() |
CR + LF. |
feedLines(n) |
ESC d n — feed maks. 255 baris. |
align(mode) |
left | center | right (ESC a). |
bold(on) |
ESC E tebal on/off. |
underline(mode) |
ESC - — 0 off, 1 / 2 ketebalan. |
size(w, h) |
GS ! — perkalian lebar/tinggi 1–8. |
resetModes() |
bold(false), underline(0), size(1,1). |
cut(kind) |
partial | full (GS V). |
cashDrawerPulse(m, t1, t2) |
ESC p — pulsa laci (default umum 120/240). |
barcode128(data) |
§6 |
qr(data, opt?) |
§6 |
concat(other) |
Gabung instance lain atau Uint8Array. |
length (getter) |
Jumlah byte saat ini. |
4. raw() — input byte
Jenis input |
Perilaku |
|---|---|
Uint8Array |
Setiap byte ditambahkan. |
number[] |
Setiap elemen di-mask & 0xff. |
string |
Dianggap hex tanpa spasi (mis. "1B40" → ESC @). Panjang ganjil: hindari. |
null / undefined |
Tidak menambah apa pun. |
5. Teks & encoding
text()memakaiTextEncoder→ UTF-8.-
Banyak printer perlu code page tambahan; jika karakter rusak, sisipkan byte lewat
raw()sesuai manual (CP437, Windows-1252, dll.).
6. QR & CODE128
qr(data, opt?)
data: string (UTF-8).opt.moduleSize: 1–16 (default6).opt.ecc:'L'|'M'|'Q'|'H'(default'M').- Urutan perintah pola GS ( k umum di Epson dan clone; firmware lain bisa berbeda.
barcode128(data)
GS kmode 73 (CODE128); payload maks. 255 byte (lebih panjang dipotong + peringatan konsol).- Isi dari string via UTF-8; untuk ASCII murni biasanya aman.
7. Keluaran & unduhan
| Metode | Keterangan |
|---|---|
toUint8Array() |
Salinan buffer sebagai Uint8Array. |
toArrayBuffer() |
ArrayBuffer dari salinan tersebut. |
toBlob() |
Blob application/octet-stream. |
download(filename?) |
Unduh (default escpos.bin); perlu DOM (document.createElement). |
8. Statis receipt()
const esc = NX.Escpos.receipt("Baris 1\nBaris 2\nBaris 3");
esc.feedLines(2).cut("partial");Setara: init(), tiap baris dipisah \n dengan lf(), lalu satu lf() di akhir.
9. Impor modul
import NexaEscpos from "/assets/modules/Escpos/NexaEscpos.js";
// atau
import { NexaEscpos } from "/assets/modules/Escpos/NexaEscpos.js";
const esc = new NexaEscpos();Setelah nxdom.js dimuat, disarankan new NX.Escpos() agar konsisten dengan modul lain.
Ada export default dan kelas bernama NexaEscpos — bundler harus mendukung impor named.
Berkas implementasi
assets/modules/Escpos/NexaEscpos.js · agregasi: assets/modules/nxdom.js.