Nxdom Framework

Nusantara eXtreme Development Object Model — dokumentasi resmi

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() memakai TextEncoderUTF-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 (default 6).
  • 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 k mode 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.

Perilaku perintah GS tergantung firmware printer; uji di perangkat Anda sebelum produksi.