更新记录

1.1.8(2026-09-07)

  • 修复 Android:success/fail 回调 ClassCast(扁平 Option 不可强转为 BaseOption;入口去掉 coerce 重建)
  • .vue 直接传对象;.uvue 须 as XxxOption;须重打自定义基座并云端传统打包
  • 不传参行为与上一版兼容

1.1.7(2026-09-07)

  • 优化 uni-app x:入口将对象字面量归一化为 Option,业务页可直接传对象调用 API,无需再写 as XxxOption
  • 使用须制作自定义基座,并走云端传统打包(不支持离线打包、安心打包)
  • 不传参行为与上一版兼容

1.1.6(2026-09-06)

  • 修复协议二维码 storeLen 与 ArrayBuffer 转换:size Number.from
  • 修复协议 concat:ByteArray.size 先 Number.from 再拼接
  • 修复 App 端成功回调与驱动稳定性:去掉 undefined、可变属性强制解包改为局部拷贝;iOS BLE 状态/特性用 Number.from
  • 修复 Android 文本编码拷贝:ByteArray.size 先 Number.from 再循环与下标
  • 修复 Android 运行时 ClassCastException:成功回调结果改为 UTSJSONObject 别名,避免强转为独立 SuccessResult 类型
  • 修复 Android USB bulkTransfer:长度用 Int,返回值 Number.from 后再比较
  • 修复 invoke 回调判空调用;可选 number 去掉 undefined 联合;部分 Android 原生返回值改 Number.from、可变属性局部拷贝
  • 使用须制作自定义基座,并走云端传统打包(不支持离线打包、安心打包)
  • 【务必使用此版本及以上版本打包使用,低版本存在缺陷】
查看更多

平台兼容性

uni-app(4.11)

Vue2 Vue3 Vue3插件版本 Chrome Safari app-vue app-vue插件版本 app-nvue app-nvue插件版本 Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
× 1.1.6 × × 1.1.6 1.1.6 5.0 1.1.6 12 1.1.6 12 1.1.6
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × × ×

uni-app x(4.11)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
× × 5.0 1.1.6 12 1.1.6 12 1.1.6 ×

breao-xprinter 使用说明

芯烨 XPrinter 票据打印插件,适用于收银、餐饮小票等芯烨热敏机场景。

当前版本:1.1.8

  • Android:蓝牙经典 SPP + 局域网 TCP + USB Host
  • iOS:BLE/BT + 局域网 TCP
  • 鸿蒙:官方 SDK(蓝牙 / 局域网 / USB,har 已内置;uni-app 与 uni-app x)
  • 能力:文本/多列、对齐加粗字号、条码/二维码/位图、切纸/钱箱/蜂鸣、状态查询、纸宽 58/72/80、原始字节透传、短打印队列
  • 不做微信小程序端(请改用 breao-escposprint)、芯烨云开放 API、全量 TSPL 标签排版引擎

建议调用顺序:initconnectBluetooth / connectLan / connectUsb → 打印指令 → disconnect / destroy。各异步方法均支持 success / fail / completefailerrCode / errMsg。插件为单例连接语义:再次 init 会销毁上一实例。连续 print* 会进入短队列串行发送;队列执行中 getConnectionState 可能返回 busy


1. 环境要求

  • HBuilderX 4.11 及以上
  • uni-app Vue3(App-vue / App-nvue)或 uni-app x(App-Android / App-iOS / App-鸿蒙)
  • 支持:App-Android、App-iOS、App-鸿蒙(uni-app 与 uni-app x)
  • 不支持:H5、微信及其它小程序
  • 微信小程序请使用 breao-escposprint(轻量 ESC 透传);本插件依赖芯烨官方 SDK(jar / xcframework / 鸿蒙 har),官方包不覆盖微信端,故微信标为不支持
  • 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,
  // 协议辅助(可选)
  buildEscInit,
  buildEscAlign,
  buildEscBold,
  buildEscFontSize,
  buildEscFeed,
  buildEscDivider,
  buildEscCut,
  buildEscTextAscii,
  buildEscColumnsAscii,
  buildEscBarcode,
  buildEscQrcode,
  buildEscOpenCashBox,
  buildEscBeep,
  buildEscStatusQuery,
  concatEscBytes,
  DEFAULT_LAN_PORT,
  DEFAULT_PAPER_WIDTH_MM,
} 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() {} })
feed({ lines: 3, success() {}, fail() {} })
printDivider({ char: '-', success() {}, fail() {} })
printBytes({ data: arrayBuffer, success() {}, fail() {} })
sendRaw({ data: arrayBuffer, success() {}, fail() {} }) // 不经队列直接发送原始字节

