H5 +蓝牙打印机 CPCL和ESC

您所在的位置:网站首页 蓝牙打印机打印条码 H5 +蓝牙打印机 CPCL和ESC

H5 +蓝牙打印机 CPCL和ESC

2023-12-25 07:17| 来源: 网络整理| 查看: 265

@[搜索蓝牙打印机函数] var SearchBluetooth = function() { /dom变量定义/ var BluetoothBtn = document.getElementById(“BluetoothBtn”), //最下边的按钮 unpairedList = document.getElementById(“unpairedList”), //未配对设备列表 pairedList = document.getElementById(“pairedList”), //已配对设备列表 loadImgHtml = ‘’; //加载图像HTML

/*plus变量定义*/ var main, BluetoothAdapter, BAdapter, IntentFilter, BluetoothDevice, receiver; //有些我也不知道是啥意思-_-!; /*其他定义*/ var isSearchDevices = false, //是否处于搜索状态 savedBleId = localStorage.getItem("bleId"), //缓存的设备ID IntervalObj, //定时器对象 BleDeviceObjAry = [], //BleDevice对象数组 debug = false; //调试模式 return { //初始化方法 Init: function() { main = plus.android.runtimeMainActivity(), BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"), IntentFilter = plus.android.importClass('android.content.IntentFilter'), BluetoothDevice = plus.android.importClass("android.bluetooth.BluetoothDevice"), BAdapter = new BluetoothAdapter.getDefaultAdapter(); this.CheckBluetoothState(); this.EventInit(); }, //事件绑定 EventInit: function() { var self = this, bdevice = new BluetoothDevice(); //搜索 BluetoothBtn.addEventListener("tap", function() { if(!isSearchDevices) { self.SearchDevices(); } }); /*未配对列表点击事件*/ mui("#unpairedList").on("tap", "li", function() { var id = this.getAttribute("data-id"), state = true; self.SetButtonStatus("正在配对...", true); for(var i = 0, l = BleDeviceObjAry.length; i < l; i++) { var BleDeviceItem = BleDeviceObjAry[i]; main.unregisterReceiver(receiver); //取消监听 if(BleDeviceItem.getAddress() === id) { BleDeviceItem.createBond(); self.SetButtonStatus("正在配对...", true); var testBondState = setInterval(function() { if(BleDeviceItem.getBondState() === bdevice.BOND_BONDED) { mui.toast("配对成功"); self.SetButtonStatus("配对成功正在尝试连接打印机...", true); localStorage.setItem("bleId", id); var bleObj = new ConnectPrinter(id); bleObj = null; window.clearInterval(testBondState); mui.back(); } else if(BleDeviceItem.getBondState() === bdevice.BOND_NONE) { mui.toast("配对失败"); window.clearInterval(testBondState); self.SetButtonStatus("重新搜索设备", false); } }, 1000); state = false; break; } } if(state) { mui.toast("配对失败请重新搜索设备"); self.SetButtonStatus("重新搜索设备", false); } }); /*已配对列表点击事件*/ mui("#pairedList").on("tap", "li", function() { var id = this.getAttribute("data-id"); if(id) { self.SetButtonStatus("配对成功正在尝试连接打印机...", true); localStorage.setItem("bleId", id); var bleObj = new ConnectPrinter(id); bleObj = null; mui.back(); } }); }, //检测蓝牙状态 CheckBluetoothState: function() { var self = this; if(!BAdapter.isEnabled()) { plus.nativeUI.confirm("蓝牙处于关闭状态,是否打开?", function(e) { if(e.index == 0) { BAdapter.enable(); } }); debug && console.log("蓝牙处于关闭状态,正在打开..."); } else { self.SearchDevices(); debug && console.log("蓝牙处于开启状态,准备搜索蓝牙设备..."); } }, //搜索设备 SearchDevices: function() { var self = this; isSearchDevices = true; self.SetButtonStatus("正在搜索蓝牙设备...", true); debug && console.log("开始搜索蓝牙设备..."); var filter = new IntentFilter(), bdevice = new BluetoothDevice(); BleDeviceObjAry = []; //清空BleDeviceObjAry unpairedList.innerHTML = ''; pairedList.innerHTML = ''; BAdapter.startDiscovery(); //开启搜索 receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', { onReceive: onReceiveFn }); filter.addAction(bdevice.ACTION_FOUND); filter.addAction(BAdapter.ACTION_DISCOVERY_STARTED); filter.addAction(BAdapter.ACTION_DISCOVERY_FINISHED); filter.addAction(BAdapter.ACTION_STATE_CHANGED); main.registerReceiver(receiver, filter); //注册监听事件 //监听回调函数 function onReceiveFn(context, intent) { plus.android.importClass(intent); //通过intent实例引入intent类,方便以后的‘.’操作 //开始搜索改变状态 intent.getAction() === "android.bluetooth.device.action.FOUND" && (isSearchDevices = true); //判断是否搜索结束 if(intent.getAction() === 'android.bluetooth.adapter.action.DISCOVERY_FINISHED') { main.unregisterReceiver(receiver); //取消监听 isSearchDevices = false; BleDeviceObjAry = []; self.SetButtonStatus("重新搜索设备", false); return false; } var BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE), bleName = BleDevice.getName(), //设备名称 bleId = BleDevice.getAddress(); //设备mac地址 if(!bleName || !bleId) { return false; } //判断是否配对 if(BleDevice.getBondState() === bdevice.BOND_BONDED) { debug && console.log("已配对蓝牙设备:" + bleName + ' ' + bleId); self.SetpairedListHtml(pairedList, bleName, bleId); //如果缓存保存的设备ID和该ID一致则配对 if(savedBleId == bleId) { BleDevice.createBond(); } } else { debug && console.log("未配对蓝牙设备:" + bleName + ' ' + bleId); BleDeviceObjAry.push(BleDevice); self.SetpairedListHtml(unpairedList, bleName, bleId); } } }, //设置设备列表HTML SetpairedListHtml: function(parentEl, bleName, bleId) { var li = document.createElement('li'); li.setAttribute("data-id", bleId); li.innerHTML = bleName + "" + bleId + ""; parentEl.appendChild(li); }, //更改按钮状态 SetButtonStatus: function(tipText, isDisabled) { if(isDisabled) { BluetoothBtn.innerHTML = loadImgHtml + tipText; BluetoothBtn.classList.add("mui-disabled"); } else { BluetoothBtn.innerHTML = tipText; BluetoothBtn.classList.remove("mui-disabled"); } } }

}(); //连接打印机和打印 //打印命令 // 导入的java包 //var Context, BluetoothAdapter, BluetoothDevice; // 蓝牙服务与适配 54 (function(window) { window.ConnectPrinter = function(bleId) { var plusMain = plus.android.runtimeMainActivity(), BluetoothAdapter = plus.android.importClass(“android.bluetooth.BluetoothAdapter”), UUID = plus.android.importClass(“java.util.UUID”), uuid = UUID.fromString(“00001101-0000-1000-8000-00805F9B34FB”), BAdapter = BluetoothAdapter.getDefaultAdapter(); device = BAdapter.getRemoteDevice(bleId); plus.android.importClass(device); bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid); // createInsecureRfcommSocketToServiceRecord plus.android.importClass(bluetoothSocket); if(!bluetoothSocket.isConnected()) { bluetoothSocket.connect(); } //mui.toast(‘打印机已就绪,可正常打印!’); this.gotoPrint = function(a,b,c,d,e) { if(!bluetoothSocket.isConnected()) { bluetoothSocket.connect(); } if(bluetoothSocket.isConnected()) {

