记录一下ionic3使用cordova插件连接TSC蓝牙热敏打印机TSPL打印功能,成品图展示:
引入cordova插件:
cordova plugin add git://github.com/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模块见我下一篇