3.4 状态查询

getConnectionState({
  success(res) {
    // res.state: disconnected | connecting | connected | busy
    // res.address / res.transport / res.paperWidthMm / res.busy
  },
  fail(err) {},
})

getPrinterStatus({
  success(res) {
    // res.online / paperWidthMm / transport / rawStatus(无回读时为 -1)
  },
  fail(err) {},
})
字段 说明
state 连接状态;打印队列执行中可为 busy
busy 短队列执行中为 true
online 是否已连接(getPrinterStatus)
paperWidthMm 当前纸宽配置
transport 当前传输方式
rawStatus 机型回读状态字节;不可读时为 -1

3.6 协议辅助(同步)

可在业务侧自组 ESC 报文后 printBytes / sendRaw

函数 说明
buildEscInit ESC @ 初始化
buildEscAlign 对齐 left / center / right
buildEscBold 加粗开关
buildEscFontSize 字号宽高倍率
buildEscFeed 走纸行数
buildEscDivider 分隔线(字符码 + 重复次数)
buildEscCut 切纸 full / partial
buildEscTextAscii ASCII 文本(中文请自编码)
buildEscColumnsAscii 多列 ASCII
buildEscBarcode 条码 GS k
buildEscQrcode 二维码 GS ( k
buildEscOpenCashBox 开钱箱
buildEscBeep 蜂鸣
buildEscStatusQuery DLE EOT 状态请求
concatEscBytes 拼接多段 ByteArray
DEFAULT_LAN_PORT 常量 9100
DEFAULT_PAPER_WIDTH_MM 常量 80

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

鸿蒙不支持 getBondedDevices(返回 9080010);请使用系统已配对蓝牙设备的 deviceId 作为 connectBluetooth.address,或通过 startBluetoothScan 获取设备 id。


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. 平台注意

  • uni-app x(.uvue):须对入参使用 as XxxOption(见官方 error17);.vue 可直接传对象。须使用 1.1.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
  • 微信小程序:官方 SDK 无微信包,本插件不提供微信 BLE;若仅需 ESC 字节透传打印,请使用 breao-escposprint
  • 连续打印走短队列(上限 32);队列满返回 9080002;disconnect / destroy / 再次 init 会清空队列
  • 协议辅助函数见 §3.6;拼装 ESC 字节后可用 printBytes / sendRaw
  • printImage 推荐传入已光栅化的 ESC 字节 base64;仅传 path 时请先在业务侧读文件再 printBytes
  • getPrinterStatus 以连接态为主;部分机型无状态回读时 rawStatus 为 -1
  • 鸿蒙 getBondedDevices 不可用(9080010);蓝牙连接请传系统 deviceId,勿依赖已配对列表接口
  • 切换 transport 或彻底释放资源时,请 destroy 后再重新 init

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android: android.permission.BLUETOOTH、android.permission.BLUETOOTH_ADMIN(API≤30); android.permission.BLUETOOTH_SCAN、android.permission.BLUETOOTH_CONNECT(Android 12+); android.permission.ACCESS_FINE_LOCATION、android.permission.ACCESS_COARSE_LOCATION; android.permission.INTERNET、android.permission.ACCESS_NETWORK_STATE、android.permission.ACCESS_WIFI_STATE。 USB Host 打印需系统 USB 权限授权。 iOS: NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription、NSLocalNetworkUsageDescription。 鸿蒙: ohos.permission.INTERNET、ohos.permission.ACCESS_BLUETOOTH、ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.MANAGE_BLUETOOTH。 用途:芯烨打印机扫描、连接与打印。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

不采集、不上传任何数据;打印内容仅经本机蓝牙、USB 或局域网发至已连接的芯烨打印机。可选集成芯烨官方 SDK 仅用于本地设备通信

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

暂无用户评论。