admin管理员组

文章数量:1618715

记录一下ionic3使用cordova插件连接TSC蓝牙热敏打印机TSPL打印功能,成品图展示:
引入cordova插件:
cordova plugin add git://github/anilbhanushali/cordovaPluginTscPrinter
这个插件中默认引入的有TSC打印机的SDK,有兴趣的可以自己解析看一下SDK源码

连接打印机

首先要做一个蓝牙搜索配对的界面,这个官方提供的有插件,不想写的网上也有许多现成的,Android手机系统自带的蓝牙是无法链接上打印机的,需要通过打印机sdk中openport(String address)方法进行连接,传递的参数为MAC地址,即下图中的00:0C:BF:27:7D:A9,连接上后打印机无线灯变成蓝色,连接方法:
1.首先在ts中声明 declare let window: any;
2.传入的item是设备信息,通过调用cordovaPluginTscPrinter插件中的connectPrinter方法进行连接。

 connect(item) {
    this.disconnect();
    this.Share.isConnect = {};
    this.deviceId = item.address;
    window.TscPrinter.connectPrinter(this.deviceId,(data)=> {
   
    },(err)=> {


    })

  }

蓝牙打印功能实现

1.同样在要打印的ts中声明declare let window: any;
2.建立打印模板,根据打印纸的纸张大小建立模板:

 window.TscPrinter.setupPrinter([60,100,5,12,0,2,0],function (data) {
    },function(err){
      alert(err);
    });

3.清除缓存

  window.TscPrinter.clearBuffer([],function (data) {
    },function(err){
      alert(err);
    });
   

4.打印文字
由于文字可能出现过长的,我的高度并不是写死的,而是根据字数去自动的增加高度,方法比较笨,但是能用(SDK中有换行的方法,不过好像是通过字节数去换行,我这里涉及中文,换行后会出现乱码,有能力的可以自己研究),另外:由于打印中文时会出现中文乱码情况,我采用两个参数去调用,第一个参数是打印文字的位置字体等配置参数,其中 FONT001是字体名称,这个字体是通过PC连接打印机向打印机中内部下载的字体,我下载的黑体命名为FONT001,其次cordovaPluginTscPrinter插件中sendText方法我进行了改造,将编码转换成GB2312进行打印中文,修改插件需要将插件下载到本地,修改后先将工程中的插件rm掉,在把本地修改后的插件add进工程:

打印文字ts调用方法:

  window.TscPrinter.sendText(["TEXT "+height+",500,\"FONT001\",270,2,2,\"",sub],function(data){

        },function(err){

        });
private String sendText(JSONArray args) throws JSONException {
        String command = args.getString(0);
		byte[] QQ2 = new byte[1024];
        try {
            QQ2=args.getString(1).getBytes("GB2312");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        TscDll.sendcommand(command);
        TscDll.sendcommand(QQ2);
        return TscDll.sendcommand("\"\r\n");
    }

5.打印二维码,最后一个参数是你要写进二维码的数据,pringQrCode方法插件中没有,需要自己写二维码的调用方法,代码贴出来,需要的直接粘贴进去,然后重新add插件即可:

 private String printQrCode(JSONArray args) throws JSONException {
        Integer x = args.getInt(0);
        Integer y = args.getInt(1);
        String ecc = args.getString(2);
        String cell = args.getString(3);
		String mode = args.getString(4);
		String rotation = args.getString(5);
		String model = args.getString(6);
		String mask = args.getString(7);
		String content = args.getString(8);
        return TscDll.qrcode(x,y,ecc,cell,mode,rotation,model,mask,content);
    }
 window.TscPrinter.printQrCode([50,540,"L","10","M","0","M2","S3","A"+stockLocation+"789XYZ"+itemId],function (data) {
    },function(err){
      alert(err);
    });

6.最后是打印指令,不发这个指令上面做的等于白费

 window.TscPrinter.printLabel([1, 1], (data)=>{
      load.dismiss();
      this.appService.toast("打印成功!");
    },(err)=>{
      load.dismiss();
      this.appService.toast("打印失败!");
    });

注意:修改插件时,无论是修改参数还是增加方法删除方法,凡是对方法的结构进行修改操作的,都需要去www目录下修改js文件中对应的方法,否则在打包时会报错。

第一次发博,不喜勿喷,有问题加WX zt924099861,知无不言,IOS模块见我下一篇

本文标签: 热敏蓝牙功能打印机打印cordova