更新记录

1.3.8(2026-09-07)

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

1.3.7(2026-09-07)

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

1.3.6(2026-09-06)

  • 修复协议二维码 storeLen 与 ArrayBuffer 转换:size Number.from
  • 修复协议 concat:ByteArray.size 先 Number.from 再拼接
  • 修复 App 端成功回调与驱动稳定性:去掉 undefined、可变属性强制解包改为局部拷贝;iOS BLE 状态/特性用 Number.from
  • 修复 Android BLE 分片与文本编码:ByteArray.size 先 Number.from 再比较/拷贝
  • 修复 Android 运行时 ClassCastException:成功回调结果改为 UTSJSONObject 别名,避免强转为独立 SuccessResult 类型
  • 修复 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.3.6 × × 1.3.6 1.3.6 5.0 1.3.6 12 1.3.6 12 1.3.6
微信小程序 微信小程序插件版本 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
2.22.0 1.3.6 × × × × × × × × - × ×

uni-app x(4.11)

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

breao-escposprint 使用说明

轻量 ESC/POS 热敏打印插件,适用于收银、餐饮小票等通用热敏机场景。

当前版本:1.3.8

  • Android:默认经典蓝牙 SPP;init 填写 BLE UUID 时走 GATT BLE;局域网 TCP
  • iOS:BLE + 局域网
  • 鸿蒙:BLE + 局域网(uni-app / uni-app x)
  • 微信小程序:仅 BLE
  • 能力:文本/多列、对齐加粗字号、分隔线、条码/二维码/位图、切纸/钱箱/蜂鸣、短打印队列、状态查询、纸宽 58/72/80、原始字节透传
  • 不做 H5、USB、品牌官方 SDK 合集、PNG 自动光栅

建议调用顺序:init → 扫描/连接 → 打印指令 → 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;微信能力与 uni-app 一致)
  • 支持:App-Android、App-iOS、App-鸿蒙、微信小程序
  • 不支持:H5 及其它小程序
  • Android 最低 API:21;iOS 最低 12;鸿蒙最低 API:12;微信小程序基础库建议 2.22.0 及以上
  • App 真机调试须制作自定义基座;正式发版须购买授权后走云端传统打包
  • 授权绑定唯一 appid + 包名

2. 安装与引入

将插件目录放入工程的 uni_modules/breao-escposprint,或从插件市场导入后同步。

import {
  init,
  destroy,
  startBluetoothScan,
  stopBluetoothScan,
  getBondedDevices,
  connectBluetooth,
  connectLan,
  disconnect,
  printText,
  printColumns,
  printBytes,
  sendRaw,
  printBarcode,
  printQrcode,
  printImage,
  setAlign,
  setBold,
  setFontSize,
  feed,
  printDivider,
  cut,
  cutPaper,
  openCashBox,
  beep,
  getPrinterStatus,
  getConnectionState,
  buildEscInit,
  buildEscAlign,
  buildEscCut,
  buildEscFontSize,
  buildEscDivider,
  buildEscOpenCashBox,
  buildEscBeep,
  buildEscColumnsAscii,
  buildEscBarcode,
  buildEscQrcode,
} from '@/uni_modules/breao-escposprint'

3. API

3.1 init / destroy

init({
  transport: 'lan', // 或 bluetooth;详见 §4
  paperWidthMm: 80,
  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) {},
})

stopBluetoothScan({ success() {}, fail() {} })

getBondedDevices({ success(res) {}, fail(err) {} }) // Android / 鸿蒙已配对;其它端返回不支持

connectBluetooth({
  address: 'XX:XX:XX:XX:XX:XX',
  success() {},
  fail(err) {},
})

说明:请先扫描再连接(未扫描直接 connect 会返回中文错误);参数默认值见 §4。

3.3 局域网连接

connectLan({
  host: '192.168.1.100',
  success() {},
  fail(err) {},
})

3.4 打印与便捷指令

