更新记录

1.0.1(2024-12-20) 下载此版本

支持字体大小、加粗、换行、下划线、2列3列、对齐方式、空格、分割线、带文字分割线等常规打印功能实现 支持小程序端使用 支持商米内置设备调用


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 4.0 app-vue app-nvue
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
× × × × × × × × ×

概述

商米内置打印机,无需原生SDK支持,直接用uniapp蓝牙调用打印,适用于所有内置打印机的商米设备

功能说明

  1. 商米打印服务介绍 商米打印服务是系统预置的功能,用于管理商米打印机设置和外接打印机的添加。开发者通过连接内置打印机进行打印业务,包括58和80mm两种打印规格的热敏打印。 商米官网打印服务介绍

  2. 注意事项

    务必打开设备蓝牙开关,再导入示例程序运行

    无需APP原生任何SDK导入,只要设备支持蓝牙低功耗协议即可,

    尽量使用 HBuilderX 4.0+ 以上版本

    打印结束后也及时关闭打印服务

  3. 商米内置蓝牙打印机原理

    在蓝牙设备列表中可以看到1个已经配对,且永远存在的蓝牙设备“InnerPrinter”,这是由操作系统虚拟出来的打印机设备,实际并不存在。虚拟蓝牙支持Sunmi《esc/pos》指令。

    大致实现过程如下:

    1). uni.createBLEConnection与该蓝牙设备建立连接。

    2). 将指令和文本内容拼接转码为Bytes。

    3). 发送给InnerPrinter。

    4). 底层打印服务驱动打印设备完成打印。

完整代码示例

<template>
    <view style="padding: 10px;">
          <button @click="innerPrinter('1')" style="margin-top: 10px;">打印[堂食-结账单]</button>
          <button @click="innerPrinter('2')" style="margin-top: 10px;">打印[堂食-点菜单]</button>
          <button @click="innerPrinter('3')" style="margin-top: 10px;">打印[零点-结账单]</button>
          <button @click="innerPrinter('4')" style="margin-top: 10px;">打印[外卖订单]</button>
          <button @click="innerPrinter('5')" style="margin-top: 10px;">打印[排号小票]</button>
          <button @click="innerPrinter('6')" style="margin-top: 10px;">打印[堂食-预结单]</button>
          <button @click="closePrint()" style="margin-top: 10px;">关闭蓝牙打印</button>
    </view>
</template>

<script>
    import { bluetoothMixin } from '@/uni_modules/sunmi-blueprint/js_sdk/bluetoothMixin'
    import printerUtil from '@/uni_modules/sunmi-blueprint/js_sdk/printerutil.js'
    import jsonData1 from './jsonData1.json';
    import jsonData2 from './jsonData2.json';
    import jsonData3 from './jsonData3.json';
    import jsonData6 from './jsonData6.json';
    export default {
        mixins: [bluetoothMixin], // 使用mixin
        data() {
            return {
                //商米内置打印机-蓝牙信息配置
                printConfig:{
                  "deviceId": "00:11:22:33:44:55",
                  "serviceId": "00001101-0000-1000-8000-00805F9B34FB",
                  "notifyId": "00001101-0000-1000-8000-00805F9B34FB",
                  "writeId": "00001101-0000-1000-8000-00805F9B34FB",
                },
            }
        },
        methods: {
            innerPrinter(templateId) {
              switch(templateId){
                case '1'://堂食-结账单
                  this.templatePrint(this.printConfig,templateId, 1,jsonData1)
                  break;  
                case '2'://堂食-点菜单
                  this.templatePrint(this.printConfig,templateId,1,jsonData2)
                  break;
                case '3'://零点-结账单
                  this.templatePrint(this.printConfig,templateId, 1, jsonData3)
                  break;  
                case '4'://外卖订单
                  this.templatePrint(this.printConfig,templateId, 1, {})
                  break; 
                case '5'://排号小票
                  this.templatePrint(this.printConfig,templateId, 1, {})
                   break;   
                case '6'://堂食-预结单
                  this.templatePrint(this.printConfig,templateId, 1, jsonData6)
                  break;
              }
            }
        }
    }
</script>

打印方法

import PrinterJobs from './printerjobs.js'
import printerUtil from './printerutil.js'
printerJobs
    .setAlign('rt') //文字居中方式设置 对齐方式 LT/CT/RT
    .setSize(2, 2)  //设置字体大小 高度 宽度
    .print(printerUtil.fillLine())  //打印分割线
    .setBold(true)//字体加粗
    .print(printerUtil.inline('应付', '¥99.99'))  //两列
    .print(printerUtil.inline2('鲜汁肉包', 'x2', '¥199.99')) //打印三列
    .text('内容') //增加打印内容
    .println()//打印换行
    .setLineSpacing(10) //设置行间距为 n 点行,默认值行间距是 30 点
    .lineFeed()//打印空行
    .setColor(0)//设置字体颜色,需要打印机支持 0 默认颜色黑色 1 红色
    .beep() //蜂鸣警报,需要打印机支持
    .clear() //清空任务 防止打印任务太多,打印机停不下来
    .printQrcodeByESC('123456') //打印二维码
    .cutPaper() //切纸

长期维护,持续更新,提供终身免费技术支持

隐私、权限声明

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

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

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

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问