更新记录

1.0.0(2026-10-29)

见下方「更新记录」


平台兼容性

uni-app(5.0)

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

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
√ √ √ ×

精臣Niimbot蓝牙标签打印机UTS插件(jc-niimbot-printer)使用说明

基于精臣官方 JCPrintApi Android SDK(V4.1.1) 封装的 UTS 原生插件,支持精臣 K3 / K3W 等蓝牙标签打印机。封装了蓝牙扫描、连接、标签绘制(文本 / 一维条码 / 二维码 / 线条)、打印与免连接预览全流程,Promise 风格 API 开箱即用。

一、功能特性

  • 官方 SDK 驱动:走精臣私有协议(JCPrintApi V4.1.1),协议兼容性与出纸稳定性有保障
  • 蓝牙全流程:扫描(约 12 秒自动停止,已配对设备优先返回)→ 连接 → 打印 → 断开
  • 标签绘制:文本(字号/对齐/行模式/加粗)、一维条码(CODE128 等)、二维码、线条,坐标与字号统一 mm 制
  • 免连接预览:无需连接打印机即可生成 base64 PNG 预览图
  • 多纸型支持:间隙纸 / 黑标纸 / 连续纸 / 透明纸 / 标牌贴;旋转 0/90/180/270;浓度 1-5;份数可设
  • 权限一键申请:内置 requestBluetoothPermission,兼容 Android 12+ 与 Android 11 及以下
  • Promise API:所有异步方法返回 Promise,TypeScript 类型定义完整

二、平台兼容性

端 兼容性
uni-app(Vue3) 支持(app-vue、app-nvue)
uni-app(Vue2) 不支持
Android 支持(minSdk 21,Android 5.0+)
iOS 不支持(精臣官方仅提供 Android SDK)
鸿蒙 / 小程序 / uni-app x 不支持

开发环境要求:

  • HBuilderX:^4.25
  • uni-app:^3.8.3

三、安装与权限

  1. 将插件目录放入项目的 uni_modules 目录下(或通过插件市场导入)。
  2. 使用前调用 requestBluetoothPermission() 申请蓝牙权限(Android 12+ 为 BLUETOOTH_SCAN / BLUETOOTH_CONNECT,Android 11 及以下为定位权限)。
  3. 插件已在 AndroidManifest.xml 声明所需权限,正式打包自动合并。

提示:真机调试建议制作自定义调试基座(标准基座不包含自定义 UTS 插件),正式打包(云打包 / 本地打包)自动集成。

四、快速开始

import {
  requestBluetoothPermission, startBluetoothScan, getDiscoveredDevices,
  connect, isConnected, getConnectedInfo, printLabel, previewLabel, disconnect
} from '@/uni_modules/jc-niimbot-printer';

async function printDemo() {
  // 1. 申请蓝牙权限
  const granted = await requestBluetoothPermission();
  if (!granted) { console.log('权限被拒绝'); return; }

  // 2. 开始扫描(约 12 秒系统自动停止;可轮询 getDiscoveredDevices 取结果)
  await startBluetoothScan();
  await new Promise(r => setTimeout(r, 3000));
  const devices = JSON.parse(await getDiscoveredDevices());
  // devices: [{ name, address, bonded }]
  const target = devices.find(d => d.name.toUpperCase().startsWith('K3')) || devices[0];
  if (!target) { console.log('未找到打印机'); return; }

  // 3. 连接打印机
  await connect({ address: target.address });
  console.log('已连接:', isConnected(), getConnectedInfo());

  // 4. 打印一张 50×30mm 标签:文本 + 条码 + 二维码 + 分隔线
  await printLabel({
    width: 50, height: 30,
    labelType: 1,               // 1间隙纸 2黑标纸 3连续纸 4透明纸 5标牌贴
    density: 3,                 // 打印浓度 1-5
    copies: 1,
    printMultiple: "8.0",       // K3 为 200dpi → 8.0;300dpi 用 11.81
    items: [
      { type: 'text', x: 2, y: 2, width: 30, height: 8, value: '取餐号 A001', fontSize: 7, bold: true, textAlignHorizontal: 1, lineMode: 6 },
      { type: 'barcode', x: 2, y: 12, width: 30, height: 10, value: '1234567890', codeType: 20 },
      { type: 'qrcode', x: 36, y: 12, width: 12, height: 12, value: 'https://example.com/order/123' },
      { type: 'line', x: 2, y: 26, width: 46, height: 0.5 }
    ]
  });

  // 5.(可选)免连接预览:返回 data:image/png;base64,...
  // const preview = await previewLabel({ width: 50, height: 30, items: [...] });

  // 6. 打印完成断开
  // await disconnect();
}

五、API 接口文档

5.1 基础与连接