var outputStream = bluetoothSocket.getOutputStream(); plus.android.importClass(outputStream); var printCmd="! 0 200 200 300 1 \n\r";//建立页面 8点=1mm var pn="型号:"+a; var brand="品牌:"+b; var dcode="批次:"+c; var qty="数量:"+d; var box="订单号:"+e; var kfname="圣和堂"; //内容 printCmd+="PAGE-WIDTH 600 \n\r";//打印型号 超过不显示 //printCmd+="TEXT 12 2 10 40 "+pn+"\n\r" ;//打印型号 超过不显示 文字 //printCmd+="TEXT 12 2 10 40 测试\n\r" ;//打印型号 超过不显示 文字 //printCmd+="CENTER \n\r"; printCmd+="SETMAG 2 2\n\r"; printCmd+="SETBOLD 2\n\r"; printCmd+="TEXT 24 0 250 10 "+kfname+" \n\r"; printCmd+="SETMAG 0 0\n\r"; printCmd+="SETBOLD 0\n\r"; //printCmd+="LEFT \n\r"; printCmd+="TEXT 24 0 10 70 "+pn+" \n\r"; printCmd+="TEXT 24 0 10 120 "+brand+"\n\r" ;//打印型号 超过不显示 文字 printCmd+="TEXT 24 0 10 170 "+dcode+"\n\r" ;//打印型号 超过不显示 文字 printCmd+="TEXT 24 0 10 220 "+qty+"\n\r" ;//打印型号 超过不显示 文字 printCmd+="TEXT 24 0 10 270 "+box+"\n\r" ;//打印型号 超过不显示 文字 //一维码 //printCmd+="BARCODE 128 1 1 50 10 160 "+a+"\n\r";//打印条码 超过不显示 //printCmd+="TEXT 24 0 50 210 "+a+" \n\r"; printCmd+="BARCODE QR 300 160 M 2 U 6\r\n";//打印二维条码 超过不显示BARCODE \n\r printCmd+="MA,"+a+"\r\n"; printCmd+="ENDQR\n\r"; //开始打印 printCmd+="FORM \n\r"; // 型号: printCmd+="PRINT \n\r"; //console.log(printCmd); var arrayBuffer=plus.android.invoke(printCmd, 'getBytes', 'gbk');//stringToByte(printCmd); //outputStream.write(plus.android.invoke(printCmd, 'getBytes', 'gbk')); outputStream.write(arrayBuffer); //outputStream.write(plus.android.invoke(cmd, 'getBytes', 'gbk')); //outputStream.write(stringToByte(printCmd)); outputStream.flush();