printText({ content: 'Hello ESC/POS', success() {}, fail() {} })
printColumns({ columns: ['品名', '数量', '金额'], widths: [2, 1, 1], success() {}, fail() {} })
printBytes({ data: arrayBuffer, success() {}, fail() {} })
sendRaw({ data: arrayBuffer, success() {}, fail() {} }) // 等同 printBytes
printBarcode({
  content: '123456789012',
  type: 'CODE128',
  height: 60,
  width: 2,
  hri: 'below',
  success() {},
  fail() {},
})
printQrcode({
  content: 'https://example.com',
  moduleSize: 6,
  errorLevel: 'M',
  success() {},
  fail() {},
})
// base64 / path 均须已是 ESC 光栅或原始打印字节;不做 PNG→光栅
printImage({ base64: escRasterBase64, align: 'center', success() {}, fail() {} })
printImage({ path: '/path/to/esc.bin', success() {}, fail() {} }) // 微信请改传 base64
setAlign({ align: 'center', success() {}, fail() {} })
setBold({ bold: true, success() {}, fail() {} })
setFontSize({ width: 2, height: 2, success() {}, fail() {} })
printDivider({ char: '-', success() {}, fail() {} })
feed({ lines: 3, success() {}, fail() {} })
cut({ mode: 'partial', success() {}, fail() {} })
cutPaper({ mode: 'partial', success() {}, fail() {} }) // 等同 cut
openCashBox({ pin: 0, success() {}, fail() {} })
beep({ times: 1, duration: 3, success() {}, fail() {} })

3.5 状态与断开

getPrinterStatus({
  success(res) {
    // res.online;res.rawStatus 多数机型为 -1(无可靠 DLE EOT 回读)
  },
  fail(err) {},
})

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

disconnect({ success() {}, fail() {} })
字段 说明
state 连接状态;打印队列执行中可为 busy
online 是否已连接(getPrinterStatus)
rawStatus 原始状态字节;多数机型固定 -1
paperWidthMm 当前纸宽配置
address 已连接设备地址或 IP(可能返回)
transport bluetooth 或 lan(可能返回)

3.6 协议辅助(同步)

可在业务侧自组报文后 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
paperWidthDots 纸宽毫米转点数
DEFAULT_LAN_PORT 常量 9100
DEFAULT_PAPER_WIDTH_MM 常量 80

4. 可配置项

字段 位置 默认 说明
transport init bluetooth bluetooth 或 lan;微信仅 bluetooth
paperWidthMm init 80 纸宽毫米:58 / 72 / 80
debug init false 调试日志
bleChunkSize init 端默认 BLE 分片字节数;经典蓝牙 SPP 忽略
bleWriteInterval init 端默认 BLE 写间隔毫秒;经典蓝牙 SPP 忽略
bleServiceUuid init BLE Service UUID;Android 传入任一 BLE UUID 时走 GATT,否则默认 SPP
bleCharacteristicUuid init BLE Characteristic UUID;空则宽松匹配
lanPort init 9100 局域网默认端口;可被 connectLan.port 覆盖
encoding init / printText gbk 文本编码提示;端不支持时请用 printBytes
onDisconnected init 被动断开回调
timeout startBluetoothScan 10000 扫描超时毫秒
includeBonded startBluetoothScan true 是否合并系统已配对设备
nameHints startBluetoothScan 内置关键字 名称过滤;默认含 POS、Printer、TP、BT 等
address connectBluetooth 必填 设备 MAC 或 BLE deviceId
timeout connectBluetooth 15000 连接超时毫秒
host connectLan 必填 打印机 IP
port connectLan init.lanPort 或 9100 TCP 端口
timeout connectLan 10000 连接超时毫秒
content printText 必填 打印文本
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
path printImage 本地文件按原始字节读取(须已是 ESC 数据);微信请改传 base64
mode cut / 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 UUID 走 GATT BLE BLE BLE
lan 支持 支持 支持 不支持(9060007)

5. 完整示例

5.1 局域网

import {
  init,
  connectLan,
  printText,
  setFontSize,
  printDivider,
  openCashBox,
  cutPaper,
  disconnect,
  destroy,
} from '@/uni_modules/breao-escposprint'

init({
  transport: 'lan',
  paperWidthMm: 80,
  success() {
    connectLan({
      host: '192.168.1.100',
      success() {
        setFontSize({
          width: 2,
          height: 2,
          success() {
            printText({
              content: 'Store Receipt',
              success() {
                printDivider({
                  success() {
                    openCashBox({
                      success() {
                        cutPaper({
                          mode: 'partial',
                          success() {
                            disconnect({ success() { destroy({}) } })
                          },
                        })
                      },
                    })
                  },
                })
              },
            })
          },
        })
      },
      fail(err) {
        console.error(err.errCode, err.errMsg)
      },
    })
  },
})

