更新记录

1.3(2020-02-14)

1、新增打印图片增加支持网络图片; 2、新增按列打印文本内容; 3、修改文档文本错误;

1.2(2020-01-16)

1、插件支持商米手持机、台式机、自助机、商米外接usb58热敏打印机以及商米云打印机(蓝牙方式)的打印调用; 2、引用方式和初始化方式调整,老版本的方法已经不可用; 3、新增打印图片的方法,目前只支持打印/static目录下的图片;

查看更多

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://ask.dcloud.net.cn/article/35763
iOS 离线打包原生插件另见文档 https://ask.dcloud.net.cn/article/35764


商米打印插件

本插件适用于带打印机的所有商米机器及商米58热敏票据打印机
请注意插件更新了新的引入方式和新接口!!!

1、插件使用

新版本(1.2+)请根据开发使用的商米打印机选择不同的插件引入方式:

//连接商米一体机(如V1、V2、T1、T2等等),通过如下方式
const sunmi_print = uni.requireNativePlugin('Sunmi-Print-Inner')
//连接商米自助终端(如K1、H1等等),通过如下方式
const sunmi_print = uni.requireNativePlugin('Sunmi-Print-Self')
//连接商米58热敏票据打印机(小黑盒),通过如下方式
const sunmi_print = uni.requireNativePlugin('Sunmi-Print-Outter')
//连接商米云打印机,通过如下方式
const sunmi_print = uni.requireNativePlugin('Sunmi-Print-Ble')

以及新的初始化打印机方法和新的释放方法:

//使用前连接打印机
sunmi_print.connect(res => {
    if(res.connect == "hello"){
        console.log("打印机成功连接")
    }
})
//使用后断开打印机
sunmi_print.disconnect()

