Skip to content
啟樞科技文檔

啟樞檔案館

這裡是後續撰寫產品文檔的入口頁。左側負責文檔分類與章節層級,右側保留正式文檔正文、提示塊、程式碼、表格與上一頁 / 下一頁的位置。

sdk / typescript

TypeScript SDK

面向 Web、小程式、Node 和橋接執行時的 NIB 印表機 SDK 接入說明。

TypeScript SDK 適合 Web、小程式、UniApp、Taro、Node 工具和原生橋接執行時。初學時可以先記住一件事:範本程式碼只產生列印指令,平台程式碼只負責把位元組寫進印表機。

用途
@boxliy/nib 標準聚合套件,匯出 core、Boxliy/Aryten/Lin8inch 方言和圖片能力。
@nib/core ConnectedDevicewriteTo()WriteOptions、接收源和查詢分發。
@nib/esc-boxliy@nib/tspl-boxliy@nib/cpcl-boxliy Boxliy ESC、TSPL、CPCL 指令建構器和回應解析器。
@nib/esc@nib/tspl@nib/cpcl Aryten 相容方言。
@nib/esc-lin8inch@nib/tspl-lin8inch Lin8inch 方言。
@nib/bluetooth-ble-core BLE 特徵值選擇、UUID 匹配和 credit 流控。
@nib/wechat-bluetooth-ble@nib/uniapp-bluetooth-ble@nib/taro-bluetooth-ble 微信、UniApp、Taro 的 BLE 轉接。
@nib/webusb 瀏覽器 WebUSB 連線。

如果不確定從哪裡開始,業務專案通常先用 @boxliy/nib;只有在需要拆分套件或裁剪能力時,再直接依賴底層模組。

所有平台轉接器最後都要提供 core 的 ConnectedDevice

interface ConnectedDevice {
origin(): any
deviceName(): string
connectionState(): ConnectionState
disconnect(): Promise<void>
canRead(): boolean
write(data: Uint8Array): Promise<void>
read(options?: ReadOptions): Promise<Uint8Array>
notify(callback: (value: Uint8Array) => Promise<void>): void
flush(): void
}

微信、小程式框架、WebUSB 或原生 App 的 API 可以完全不同,但只要包裝成這個介面,同一套列印範本就可以複用。

推薦從 TSPL 標籤範例開始,因為它清楚表達紙張尺寸、清空畫布、放置文字和列印份數:

import { TsplAryten } from '@boxliy/nib'
await TsplAryten.create()
.size(40, 30)
.cls()
.text({ x: 20, y: 20, content: 'NIB SDK' })
.print()
.writeTo(device)

writeTo(device) 會把建構器裡的位元組寫入裝置,然後清空目前建構器。也可以先取得位元組,再手動寫入:

import { WriteOptions, writeTo } from '@boxliy/nib'
const data = TsplAryten.create()
.size(40, 30)
.cls()
.text({ x: 20, y: 20, content: 'NIB SDK' })
.print()
.bytes()
await writeTo(device, data, new WriteOptions(true, 512))

writeTo() 預設啟用分片寫入,預設分片大小是 512 位元組。只有裝置或平台 API 已經處理好分片時,才考慮關閉分片。

不要把不同語言或不同方言的範例混用。目前 TypeScript 的 EscBoxliy 適合 ESC 命令、查詢、圖片等能力,但不是 Java/Swift 那種 text('...') 範例形態。一般文字內容可以選擇 TSPL/CPCL 的 text(...) API,或按具體 ESC 方言支援的方法產生原始位元組。

import { EscBoxliy } from '@boxliy/nib'
const script = EscBoxliy.create()
.reset()
.feed(2)
.bytes()
await writeTo(device, script)

@nib/bluetooth-ble-core 提供兩類 credit 策略:

API 用途
BleLaneCreditFlowControlStrategy 預設的 lane-credit 策略,按 credit 和 MTU 分片寫入。
BleSignalCreditFlowControlStrategy signal-credit 策略,適合 credit 通知語義不同的裝置。
BleCreditOptions 配置服務 UUID、寫入/讀取/credit 特徵值、初始 credit、MTU 和 fallback。
selectBleCreditCharacteristicPair() 按 UUID 從服務列表中找到 write、read、credit 特徵值。

預設 UUID 是:

預設值
service FF00
write characteristic FF02
read characteristic FF01
credit characteristic FF03

預設 lane-credit 初始 credit 是 1,初始 MTU 是 20,payload overhead 是 3。signal-credit 預設初始 credit 是 0,payload overhead 是 0。如果啟用 fallbackMode: 'bypass-write',credit 逾時時可以退回一般寫入;預設行為是失敗。

core 裡常用的接收和查詢類型是 ReceiveSourcePollingReceiveSourceCallbackReceiveSourceNotifyReceiveSourcereceiveSourceOf()QueryDispatcherPendingQuery

Boxliy 方言提供回應解析器:

方言 解析器
ESC EscResponseParser
TSPL TsplResponseParser
CPCL CpclResponseParser

查詢狀態時,先用方言建構器產生查詢指令並寫入裝置,再把裝置回包交給對應 parser。解析邏輯建議放在列印會話層,不要散落在 UI 元件裡。

方法与命令清单

下面列出这个语言 SDK 中常用且对接方需要理解的公开入口。构建器方法会生成对应打印机指令;是否能在某台机器上使用,仍以机器固件支持的 ESC、TSPL、CPCL 或 Lin8inch 指令组为准。

Core、连接与写入

