java cpcl指令_H5 +蓝牙打印机 CPCL和ESC
@[搜索藍牙打印機函數(shù)]
var SearchBluetooth = function() {
/dom變量定義/
var BluetoothBtn = document.getElementById(“BluetoothBtn”), //最下邊的按鈕
unpairedList = document.getElementById(“unpairedList”), //未配對設(shè)備列表
pairedList = document.getElementById(“pairedList”), //已配對設(shè)備列表
loadImgHtml = ‘’; //加載圖像HTML
/*plus變量定義*/
var main, BluetoothAdapter, BAdapter, IntentFilter, BluetoothDevice, receiver; //有些我也不知道是啥意思-_-!;
/*其他定義*/
var isSearchDevices = false, //是否處于搜索狀態(tài)
savedBleId = localStorage.getItem("bleId"), //緩存的設(shè)備ID
IntervalObj, //定時器對象
BleDeviceObjAry = [], //BleDevice對象數(shù)組
debug = false; //調(diào)試模式
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); //取消監(jiān)聽
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("重新搜索設(shè)備", false);
}
}, 1000);
state = false;
break;
}
}
if(state) {
mui.toast("配對失敗請重新搜索設(shè)備");
self.SetButtonStatus("重新搜索設(shè)備", 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();
}
});
},
//檢測藍牙狀態(tài)
CheckBluetoothState: function() {
var self = this;
if(!BAdapter.isEnabled()) {
plus.nativeUI.confirm("藍牙處于關(guān)閉狀態(tài),是否打開?", function(e) {
if(e.index == 0) {
BAdapter.enable();
}
});
debug && console.log("藍牙處于關(guān)閉狀態(tài),正在打開...");
} else {
self.SearchDevices();
debug && console.log("藍牙處于開啟狀態(tài),準備搜索藍牙設(shè)備...");
}
},
//搜索設(shè)備
SearchDevices: function() {
var self = this;
isSearchDevices = true;
self.SetButtonStatus("正在搜索藍牙設(shè)備...", true);
debug && console.log("開始搜索藍牙設(shè)備...");
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); //注冊監(jiān)聽事件
//監(jiān)聽回調(diào)函數(shù)
function onReceiveFn(context, intent) {
plus.android.importClass(intent); //通過intent實例引入intent類,方便以后的‘.’操作
//開始搜索改變狀態(tài)
intent.getAction() === "android.bluetooth.device.action.FOUND" && (isSearchDevices = true);
//判斷是否搜索結(jié)束
if(intent.getAction() === 'android.bluetooth.adapter.action.DISCOVERY_FINISHED') {
main.unregisterReceiver(receiver); //取消監(jiān)聽
isSearchDevices = false;
BleDeviceObjAry = [];
self.SetButtonStatus("重新搜索設(shè)備", false);
return false;
}
var BleDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE),
bleName = BleDevice.getName(), //設(shè)備名稱
bleId = BleDevice.getAddress(); //設(shè)備mac地址
if(!bleName || !bleId) {
return false;
}
//判斷是否配對
if(BleDevice.getBondState() === bdevice.BOND_BONDED) {
debug && console.log("已配對藍牙設(shè)備:" + bleName + ' ' + bleId);
self.SetpairedListHtml(pairedList, bleName, bleId);
//如果緩存保存的設(shè)備ID和該ID一致則配對
if(savedBleId == bleId) {
BleDevice.createBond();
}
} else {
debug && console.log("未配對藍牙設(shè)備:" + bleName + ' ' + bleId);
BleDeviceObjAry.push(BleDevice);
self.SetpairedListHtml(unpairedList, bleName, bleId);
}
}
},
//設(shè)置設(shè)備列表HTML
SetpairedListHtml: function(parentEl, bleName, bleId) {
var li = document.createElement('li');
li.setAttribute("data-id", bleId);
li.innerHTML = bleName + "" + bleId + "";
parentEl.appendChild(li);
},
//更改按鈕狀態(tài)
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;
// 藍牙服務(wù)與適配 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="數(shù)量:"+d;
var box="訂單號:"+e;
var kfname="圣和堂";
//內(nèi)容
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;
}
//現(xiàn)有的數(shù)組連上后面字符串
function setAddStr(arr,str){
var arr1=stringToByte(str);
for(var i=0;i
arr.push(arr1[i]);
}
return arr;
}
//現(xiàn)有的數(shù)組連上后面字符串 低高位字節(jié)
function setAddLowHighByte(arr,arr1){
var arr2=getLowHighByte(arr1);
arr.push(arr2[0]);
arr.push(arr2[1]);
return arr;
}
//(function($, owner) {
// owner.OutputStream = null;
//
// owner.init = function(BluetoothSocket) {
// owner.OutputStream = BluetoothSocket.getOutputStream();
// plus.android.importClass(owner.OutputStream);
// }
//
// // 設(shè)置字體大小
// owner.SetFontSize = function(n) {
// var font = [0x1D, 0X21, n]
// owner.OutputStream.write(font);
// };
//
// // 打印字符串
// owner.PrintString = function(string) {
// var bytes = plus.android.invoke(string, ‘getBytes’, ‘gbk’);
// owner.OutputStream.write(bytes);
// };
//
// // 重置打印機
// owner.Reset = function() {
// var reset = [0x1B, 0X40];
// owner.OutputStream.write(reset);
// };
//
// // 打印下劃線
// owner.Underline = function() {
// // 下劃線指令
// var underline = [0x1b, 0x2d, 0x01];
// owner.OutputStream.write(underline);
// };
// // 左對齊
// owner.ALIGN_LEFT = function() {
// var align_left = [0x1b, 0x61, 0x00];
// owner.OutputStream.write(align_left);
// };
// // 中間對齊
// owner.ALIGN_CENTER = function() {
// var align_center = [0x1b, 0x61, 0x01];
// owner.OutputStream.write(align_center);
// };
// //加粗BOLD
// owner.BOLD = function() {
// var bold = [0x1b, 0x45, 0x01];
// owner.OutputStream.write(bold);
// };
// //取消加粗BOLD
// owner.BOLD_CANCEL = function() {
// var bold = [0x1d, 0x21, 0x11];
// owner.OutputStream.write(bold);
// };
// // 右對齊
// owner.ALIGN_RIGHT = function() {
// var align_right = [0x1b, 0x61, 0x02];
// owner.OutputStream.write(align_right);
// };
// // 結(jié)束打印
// owner.End = function() {
// owner.OutputStream.flush();
// var end = [0x1d, 0x4c, 0x1f, 0x00];
// owner.OutputStream.write(end);
// };
//
// // 打印圖片(暫不可用)
// owner.Picture = function() {
// var picture = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B, 0x40, 0x1B, 0x33, 0x00];
// // var picture = [0x1B, 0x2A];
// owner.OutputStream.write(picture);
// };
//
// // 切紙(暫不可用)
// owner.CutPage = function() {
// // 發(fā)送切紙指令
// var end = [0x1B, 0x69];
// owner.OutputStream.write(end);
// };
//
// // 條形碼打印(暫不可用)
// owner.PrintBarcode = function(n) {
// var barcode = [0x1D, 0x6B, 65, 5, 11, 12, 3, 6, 23];
// owner.OutputStream.write(barcode);
// };
//}(mui, window.PrintUtil = {}))
//var maxBit=200;每次最多傳200個
//var isContinue=true;
//while(isContinue){
// var count = arrayBuffer.length;
// console.log(count);
// if (count > 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 <= 0x10FFFF) {
bytes.push(((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 <= 0x00FFFF) {
bytes.push(((c >> 12) & 0x0F) | 0xE0);
bytes.push(((c >> 6) & 0x3F) | 0x80);
bytes.push((c & 0x3F) | 0x80);
} else if(c >= 0x000080 && c <= 0x0007FF) {
bytes.push(((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;
}
連接打印機
正在初始化...
未配對藍牙設(shè)備
已配對藍牙設(shè)備
(function() {
//連接打印機函數(shù)
mui.plusReady(function() {
//調(diào)用藍牙搜索
SearchBluetooth.Init();
});
})();
//16進制命令打印
outputStream.write([0x1B,0x40]);//打印復位
outputStream.write([0x1C,0x4C,0x63]);//清除
//outputStream.write([0x1B,0x24,0x00,0x00]);//設(shè)置絕對打印位置5mm,80表示00
outputStream.write([0x1D,0x4C,0x2F,0x00]);設(shè)置左邊距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("數(shù) 量:*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]);//設(shè)置絕對打印位置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();
總結(jié)
以上是生活随笔為你收集整理的java cpcl指令_H5 +蓝牙打印机 CPCL和ESC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python easydict模块的使用
- 下一篇: web3j 操作