更新记录
1.0.0(2026-08-13)
- 首发:芯烨 XPrinter 票据打印 UTS API
- Android:蓝牙经典 SPP、局域网 TCP、USB Host;内置 printer-lib 3.2.0
- iOS:BLE/BT、局域网 TCP;内置 PrinterSDK v2.3.0
- 鸿蒙:官方 printersdk 1.0.6(蓝牙/LAN/USB)已打包,无需另行安装
- 能力:文本/多列、对齐加粗字号、走纸分隔线、条码、二维码、位图透传、切纸、开钱箱、蜂鸣、状态查询、纸宽 58/72/80、透传 sendRaw
- 微信小程序本期不支持
平台兼容性
uni-app(4.11)
| Vue2 |
Vue3 |
Vue3插件版本 |
Chrome |
Safari |
app-vue |
app-vue插件版本 |
app-nvue |
app-nvue插件版本 |
Android |
Android插件版本 |
iOS |
iOS插件版本 |
鸿蒙 |
鸿蒙插件版本 |
| × |
√ |
1.0.0 |
× |
× |
√ |
1.0.0 |
√ |
1.0.0 |
5.0 |
1.0.0 |
12 |
1.0.0 |
12 |
1.0.0 |
| 微信小程序 |
支付宝小程序 |
抖音小程序 |
百度小程序 |
快手小程序 |
京东小程序 |
鸿蒙元服务 |
QQ小程序 |
飞书小程序 |
小红书小程序 |
快应用-华为 |
快应用-联盟 |
| × |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
× |
uni-app x(4.11)
| Chrome |
Safari |
Android |
Android插件版本 |
iOS |
iOS插件版本 |
鸿蒙 |
微信小程序 |
| × |
× |
5.0 |
1.0.0 |
12 |
1.0.0 |
× |
× |
breao-xprinter 使用说明
芯烨 XPrinter 票据打印插件,适用于收银、餐饮小票等芯烨热敏机场景。
当前版本:1.0.0
- Android:蓝牙经典 SPP + 局域网 TCP + USB Host
- iOS:BLE/BT + 局域网 TCP
- 鸿蒙:官方 SDK(蓝牙 / 局域网 / USB,har 已内置)
- 能力:文本/多列、对齐加粗字号、条码/二维码/位图、切纸/钱箱/蜂鸣、状态查询、纸宽 58/72/80、原始字节透传
- 不做微信小程序端、芯烨云开放 API、全量 TSPL 标签排版引擎
建议调用顺序:init → connectBluetooth / connectLan / connectUsb → 打印指令 → disconnect / destroy。各异步方法均支持 success / fail / complete;fail 含 errCode / errMsg。插件为单例连接语义:再次 init 会销毁上一实例。
1. 环境要求
- HBuilderX 4.11 及以上
- uni-app Vue3(App-vue / App-nvue)或 uni-app x(App-Android / App-iOS;uni-app x 下鸿蒙为不支持)
- 支持:App-Android、App-iOS、App-鸿蒙(仅 uni-app)
- 不支持:H5、微信及其它小程序
- Android 最低 API:21;iOS 最低 12;鸿蒙最低 API:12
- App 真机调试须制作自定义基座;正式发版须购买授权后走云端传统打包
- 授权绑定唯一 appid + 包名
2. 安装与引入
将插件目录放入工程的 uni_modules/breao-xprinter,或从插件市场导入后同步。官方 SDK 二进制已内置,无需再手动下载 jar / xcframework,也无需执行 ohpm install @xpsdk/printersdk。
import {
init,
destroy,
startBluetoothScan,
stopBluetoothScan,
getBondedDevices,
connectBluetooth,
connectLan,
connectUsb,
disconnect,
getConnectionState,
printText,
printColumns,
printBytes,
sendRaw,
setAlign,
setBold,
setFontSize,
feed,
printDivider,
printBarcode,
printQrcode,
printImage,
cutPaper,
openCashBox,
beep,
getPrinterStatus,
} from '@/uni_modules/breao-xprinter'
3. API
3.1 init / destroy
init({
transport: 'lan',
paperWidthMm: 80,
encoding: 'gbk',
debug: false,
onDisconnected(res) {
console.log('disconnected', res)
},
success() {},
fail(err) {
console.error(err.errCode, err.errMsg)
},
})
destroy({ success() {}, fail() {} })
3.2 扫描与连接
startBluetoothScan({
timeout: 10000,
success(res) {
// res.devices: [{ name, address, rssi?, bonded? }]
},
fail(err) {},
})
getBondedDevices({ success(res) {}, fail(err) {} }) // Android 已配对列表
connectBluetooth({ address: 'XX:XX:XX:XX:XX:XX', success() {}, fail(err) {} })
connectLan({ host: '192.168.1.100', success() {}, fail(err) {} })
connectUsb({ success() {}, fail(err) {} }) // 须 init({ transport: 'usb' })
disconnect({ success() {}, fail() {} })
说明:iOS 请先扫描再连接;鸿蒙蓝牙传系统蓝牙设备 id;参数默认值见 §4。
3.3 打印与排版
printText({ content: 'Hello XPrinter', success() {}, fail() {} })
printColumns({ columns: ['品名', '数量', '金额'], widths: [2, 1, 1], success() {}, fail() {} })
setAlign({ align: 'center', success() {}, fail() {} })
setBold({ bold: true, success() {}, fail() {} })
setFontSize({ width: 2, height: 2, success() {}, fail() {} })
printBarcode({ content: '123456789012', type: 'CODE128', success() {}, fail() {} })
printQrcode({ content: 'https://example.com/order/1', success() {}, fail() {} })
printImage({ base64: '...', align: 'center', success() {}, fail() {} })
cutPaper({ mode: 'partial', success() {}, fail() {} })
openCashBox({ pin: 0, success() {}, fail() {} })
beep({ times: 1, duration: 3, success() {}, fail() {} })
printBytes({ data: arrayBuffer, success() {}, fail() {} })
3.4 状态查询
getConnectionState({
success(res) {
// res.state / res.address / res.transport / res.paperWidthMm
},
fail(err) {},
})
getPrinterStatus({
success(res) {
// res.online / paperWidthMm / transport / rawStatus(无回读时为 -1)
},
fail(err) {},
})
| 字段 |
说明 |
| state |
连接状态 disconnected / connecting / connected |
| online |
是否已连接(getPrinterStatus) |
| paperWidthMm |
当前纸宽配置 |
| transport |
当前传输方式 |
| rawStatus |
机型回读状态字节;不可读时为 -1 |
4. 可配置项
| 字段 |
位置 |
默认 |
说明 |
| transport |
init |
bluetooth |
bluetooth / lan / usb;鸿蒙三通道均走官方 SDK;iOS 不支持 usb |
| paperWidthMm |
init |
80 |
纸宽毫米:58 / 72 / 80 |
| encoding |
init / printText |
gbk |
printText 默认编码;端不支持时请改用 printBytes |
| codePage |
init |
空 |
代码页提示字符串,供对接官方 SDK / 固件时参考 |
| lanPort |
init |
9100 |
局域网默认 TCP 端口,可被 connectLan.port 覆盖 |
| bleChunkSize |
init |
端默认 |
BLE 单次写入字节数;Android 经典 SPP 忽略 |
| bleWriteInterval |
init |
端默认 |
BLE 分片写间隔毫秒;Android 经典 SPP 忽略 |
| bleServiceUuid |
init |
空 |
BLE Service UUID;空则宽松匹配可写特征(iOS) |
| bleCharacteristicUuid |
init |
空 |
BLE Characteristic UUID;空则宽松匹配 |
| debug |
init |
false |
调试日志 |
| onDisconnected |
init |
无 |
被动断开回调 |
| timeout |
startBluetoothScan |
10000 |
扫描超时毫秒 |
| includeBonded |
startBluetoothScan |
true |
是否合并系统已配对设备(Android) |
| nameHints |
startBluetoothScan |
内置关键字 |
名称过滤;默认含 XP-、XPrinter、芯烨、Printer、POS 等 |
| address |
connectBluetooth |
必填 |
Android 多为 MAC;iOS 为扫描结果 address;鸿蒙为系统蓝牙设备 id |
| timeout |
connectBluetooth |
15000 |
连接超时毫秒 |
| host |
connectLan |
必填 |
打印机局域网 IP |
| port |
connectLan |
init.lanPort 或 9100 |
TCP 端口 |
| timeout |
connectLan |
10000 |
连接超时毫秒 |
| deviceName |
connectUsb |
空 |
USB 设备名;空则尝试首个可用打印机类设备(Android / 鸿蒙) |
| content |
printText / printBarcode / printQrcode |
必填 |
文本或码内容 |
| encoding |
printText |
覆盖 init.encoding |
本次打印编码 |
| newline |
printText |
true |
打印后是否追加换行 |
| columns |
printColumns |
必填 |
多列文本字符串数组 |
| widths |
printColumns |
均分 |
各列相对宽度权重 |
| data |
printBytes / sendRaw |
必填 |
原始字节 ArrayBuffer |
| align |
setAlign / printImage |
left |
left / center / right |
| bold |
setBold |
必填 |
是否加粗 |
| width / height |
setFontSize |
1 |
字号宽/高倍率,范围 1~8 |
| lines |
feed |
3 |
走纸行数 |
| char |
printDivider |
- |
分隔线字符 |
| count |
printDivider |
按纸宽估算 |
分隔字符重复次数 |
| type |
printBarcode |
CODE128 |
CODE128 / CODE39 / EAN13 / EAN8 / UPC_A / UPC_E / ITF |
| height |
printBarcode |
60 |
条码高度(点) |
| width |
printBarcode |
2 |
条码模块宽度 2~6 |
| hri |
printBarcode |
below |
none / above / below / both |
| moduleSize |
printQrcode |
6 |
二维码模块大小 1~16 |
| errorLevel |
printQrcode |
M |
L / M / Q / H |
| base64 |
printImage |
空 |
推荐已光栅化 ESC 字节的 base64(可带 data: 前缀) |
| path |
printImage |
空 |
本地路径;建议业务侧读文件后改传 base64 或 printBytes |
| mode |
cutPaper |
partial |
partial 半切 / full 全切 |
| pin |
openCashBox |
0 |
钱箱针脚 0 或 1 |
| times |
beep |
1 |
蜂鸣次数 |
| duration |
beep |
3 |
蜂鸣时长档位 1~9 |
不传参即用默认值。
4.1 transport 与端能力
| transport |
Android |
iOS |
鸿蒙 |
| bluetooth |
经典 SPP |
BLE |
官方 SDK 蓝牙 |
| lan |
TCP |
TCP |
官方 SDK 网口 |
| usb |
USB Host |
不支持(9080009) |
官方 SDK USB |
5. 完整示例
import {
init,
connectLan,
setAlign,
printText,
printQrcode,
cutPaper,
destroy,
} from '@/uni_modules/breao-xprinter'
init({
transport: 'lan',
paperWidthMm: 80,
encoding: 'gbk',
success() {
connectLan({
host: '192.168.1.100',
port: 9100,
success() {
setAlign({ align: 'center' })
printText({ content: '芯烨小票' })
printQrcode({ content: 'https://example.com/order/1' })
cutPaper({
mode: 'partial',
success() {
destroy({})
},
})
},
fail(err) {
console.error(err.errCode, err.errMsg)
},
})
},
fail(err) {
console.error(err.errCode, err.errMsg)
},
})
6. 权限
请在应用 manifest / 隐私弹窗中按需声明,并说明用于连接芯烨打印机与发送打印数据。
| 平台 |
权限 |
说明 |
| Android |
android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN |
API≤30 经典蓝牙扫描与连接 |
| Android |
android.permission.BLUETOOTH_SCAN、android.permission.BLUETOOTH_CONNECT |
Android 12+ 蓝牙扫描与连接 |
| Android |
android.permission.ACCESS_FINE_LOCATION、android.permission.ACCESS_COARSE_LOCATION |
旧系统蓝牙发现 |
| Android |
android.permission.INTERNET、android.permission.ACCESS_NETWORK_STATE、android.permission.ACCESS_WIFI_STATE |
局域网打印 |
| Android |
系统 USB 权限弹窗 |
USB Host 打印(插件内请求) |
| iOS |
NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription |
蓝牙打印 |
| iOS |
NSLocalNetworkUsageDescription |
局域网打印 |
| 鸿蒙 |
ohos.permission.INTERNET |
局域网打印 |
| 鸿蒙 |
ohos.permission.ACCESS_BLUETOOTH、ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.MANAGE_BLUETOOTH |
蓝牙打印 |
7. 错误码(908)
| 码 |
含义 |
| 9080001 |
成功 |
| 9080002 |
失败(连接/打印/IO 等) |
| 9080003 |
未调用 init,或 SDK 未就绪 |
| 9080004 |
蓝牙未开启 |
| 9080005 |
未连接打印机 |
| 9080006 |
参数非法 |
| 9080007 |
当前运行平台不支持 |
| 9080008 |
驱动创建失败或不匹配 |
| 9080009 |
当前端不支持该 transport 或接口 |
| 9080010 |
能力未实现(如端侧扫描限制) |
8. 平台注意
- Android 蓝牙为经典 SPP;可用
nameHints 覆盖默认 XP- / XPrinter / 芯烨 等过滤
- iOS 蓝牙为 BLE:须先
startBluetoothScan,再用扫描结果中的 address 连接
- 局域网默认端口 9100;机型不同可用
connectLan.port 覆盖
- USB:Android 与鸿蒙支持;请先
init({ transport: 'usb' }) 再 connectUsb
- 鸿蒙蓝牙 address 为系统蓝牙设备 id;局域网
connectLan 会按 host,port 交给官方 SDK
printImage 推荐传入已光栅化的 ESC 字节 base64;仅传 path 时请先在业务侧读文件再 printBytes
getPrinterStatus 以连接态为主;部分机型无状态回读时 rawStatus 为 -1
- 切换 transport 或彻底释放资源时,请
destroy 后再重新 init