方法 返回 说明
init() Promise\<void> 初始化精臣 SDK(连接/打印时会自动初始化,一般无需手动调用)
requestBluetoothPermission() Promise\<boolean> 申请蓝牙相关权限(Android 12+:BLUETOOTH_SCAN/CONNECT;Android 11 及以下:定位权限)
isBluetoothEnabled() boolean 蓝牙是否已开启
startBluetoothScan() Promise\<void> 开始扫描蓝牙设备(约 12 秒自动停止;已配对设备优先返回)
stopBluetoothScan() Promise\<void> 停止扫描
getDiscoveredDevices() Promise\<string> 扫描到的设备 JSON 字符串:[{name, address, bonded}]
connect({ address }) Promise\<void> 按蓝牙 MAC 地址连接精臣打印机
disconnect() Promise\<void> 断开连接(释放 SDK 连接资源)
isConnected() boolean 当前是否已连接
getConnectedInfo() string 连接信息 JSON:{connected, type, address}

5.2 标签打印

方法 返回 说明
printLabel(options) Promise\<void> 标签打印(需已连接打印机;内部完成 绘制→生成数据→提交→打印 全流程)
previewLabel(options) Promise\<string> 免连接标签预览,返回 data:image/png;base64,...

printLabel / previewLabel 的 options 参数:

字段 默认 说明
width / height 50 / 30 画布尺寸(mm)
rotate 0 画布旋转:0 / 90 / 180 / 270
density 3 打印浓度 1-5(K3 默认 3)
labelType 1 1 间隙纸 / 2 黑标纸 / 3 连续纸 / 4 透明纸 / 5 标牌贴
mode 1 1 热敏 / 2 热转印
copies 1 打印份数
printMultiple "8.0" 200dpi=8.0;300dpi=11.81(K3 为 200dpi)
items [] 标签元素数组

items 元素(坐标/尺寸单位均为 mm):

type 可用参数 说明
text value、x、y、width、height、fontFamily?、fontSize(默认 3.0mm)、rotate、textAlignHorizontal(0左/1中/2右)、textAlignVertical(0上/1中/2下)、lineMode(默认 6)、letterSpacing(默认 0)、lineSpacing(默认 1)、bold(默认 false) 文本
barcode codeType(默认 20)、value、x、y、width、height、fontSize(默认 2.0)、rotate、textHeight(默认 3.0)、textPosition(默认 0) 一维条码
qrcode value、x、y、width、height、rotate 二维码
line x、y、width、height、rotate、lineType(默认 0) 线条

条码 codeType 枚举(参照精臣官方 SDK):20 CODE128 / 21 UPC-A / 22 UPC-E / 23 EAN8 / 24 EAN13 / 25 CODE93 / 26 CODE39 / 27 CODEBAR / 28 ITF25。

打印错误码:1 盒盖打开 / 2 缺纸 / 3 电量不足 / 4 电池异常 / 5 手动停止(按键) / 6 数据错误 / 7 温度过高 / 8 出纸异常 / 9 正在打印 / 10 没有检测到打印头 / 11 环境温度过低 / 12 打印头未锁紧。

六、注意事项

  • 精臣 K3 为 SPP 蓝牙打印机,连接使用蓝牙 MAC 地址;部分 Android 版本蓝牙扫描需要定位权限(插件已内置申请)
  • 连接/打印为耗时操作,插件已在子线程执行并回调回主线程,Promise 安全
  • 中文打印无需额外配置字体(SDK 内置字体)
  • 需要打印多页数据时,请多次调用 printLabel 并串联 await(每次调用即完成一个完整打印任务)
  • 仅支持 Android;Vue3 项目使用(Vue2、iOS、鸿蒙、小程序、uni-app x 不支持)

七、隐私与权限声明

  1. 申请的权限:蓝牙(BLUETOOTH/BLUETOOTH_ADMIN,Android 11 及以下;BLUETOOTH_SCAN/BLUETOOTH_CONNECT,Android 12 及以上)、定位(ACCESS_FINE_LOCATION,Android 11 及以下蓝牙扫描必需)、网络(INTERNET/ACCESS_NETWORK_STATE/ACCESS_WIFI_STATE)。
  2. 数据采集:插件不采集任何数据,蓝牙扫描、连接与打印均在本机完成,数据不上传任何服务器。
  3. 广告:无。

八、更新记录

1.0.0(2026-10-29)

  • 首次发布:基于精臣官方 JCPrintApi Android SDK(V4.1.1)封装
  • 支持蓝牙扫描、连接/断开、文本/一维条码/二维码/线条标签绘制、标签打印与免连接预览
  • Promise 风格 API + TypeScript 类型定义
  • 内置蓝牙权限申请,兼容 Android 12+ 与 Android 11 及以下

隐私、权限声明

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

xml <!-- 蓝牙:Android 11 及以下 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- 蓝牙:Android 12 及以上 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- Android 11 及以下蓝牙扫描需要定位权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 网络状态 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

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

插件不采集任何数据,所有蓝牙扫描、连接与打印操作均在本机完成,数据不上传任何服务器。

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

无。

暂无用户评论。