// outputStream.write([0x1B,0x40]);//打印复位 // outputStream.write(plus.android.invoke(“测试打印”, ‘getBytes’, ‘gbk’)); // outputStream.write(plus.android.invoke("\n", ‘getBytes’, ‘gbk’)); // outputStream.write(plus.android.invoke(“测试打印”, ‘getBytes’, ‘gbk’)); // outputStream.flush();

device = null; bluetoothSocket.close(); } }; this.closePrint=function(){ device = null; bluetoothSocket.close(); }; };

})(window); function getLowHighByte(data) { var lowHighByte=[]; var dataLen = data.length; lowHighByte[0] = 0xFF&dataLen; lowHighByte[1] = (0xFF00&dataLen)>>8; return lowHighByte; } //现有的数组连上后面字符串 function setAddStr(arr,str){ var arr1=stringToByte(str); for(var i=0;i maxBit) { // arrayBuffer=arrayBuffer.slice(200); // outputStream.write(arrayBuffer.slice(0, maxBit)); // }else{ // isContinue=false; // outputStream.write(arrayBuffer); // } // } function arrApply(a,b){ for(var i in b){ a.push(b[i]); } return a; } function stringToByte(str) { var bytes = new Array(); var len, c; len = str.length; for(var i = 0; i < len; i++) { c = str.charCodeAt(i); if(c >= 0x010000 && c > 18) & 0x07) | 0xF0); bytes.push(((c >> 12) & 0x3F) | 0x80); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if(c >= 0x000800 && c > 12) & 0x0F) | 0xE0); bytes.push(((c >> 6) & 0x3F) | 0x80); bytes.push((c & 0x3F) | 0x80); } else if(c >= 0x000080 && c > 6) & 0x1F) | 0xC0); bytes.push((c & 0x3F) | 0x80); } else { bytes.push(c & 0xFF); } } return bytes;

}

//HTML 页面