对象方法 / 命令作用参数说明
ConnectedDeviceorigin(), deviceName(), connectionState(), disconnect(), canRead(), write(data), read(options), notify(callback), flush()抽象真实打印机连接,供模板、写入管线和查询层统一使用。`write/read/notify` 由平台适配器实现;`flush` 清理平台写入队列或缓存。
writeTo / WriteOptionswriteTo(device, data, options), new WriteOptions(enableChunkWrite, chunkSize)把已经构建好的字节按分片、超时、取消和流控规则写入设备。`enableChunkWrite` 控制是否分片;`chunkSize` 默认 512;`data` 可来自 builder.bytes()。
Pen / ReceiveSource / QueryDispatcherappend(), appendByte(), appendBytes(), appendText(), bytes(), reset(), start(), stop(), accept(), receive(), query(), cancel(), shutdown()把设备回包接入监听器或查询分发器,用于状态、电量、型号等查询。`append*` 追加字节或文本;查询的 matcher 负责把回包映射成业务结果。
BLE adaptersBleCreditOptions, BleLaneCreditFlowControlStrategy, BleSignalCreditFlowControlStrategy, selectBleCreditCharacteristicPair(), isBleUuidMatch()处理 BLE 特征值选择、MTU 分片、credit 通知和 fallback 写入。配置 UUID、initialCredit、initialMtu、payloadMtu、fallbackMode;平台包负责微信、Taro、UniApp、WebUSB 连接。

指令构建器

对象方法 / 命令作用参数说明
EscBoxliy / EscArytenbytes(), reset(), lineDot(), backLineDot(), batteryVolume(), enable(), getShutdownTime(), learnLabelGap(), line(), location(), mac(), info(), model(), name(), paperType(), position(), printerVersion(), setShutdownTime(), sn(), state(), stopJob(), thickness(), version(), wakeup(), setBTType(), cut(), lineDotCut(), nn(), setCurrentTime(), image()生成 ESC/Boxliy 基础指令,适合小票、便携打印机和支持 ESC 的机型。多数方法无参或使用 number;`setCurrentTime` 传年月日时分秒;`image` 传 x/y/bitmap/byteWidth/height/compress。
TsplBoxliy / TsplArytenbytes(), reset(), size(), gap(), bline(), continuous(), label(), cls(), direction(), speed(), density(), reference(), offset(), shift(), ribbon(), tear(), peel(), cut(), print(), bar(), line(), box(), circle(), ellipse(), text(), textBox(), barcode(), qrcode(), dmatrix(), image(), downloadBmp(), putImage()生成 TSPL 标签指令,适合需要纸张尺寸、坐标、条码和二维码的标签模板。TSPL 方法多使用 options 对象;坐标和尺寸是点或毫米,取决于对应 TSPL 命令;文字/条码/二维码传 content/value、font、rotation、level。
CpclBoxliy / CpclArytenbytes(), reset(), page(), feed(), form(), print(), gapSense(), pageWidth(), text(), setMag(), bold(), underline(), watermark(), line(), box(), inverse(), barcode(), qrcode(), image(), status(), sn()生成 CPCL 标签指令,适合 CPCL 机型的页面、文字、线条、条码和图片。CPCL 方法多使用 options 对象;`page` 传 height/copies/pageWidth;图元传坐标、宽高和线宽;图片传 bitmap 或 prepared bitmap。
EscLin8inchbatteryLevel(), extendedModel(), bootVersion(), advancedDensity(), advancedDensityStatus(), mediaProfile(), mediaProfileStatus(), grayMode(), grayscaleImage(), wirelessProvisioning(), wirelessProvisioningStatus(), compressedRasterTransport(), mediaTag(), mediaTagUid(), consumedMediaLength(), remainingMediaLength(), restoreLabelStartPosition(), alternateMotionProfile()在 ESC 基础上增加 Lin8inch 遥测、介质、配网和光栅传输相关命令。`grayscaleImage` 传图片参数;`wirelessProvisioning` 传 ssid/password/mode;其余多为查询或开关命令。
TsplLin8inchautomaticStatusFeedback(), printCompletion(), printerStatus(), firmwareVersion(), serialNumber(), macAddress(), deviceSpeed(), deviceSelfTest(), thermalStatus(), productId(), versionInfo(), selfTestPage(), redDensity(), blackColor(), ribbonEnd(), ribbonEndStatus(), modelSetting(), serialSetting(), versionSetting(), gbkCodepage(), utf8Codepage(), gapDetection()在 TSPL 基础上增加 Lin8inch 状态反馈、介质、色带和出纸配置命令。`printCompletion` 传 token;`redDensity/deviceSpeed` 传数字;`printerStatus` 传状态 flag。

回包解析

对象方法 / 命令作用参数说明
EscResponse / TsplResponse / CpclResponsegetQuery(), getType(), getRaw(), getRawHex(), getStatusByte(), getStatusFlags(), hasStatusFlag(), isReady(), getBatteryLevel(), getText(), getMacAddress(), getEventValue(), getDescription()把打印机回包解析成状态、电量、文本、MAC、事件或未知响应。ESC 有事件值;TSPL/CPCL 主要返回状态、电量、文本、MAC 和描述。
  • 先確認印表機支援 ESC、TSPL 還是 CPCL,再選建構器。
  • 平台藍牙、USB、橋接 API 都放在 adapter 層,範本層只產生位元組。
  • 每個範本都保留位元組快照測試,避免改 UI 時改壞指令。
  • BLE 裝置要在真機上驗證 MTU、分片大小、credit 通知和斷線重連。