更新记录

1.0.1(2026-03-20) 下载此版本

更新部分机型无法连接的问题。

1.0.0(2026-03-19) 下载此版本

  • 初始版本发布
  • 支持 TSC ML 全系列标签打印机 USB 连接
  • TSPL 指令构建器(链式 API)
  • 快捷打印方法:二维码标签、文本标签、条码标签
  • 支持自定义 TSPL 指令
  • 完整的 TypeScript 类型声明
  • 事件系统:connected / disconnected / error
  • 自动设备发现和权限管理
  • Android 12+ PendingIntent 兼容

平台兼容性

uni-app(4.87)

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

tsc-ml-printer

TSC ML 系列标签打印机 UniApp SDK,通过 USB 连接 Android 设备,支持 TSPL 指令集。

支持型号

TSC ML 全系列(ML240P、ML340P、ML240、ML340 等),以及所有使用 TSPL 指令集的 TSC 打印机。

平台兼容

App-Vue App-NVue H5 小程序
× ×

仅支持 Android 平台,需要设备支持 USB Host 功能。

安装

tsc-ml-printer 文件夹复制到项目的 uni_modules 目录下即可。

快速开始

import TscPrinter from '@/uni_modules/tsc-ml-printer/js_sdk'

const printer = new TscPrinter()

// 监听事件
printer.on('connected', (info) => {
  console.log('打印机已连接:', info.deviceName)
})
printer.on('error', (err) => {
  console.error('打印机错误:', err.message)
})

// 连接打印机(自动发现第一台 TSC 设备)
await printer.connect()

// 打印二维码标签
await printer.printQRLabel({
  width: 40,
  height: 30,
  qrContent: 'https://example.com',
  qrX: 50,
  qrY: 20,
  qrSize: 6,
  text: '商品名称',
  textX: 180,
  textY: 50
})

// 断开连接
printer.disconnect()

API 参考

创建实例

const printer = new TscPrinter()

连接管理

getDevices()Promise<DeviceInfo[]>

扫描所有已连接的 TSC USB 打印机。

const devices = await printer.getDevices()
console.log(devices)
// [{ deviceName: '/dev/bus/usb/001/002', vendorId: 4611, productId: 256, ... }]

connect(deviceOrIndex?)Promise<DeviceInfo>

连接打印机。不传参则自动连接第一台设备。

// 自动连接
await printer.connect()

// 按索引连接
await printer.connect(0)

// 指定设备连接
const devices = await printer.getDevices()
await printer.connect(devices[1])

disconnect()

断开连接。

isConnected()boolean

查询是否已连接。

快捷打印

printQRLabel(options)Promise<number>

快捷打印二维码标签。

参数 类型 默认值 说明
qrContent string - 二维码内容(必填)
width number 40 标签宽度 mm
height number 30 标签高度 mm
gap number 3 间隙 mm
qrX number 50 二维码 X 坐标 dots
qrY number 30 二维码 Y 坐标 dots
qrSize number 6 单元大小 1-10
text string - 附加文字
textX number 50 文字 X 坐标
textY number 200 文字 Y 坐标
copies number 1 打印份数

printTextLabel(options)Promise<number>

快捷打印多行文本标签。

await printer.printTextLabel({
  width: 40, height: 30,
  lines: [
    { x: 20, y: 20, content: '第一行文字' },
    { x: 20, y: 60, content: '第二行文字' },
    { x: 20, y: 100, content: '¥19.90', xMul: 2, yMul: 2 }
  ]
})

printBarcodeLabel(options)Promise<number>

快捷打印条码标签。

await printer.printBarcodeLabel({
  width: 60, height: 40,
  barcodeContent: '6901234567890',
  barcodeType: TscPrinter.BarcodeType.EAN13,
  text: '商品名称'
})

自定义打印(TSPLBuilder)

使用链式 API 自由组合打印内容:

const builder = printer.createLabel(60, 40, 3)
  .speed(4)
  .density(8)
  .box(10, 10, 460, 300, 2)
  .text(20, 20, '商品名称', { xMul: 2, yMul: 2 })
  .qrcode(20, 80, 'https://example.com', { cellWidth: 5 })
  .barcode(200, 80, '128', 'ABC123456', { height: 80 })
  .text(200, 200, '¥29.90', { font: 'TSS24.BF2', xMul: 2, yMul: 2 })
  .hline(10, 270, 440)
  .text(20, 280, '2025-01-01  规格: 500g')
  .print(1, 1)

await printer.printLabel(builder)

低级接口

// 直接发送 TSPL 命令字符串
await printer.sendRaw('SIZE 40 mm, 30 mm\r\nGAP 3 mm, 0 mm\r\nCLS\r\nTEXT 20,20,"TSS24.BF2",0,1,1,"测试"\r\nPRINT 1,1\r\n')

// 直接发送字节数组
await printer.sendBytes([0x1B, 0x40, ...])

设备控制

await printer.selfTest()    // 打印自检页
await printer.feedToHome()  // 走纸到起始位置
await printer.feed(100)     // 走纸 100 dots
await printer.beep()        // 蜂鸣器响

事件

printer.on('connected', (deviceInfo) => { })
printer.on('disconnected', () => { })
printer.on('error', (err) => { })

静态属性

TscPrinter.TSPLBuilder     // 构建器类
TscPrinter.ErrorCode       // 错误码枚举
TscPrinter.BarcodeType     // 条码类型枚举
TscPrinter.ConnectionState // 连接状态枚举
TscPrinter.DEFAULTS        // 默认参数

错误处理

所有异步方法在失败时抛出 TscPrinterError

import { TscPrinterError } from '@/uni_modules/tsc-ml-printer/js_sdk'

try {
  await printer.connect()
} catch (e) {
  if (e.code === 'DEVICE_NOT_FOUND') {
    uni.showToast({ title: '请连接USB打印机', icon: 'none' })
  } else if (e.code === 'PERMISSION_DENIED') {
    uni.showToast({ title: '请授予USB权限', icon: 'none' })
  }
}
错误码 说明
USB_NOT_SUPPORTED 设备不支持 USB Host
DEVICE_NOT_FOUND 未找到 TSC 打印机
PERMISSION_DENIED USB 权限被拒绝
CONNECTION_FAILED 连接失败
ENDPOINT_NOT_FOUND 未找到传输端点
TRANSFER_FAILED 数据传输失败
NOT_CONNECTED 未连接

注意事项

  1. 需要 Android 设备支持 USB Host(OTG)功能
  2. 首次连接打印机时系统会弹出 USB 权限授权对话框
  3. TSPL 中文打印使用 GBK 编码,内置字体为 TSS24.BF2
  4. 坐标单位为 dots(200DPI 下 1mm ≈ 8dots,300DPI 下 1mm ≈ 12dots)
  5. 建议在 manifest.json 的 Android 权限中确认包含 USB 相关权限

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议

暂无用户评论。