mui.init(); ul { margin: 0; } footer { background: none !important; border: none !important; box-shadow: none !important; bottom: 20px !important; } .printer-title { color: #787878; line-height: 30px; font-size: 12px; } .printer-list { min-height: 160px; border-radius: 4px; background-color: #fff; font-size: 13px; } .printer-list>li { line-height: 40px; border-bottom: 1px solid #eee; padding: 0 15px; } .printer-list>li>span { color: #999; float: right; } img.loadImg { width: 16px; margin-right: 6px; vertical-align: middle; } .btn { background-color: #5C75EE; color: #fff; font-size: 14px; display: block; width: 100%; border: none; height: 44px; border-radius: 4px; } .btn:active { background-color: #4d69ed !important; } 连接打印机 正在初始化... 未配对蓝牙设备 已配对蓝牙设备 (function() { //连接打印机函数 mui.plusReady(function() { //调用蓝牙搜索 SearchBluetooth.Init(); }); })();

//16进制命令打印

outputStream.write([0x1B,0x40]);//打印复位 outputStream.write([0x1C,0x4C,0x63]);//清除 //outputStream.write([0x1B,0x24,0x00,0x00]);//设置绝对打印位置5mm,80表示00 outputStream.write([0x1D,0x4C,0x2F,0x00]);// //设置左边距0x2F outputStream.write([0x1D,0x77,0x02]);//大小 //outputStream.write(plus.android.invoke("\n", ‘getBytes’, ‘gbk’)); //bytes outputStream.write([0x1B,0x61,0x00]);//居左 outputStream.write([0x1D,0x4C,0x2F,0x00]); var bytes = plus.android.invoke(PrintText, ‘getBytes’, ‘gbk’); outputStream.write(bytes); //bytes outputStream.flush(); outputStream.write([0x1C,0x4C,0x63]);//清除 //outputStream.write([0x1C,0x4C,0x63]);//清除 //outputStream.write([0x1B,0x40]);//打印复位 outputStream.write(plus.android.invoke("\n", ‘getBytes’, ‘gbk’)); //bytes //一维码 //outputStream.write([0x1B,0x61,0x00]);//居左 var barcode= [0x1D,0x6B,0x04];//[0x1D, 0x6B, 0x04]; console.log(barcode); var barcodeContent=“P”+a+“Q”+d+“D”+e; var barcodebyte= plus.android.invoke(a, ‘getBytes’, ‘gbk’); barcode = barcode.concat(barcodebyte);//barcodebyte barcode.push(0x00); console.log(barcode);

outputStream.write(barcode); outputStream.write([0x1C,0x4C,0x63]);//清除 outputStream.write(plus.android.invoke("\n1234456", 'getBytes', 'gbk')); //bytes outputStream.write(plus.android.invoke("\n", 'getBytes', 'gbk')); //bytes outputStream.flush(); outputStream.write([0x1C,0x4C,0x63]);//清除 outputStream.write([0x1D,0x77,0x02]); barcode=null; barcode= [0x1D,0x6B,0x04]; barcode=barcode.concat(plus.android.invoke("Q1500ABCDEFGABCDEF", 'getBytes', 'gbk')); barcode.push(0x00); outputStream.write(barcode); outputStream.flush(); outputStream.write([0x1C,0x4C,0x63]);//清除 outputStream.write(plus.android.invoke("\n箱 号:*12346*\n", 'getBytes', 'gbk')); //bytes outputStream.write(plus.android.invoke("数 量:*12346*\n", 'getBytes', 'gbk')); //bytes outputStream.write(plus.android.invoke("日 期:*12346*\n", 'getBytes', 'gbk')); //bytes outputStream.flush(); //outputStream.write(plus.android.invoke("\n", 'getBytes', 'gbk')); //bytes outputStream.write([0x1C,0x4C,0x63]);//清除 outputStream.write([0x1D,0x77,0x04]);//大小 outputStream.write([0x1C,0x4C,0x63]);//清除 //outputStream.write([0x1B,0x61,0x02]);//居右 //outputStream.write([0x1B,0x24,0x1D,0x80]);//设置绝对打印位置5mm,80表示00 outputStream.write([0x1D,0x5A,0x02]); ////选择QR-CODE条码 outputStream.write([0x1C,0x4C,0x63]);//清除 var QrContent=[0x1B,0x5A,0x00,0x01,0x00];//,0x39,0x00 var Code128StrBytes = plus.android.invoke(barcodeContent, 'getBytes', 'gbk'); var arr=getLowHighByte(Code128StrBytes); QrContent.push(arr[0]); QrContent.push(arr[1]); var SendCode128Bytes = QrContent.concat(Code128StrBytes);//Code128StrBytes outputStream.write(SendCode128Bytes); outputStream.write(plus.android.invoke("\n", 'getBytes', 'gbk')); //bytes outputStream.flush();


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3