2、接口说明

  • 连接打印机 connect(res=>{res.connect})

    v1.2+)新增接口替换原init()接口

    首次启动app时调用此方法来连接商米打印机,当conect返回成功后才可以进行打印;
    注意:回调func是个异步长连接,会实时返回连接的状态结果,建议一直监控回调状态,这样当使用过程中如果打印机断开了也可以及时获取

    对于商米云打印机,即引用“Sunmi-Print-Ble”时,连接是通过蓝牙方式,所以需要先在手机或商米机器上将商米云打印机配对后才能通过此方法连接打印机,如果有多个已配对打印机请使用另一种方法连接云打印机见connectByMac

    res.connect回调参数说明

    回调参数结果 回调参数说明
    hello 打印机连接成功
    bye 打印机断开连接
    unknown 没有打印机
  • 连接商米云打印机 connectByMac(string, res=>{res.connect})

    通过指定蓝牙mac地址,以蓝牙方式连接对应的商米云打印机
    注意:本方法仅能在requireNativePlugin('Sunmi-Print-Ble')后使用,其他打印机调用此方法无效,如果指定的蓝牙mac地址打印机没有配对将不会连接成功

    参数 类型 说明
    string String 指定的商米云打印机地址
    res func 连接状态的回调函数

    string详细说明
    商米云打印机地址可以通过自己设置或通过getBlueToothDevice方法获取

  • 获取蓝牙设备地址 getBlueToothDevice(arrays=>{arrays})

    调用此方法将获取到已配对的商米云打印机设备地址列表,列表返回后选择其中需要的打印机进行connectByMac连接打印机后使用 注意:返回打mac地址仅有商米云打印机,并不能依靠本方法获取其他蓝牙设备mac地址

  • 断开打印机 disconnect()

    v1.2+)新增接口替换原destroy()接口

    当不需要打印功能时需要调用本方法断开打印机的连接释放资源

    连接和断开58热敏打印机示例,同样用于其他商米机器

    
        const print = uni.requireNativePlugin('Sunmi-Print-Outter');
        var isConnect = false;
        export default {
            methods: {
                start() {
                    print.connect(res => {
                        isConnect = res.connect == "hello"
                    })          
                },
               print() {
                    if(isConnect){
                        //打印小票
                    }
               },
                over() {
                    print.disconnect()
                }
            }
        }
    

    连接和断开商米云打印机示例(这里直接连接返回的第一个mac地址)

    
        const print = uni.requireNativePlugin('Sunmi-Print-Ble');
        var isConnect = false;
        export default {
            methods: {
                scanAndStart() {
                    print.getBlueToothDevice(arrays=>{
                        if(arrays.length > 0){
                            print.connect(arrays[0], res =>{
                                console.log(res.connect)
                            })
                        }
                    })
                },
               print() {
                    if(isConnect){
                        //打印小票
                    }
               },
                over() {
                    print.disconnect()
                }
            }
        }
    
  • 获取打印机的实时状态 getPrinterStatus(result => {result.status})

    result.status回调参数说明

    回调参数结果 回调参数说明
    offline 打印机未连接
    running 打印机正常
    fault 打印机故障
    outpaper 打印机缺纸
    hot 打印机过热
    open 打印机开盖(58打印机不支持)
    error 未知错误

    示例

    sunmi_print.getPrinterStatus(result => {
       console.log("打印机当前状态是:” + result.status)
    })
  • 打印机初始化 printInit()

    初始化打印机的缓存、样式恢复为默认(默认字体大小24、居左)

  • 打印自检页 printSelfCheck()

    可通过自检页查看打印效果、打印机信息
    商米自助打印机和58热敏打印机不支持打印自检页

  • 打印指令数据 printRawData(array)

    接收ESC指令内容并执行打印(参考ESC指令)
    初始化、自检页、指令数据打印示例

    //主动初始化打印机
    sunmi_print.printInit()
    //打印一张自检页
    sunmi_print.printSelfCheck()
    //设置加粗指令,之后的文本内容会加粗
    var cmd1 = [0x1b, 0x45, 0x01] 
    //设置行高指令,之后的文本内容行间距改变
    var cmd2 = [0x1b, 0x33, 0x00]
    //打印12345678
    var data = [0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x0a]
    sunmi_print.printRawData(cmd1);
    sunmi_print.printRawData(cmd2);
    sunmi_print.printRawData(data)
    sunmi_print.printRawData(data);
  • 打印富含样式的文本内容 printText(object)

    object参数说明

    参数 类型 默认值 说明
    text String 要打印的文本内容
    align Number 0 对齐方式:0居左 1居中 2居右
    size Number 24 打印文本的字体大小
    bold Boolean false 文本内容是否加粗
    underline Boolean false 文本内容是否下划线
    compact Boolean false 文本内容是否紧凑模式
    skip Boolean true 文本内容当不满一行时是否直接输出

    size说明
    商米内置打印机的字体大小支持12~60
    商米自助打印机和58打印机仅支持默认字体24的倍数大小

    compact说明
    紧凑模式指当启用紧凑模式时,本行内容将会挨着上一行内容,没有行间距

    示例

    print.printText({
            text:"商米打印测试",
            align:1,
            size:30,
            bold:true,
            underline:true,
            compact:true,
            skip:true
    })
    print.printText({
            text:"商米打印测试",
            align:2,
            size:12,
            compact:true,
            skip:true
    })
  • 按列打印文本内容 printColumnsText(object)

    本接口将按列打印文本内容,方便打印出特殊排版格式的文本,为了排版固定本接口只能打印默认字体大小的文本,不能改变字体大小

    object参数说明 参数 类型 默认值 说明
    texts Array 字符串数组表示每一列的文本内容
    lengths Array 整型数组表示每一列占的字符数量
    aligns Array 整型数组表示每一列的对齐方式
    bold Boolean false 文本内容是否加粗

    注意:
    1、各个数组的长度必须一致否则将打印失败
    2、字符数量lengths表示ascii码的数量,中文汉字占两个ascii码
    3、58mm的打印纸lengths和不超过30,80mm的lengths和不超过46
    示例

    //按列打印一行简单的内容,每列分别居左、居中、居右
    print.printColumnsText({
        texts:["一", "二二", "三三三"],
        lengths:[10, 10, 10],
        aligns:[0, 1, 2]
    })
    //左右两列打印商品列表
    print.printColumnsText({
        texts:["商品", "价格"],
        lengths:[15, 15],
        aligns:[0, 2],
        bold:true
    })
    print.printColumnsText({
    texts:["汉堡", "15元"],
    lengths:[15, 15],
    aligns:[0, 2],
    })
    print.printColumnsText({
        texts:["可乐", "8元"],
        lengths:[15, 15],
        aligns:[0, 2],
    })
  • 打印条码内容 printBarCode(object)

    object参数说明

    参数 类型 默认值 说明
    text String 要打印的条形码内容需搭配条形码类型
    symbology Number 8 条形码类型,如下
    height Number 128 条形码高度 1~255
    width Number 2 条形码宽度 2~6
    hri Number 0 HRI位置 0:不打印 1:上方 2:下方 3:上下
    align Number 0 对齐方式:0居左 1居中 2居右

    symbology说明

    取值 码类型
    0 UPC-A编码
    1 UPC-E编码
    2 EAN13编码
    3 EAN8编码
    4 CODE39编码
    5 ITF编码
    6 CODABAR编码
    7 CODE93编码
    8 CODE128编码

    注意Code128分三种类型: A类:包含⼤写字⺟、数字、标点等; B类:⼤⼩写字⺟,数字; C类:纯数字,复数字符,若为单数位,最后⼀个将忽略; 接⼝默认使⽤B类编码,若要使⽤A类、C类编码需在内容前⾯加“{A”、“{C”
    例如:
    默认B类 “1234567”
    使用A类 “{A2344A”
    使用C类 “{C123123”
    混合使用 ”{A1A{B13B{C12”

    示例

    print.printBarCode({
                    text:"1234567890",
                    symbolgy:8,
                    height:100,
                    width:3,
                    hri:0,
                    align:1
    })
  • 打印二维码码内容 printQrCode(object)

    object参数说明

    参数 类型 默认值 说明
    text String 二维码内容
    size Number 24 二维码块大小 4~16
    errorlevel Number 0 纠错等级 0:L 1:M 2:Q 3:H
    align Number 0 对齐方式:0居左 1居中 2居右

    示例

    print.printQrCode({
                text:"1234567890",
                size:5,
                errorlevel:0,
                align:1
    })
  • 打印图片 printBitmap(object)

    object参数说明

    参数 类型 默认值 说明
    path String 图片的存储路径
    url String 来自网络的图片url
    align Number 0 对齐方式:0居左 1居中 2居右

    path说明 路径必须是/static目录下的图片
    url说明 当同时有path参数时将会使用本地存储的图片,而不使用来自网络的图片,图片最好不要超过打印纸宽度,否则将不能打印

    示例

    //打印本地存储的图片logo
    print.printBitmap({
        path:"/static/logo.png",
        align:1
    })
    //打印网络端的图片logo
    print.printBitmap({
        url:"http://img.pconline.com.cn/images/upload/upc/tx/itbbs/1607/06/c3/23806812_1467754402821_1024x1024.jpg",
        align:1
    })

隐私、权限及商业化声明

1. 本插件需要申请的手机端权限列表:

蓝牙权限 位置权限

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

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

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