更新记录

1.0.6(2022-06-10)

1、【优化】更新printBitmapByUrl接口,去掉Paper参数,改为插件自动获取

2、【优化】更新printBitmapByUrlRow接口,去掉Paper参数,改为插件自动获取

3、【优化】更新printInterval接口,去掉Paper参数,改为插件自动获取

1.0.5(2022-06-10)

1、【Bug】修改第三方jar依赖导致无法打包问题

1.0.4(2022-06-09)

1、【升级】升级商米打印依赖为最新版本

2、【优化】所有接口增加回调,通过回调获取执行结果,并使用Log打印日志

3、【增加】增加printBitmapByUrlSize接口,支持传网络图片路径打印,并指定图片大小

4、【增加】增加printInterval接口,传入paper值,自动判断并打印分隔行

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:4.4 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 ×

原生插件通用使用流程:

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

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


商米内置打印机插件

插件需求

使用插件前,请先使用试用版本,在本地调试好,看插件是否满足,再进行购买。如果插件不满足你的需求,可以联系我,尝试修改插件或者增加功能的方式,来帮助实现你的业务逻辑。

插件介绍

商米内置打印机插件,支持商米所有的一体机打印,采用的是商米一体机打印文档的标准 SDK 封装。初始化连接成功之后,直接从 Uniapp 端即可组装参数、纸张格式,直接传递到插件即可打印。下面有所有的接口文档,看不懂的可以打开商米官网查看一体机打印文档 模块的文档。

  • 一体机打印文档适用于所有内置打印机的商米设备

  • 连接方式:远程依赖库、蓝牙(蓝牙设备名:InnerPrinter)、AIDL 等

  • 第三方 APP 可以通过连接内置打印机进行打印业务。商米打印机包含的功能:58 和 80mm 两种打印规格的热敏打印机,切刀(部分机器),钱箱(部分机器),客显(部分机器)

  • 商米打印机一体机打印文档

使用案例

获取插件

// 商米内置打印机插件
let sunmiPrinterPlugin = uni.requireNativePlugin('Tellsea-SunmiPrinterPlugin');
console.log('商米内置打印机插件:' + JSON.stringify(sunmiPrinterPlugin));

测试插件

// 测试插件
testPlugin() {
    androidTTSPlugin.testPlugin('测试插件', (e) => {
        let res = JSON.parse(e);
        if (res.code == 200) {
            that.$msg('安装成功');
        } else {
            that.$msg(res.msg);
        }
    });
},

连接服务

// 连接服务
connect() {
    sunmiPrinterPlugin.connect((e) => {
        let res = JSON.parse(e);
        console.log(res);
        if (res.code == 200) {
            that.$msg(res.msg);
        } else {
            that.$msg(res.msg);
        }
    });
},

断开服务

// 断开服务
disconnect() {
    sunmiPrinterPlugin.disconnect((e) => {
        let res = JSON.parse(e);
        console.log(res);
        if (res.code == 200) {
            that.$msg(res.msg);
        } else {
            that.$msg(res.msg);
        }
    });
},

测试打印