5.2 蓝牙

import { init, startBluetoothScan, connectBluetooth, printColumns, destroy } from '@/uni_modules/breao-escposprint'

init({
  transport: 'bluetooth',
  success() {
    startBluetoothScan({
      success(res) {
        const dev = res.devices && res.devices[0]
        if (!dev) return
        connectBluetooth({
          address: dev.address,
          success() {
            printColumns({ columns: ['品名', '数量', '金额'], widths: [2, 1, 1] })
          },
        })
      },
    })
  },
})

6. 权限

请在应用 manifest / 隐私弹窗中按需声明,并说明用于连接 ESC/POS 热敏打印机与发送打印数据。插件会申请相关权限,业务仍须引导用户开启蓝牙/网络。

平台 权限 说明
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 局域网 TCP 打印
iOS NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription 蓝牙打印
iOS NSLocalNetworkUsageDescription 局域网打印机发现与连接
鸿蒙 ohos.permission.INTERNET 局域网 TCP 打印
鸿蒙 ohos.permission.ACCESS_BLUETOOTH、ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.MANAGE_BLUETOOTH 蓝牙扫描与连接
微信 openBluetoothAdapter、startBluetoothDevicesDiscovery、createBLEConnection、getBLEDeviceServices、getBLEDeviceCharacteristics、writeBLECharacteristicValue BLE 扫描、连接与写入;需用户授权蓝牙

7. 错误码(906)

含义
9060001 成功
9060002 失败(忙碌、连接失败、打印失败等)
9060003 未 init 或配置缺失
9060004 蓝牙未开启或不可用
9060005 未连接打印机
9060006 参数非法
9060007 当前平台不支持
9060008 驱动创建失败或不匹配
9060009 当前端不支持该 transport / 能力
9060010 能力尚未实现

8. 平台注意

  • uni-app x(.uvue):须对入参使用 as XxxOption(见官方 error17);.vue 可直接传对象。须使用 1.3.8+ 并重打自定义基座
  • 局域网热敏多数默认端口 9100;若厂商不同请改 lanPort / connectLan.port
  • 中文小票常见 GBK;若端侧编码不可用,请业务侧转 GBK 后 printBytes
  • 连接后不会自动发送 ESC @;需要时可 printBytes(buildEscInit())
  • 请先 startBluetoothScanconnectBluetooth;未扫描直接连接会返回稳定中文错误
  • Android 默认经典 SPP;BLE 打印机请在 init 填写 bleServiceUuid / bleCharacteristicUuid
  • Android 12+ 蓝牙扫描通常需要定位权限;请在运行时申请并引导用户开启蓝牙
  • BLE UUID 留空时(iOS / 鸿蒙 / 微信 / Android BLE 模式)自动匹配可写特征;特殊机型请填写厂商 UUID
  • printImage.path 按原始字节读取,须已是 ESC 光栅数据;不做 PNG 自动光栅;微信请业务侧读文件后传 base64
  • 切换 transport 或彻底释放资源时,请 destroy 后再重新 init
  • 短打印队列深度为 32printText / printBytes / printBarcodeprint* 串行入队
  • 队列已满时 fail 返回 9060002errMsg 为「打印队列已满,请稍后重试」
  • init(含再次 init)、disconnectdestroy 会清空尚未执行的队列任务

隐私、权限声明

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(局域网 TCP 打印)。 iOS: NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription、NSLocalNetworkUsageDescription。 鸿蒙: ohos.permission.INTERNET、ohos.permission.ACCESS_BLUETOOTH、ohos.permission.DISCOVER_BLUETOOTH、ohos.permission.MANAGE_BLUETOOTH。 微信小程序: 蓝牙能力(openBluetoothAdapter、startBluetoothDevicesDiscovery、createBLEConnection、getBLEDeviceServices、getBLEDeviceCharacteristics、writeBLECharacteristicValue;需用户授权蓝牙)。 用途:ESC/POS 热敏打印机扫描、连接与打印数据传输。

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

不采集、不上传任何数据;打印内容仅经本机蓝牙或局域网发至已连接的 ESC/POS 打印机。协议实现仅用于本地设备通信

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

暂无用户评论。