// 测试打印小票
testPrinter() {
    let picture = 'https://old-university.gzzhhy.cn/old-university-service/profile/upload/test.png';
    sunmiPrinterPlugin.printerInit();
    sunmiPrinterPlugin.getPrinterPaper((e) => {
        let res = JSON.parse(e);
        let paper = res.data;
        console.log(paper);

        sunmiPrinterPlugin.setAlignment(1);
        sunmiPrinterPlugin.printTextWithFont("结账单 #199\n", null, 48);
        sunmiPrinterPlugin.printTextWithFont("Tellsea 专卖店\n", null, 40);
        sunmiPrinterPlugin.printInterval(paper);
        sunmiPrinterPlugin.setAlignment(0);
        sunmiPrinterPlugin.setPrinterStyle(2003, 0);
        sunmiPrinterPlugin.printTextWithFont("桌台号:华山007\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("就餐人数:1人\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("配送类型:骑手配送\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("订单号:131561658165116\n", null, 28);

        sunmiPrinterPlugin.printInterval(paper);
        sunmiPrinterPlugin.setPrinterStyle(1002, 1);
        let txts = ["商品", "数量", "单价"];
        let width = [4, 1, 1];
        let align = [0, 1, 2];
        sunmiPrinterPlugin.printColumnsString(txts, width, align);
        sunmiPrinterPlugin.setPrinterStyle(1002, 2);
        // 多属性格式
        txts[0] = "杨枝甘露";
        txts[1] = "";
        txts[2] = "";
        sunmiPrinterPlugin.printColumnsString(txts, width, align);
        txts[0] = "大份、加冰、微辣";
        txts[1] = 1;
        txts[2] = 18;
        sunmiPrinterPlugin.printColumnsString(txts, width, align);
        // 单属性格式
        txts[0] = "小馒头";
        txts[1] = 1;
        txts[2] = 18;
        sunmiPrinterPlugin.printColumnsString(txts, width, align);
        // 单个菜设置备注
        txts[0] = "备注少放盐";
        txts[1] = "";
        txts[2] = "";
        sunmiPrinterPlugin.printColumnsString(txts, width, align);

        sunmiPrinterPlugin.printInterval(paper);
        sunmiPrinterPlugin.printTextWithFont("订单原价:999\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("优惠金额:1\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("抹零金额:0.99\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("整单打折:8折\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("打折金额:200\n", null, 28);
        sunmiPrinterPlugin.printTextWithFont("订单备注:麻烦快一点,客人忙着出去\n", null, 28);
        sunmiPrinterPlugin.printInterval(paper);
        sunmiPrinterPlugin.printTextWithFont("实付金额:888\n", null, 40);
        sunmiPrinterPlugin.printInterval(paper);

        // 打印图片(Base64)
        // sunmiPrinterPlugin.printInterval(paper);
        // sunmiPrinterPlugin.printBitmap(picture);
        // sunmiPrinterPlugin.printInterval(paper);

        // 打印网络图片(网络链接)
        sunmiPrinterPlugin.printBitmapByUrl(picture, paper);

        // 打印网络图片(指定大小)
        sunmiPrinterPlugin.printBitmapByUrlSize(picture, 100, 100);

        // 打印网络图片(一行打印多个图片)
        sunmiPrinterPlugin.printBitmapByUrlRow(picture, picture, paper);
        sunmiPrinterPlugin.printInterval(paper);

        sunmiPrinterPlugin.setAlignment(1);
        sunmiPrinterPlugin.printTextWithFont("我是页面底部的文字\n", null, 28);

        // 最后一条命令执行完之后,在回调中执行走纸命令,要不然同步执行走纸可能命令会被覆盖
        // 打印空行,如果该方法强行退出,说明不支持该方法,删除该方法,卸载测试软件,实用\n输出空行
        // sunmiPrinterPlugin.lineWrap(5);
        sunmiPrinterPlugin.printText("    \n");
        sunmiPrinterPlugin.printText("    \n");
        sunmiPrinterPlugin.printText("    \n");
        sunmiPrinterPlugin.printText("    \n");
        sunmiPrinterPlugin.printText("    \n");

        // 切纸,设备没有切刀的就不能切纸
        sunmiPrinterPlugin.cutPaper();
    });
},

接口扩展列表

扩展接口属于自定义接口,针对业务增加的实用接口。

  • 打印网络图片
  • 打印网络图片-指定大小
  • 打印网络图片-左右布局
  • 打印分隔行

商米接口列表

内置打印机开发文档全系列接口。接口的使用,对照着官方在线文档:内置打印机开发文档,查看接口的作用就行了,直接翻译接口名也能知道是啥作用。

    void updateFirmware();

    int getFirmwareStatus();

    String getServiceVersion();

    void printerInit();

    void printerSelfChecking();

    String getPrinterSerialNo();

    String getPrinterVersion();

    String getPrinterModal();

    void getPrintedLength();

    void lineWrap(int var1);

    void sendRAWData(byte[] var1);

    void setAlignment(int var1);

    void setFontName(String var1);

    void setFontSize(float var1);

    void printText(String var1);

    void printTextWithFont(String var1, String var2, float var3);

    void printColumnsText(String[] var1, int[] var2, int[] var3);

    void printBitmap(Bitmap var1);

    void printBarCode(String var1, int var2, int var3, int var4, int var5);

    void printQRCode(String var1, int var2, int var3);

    void printOriginalText(String var1);

    void commitPrint(TransBean[] var1);

    void commitPrinterBuffer();

    void cutPaper();

    int getCutPaperTimes();

    void openDrawer();

    int getOpenDrawerTimes();

    void enterPrinterBuffer(boolean var1);

    void exitPrinterBuffer(boolean var1);

    void tax(byte[] var1, InnerTaxCallback var2);

    void getPrinterFactory();

    void clearBuffer();

    void commitPrinterBufferWithCallback();

    void exitPrinterBufferWithCallback(boolean var1);

    void printColumnsString(String[] var1, int[] var2, int[] var3);

    int updatePrinterState();

    void sendLCDCommand(int var1);

    void sendLCDString(String var1);

    void sendLCDBitmap(Bitmap var1);

    int getPrinterMode();

    int getPrinterBBMDistance();

    void printBitmapCustom(Bitmap var1, int var2);

    int getForcedDouble();

    boolean isForcedAntiWhite();

    boolean isForcedBold();

    boolean isForcedUnderline();

    int getForcedRowHeight();

    int getFontName();

    void sendLCDDoubleString(String var1, String var2);

    int getPrinterPaper();

    boolean getDrawerStatus();

    void sendLCDFillString(String var1, int var2, boolean var3);

    void sendLCDMultiString(String[] var1, int[] var2);

    int getPrinterDensity();

    void print2DCode(String var1, int var2, int var3, int var4);

    void autoOutPaper();

    void setPrinterStyle(int var1, int var2);

    void labelLocate();

    void labelOutput();

隐私、权限声明

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

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

插件不采集任何数据

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

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