/** * @description 接收到打印的队列数组编译模板字符后打印 * @param {array} arr 处理的数组 * @param {string} ip ip地址 * @param {Number} port //端口号 * @default 清空打印机缓存+打印黑度+宽+高+8位码Utf-8+速度+打印张数复印张数 * @default `N\r\n` +`H8\r\n` + `q560\r\n` + `Q480,35\r\n` + `I8,U,001\r\n` +`S3\r\n` + `W1,1\r\n` * @author A-K * @uniPlatform { * "app": { * "android": { * "osVer": "8.0", * "uniVer": "√", * "unixVer": "3.9.0" * }, * "ios": { * "osVer": "0", * "uniVer": "×", * "unixVer": "3.9.0" * } * } * } * @tutorial [多甘范科夫斯基]https://blog.csdn.net/qq_33920944/article/details/144281614?sharetype=blogdetail&sharerId=144281614&sharerefer=PC&sharesource=qq_33920944&spm=1011.2480.3001.8118 */ // 样式调整demo export const queue = async (arr, ip, port) => { let jsons = ``; console.log(arr[0]); console.log(arr[1]); console.log(ip); console.log(port); const printArr = arr; console.log(printArr); jsons = "! 0 195 200 472 1\r\n" + // 基础偏移量左移5像素 "PAGE-WIDTH 545\r\n" + // 页面宽度减少5像素 "GAP-SENSE\r\n" + // 外框 - 整体左移5像素 "BOX -3 2 543 470 2\r\n" + // ==================== 物料条码(第一行)==================== "LINE -3 62 425 62 1\r\n" + "T 55 0 8 27 物料条码:\r\n" + // ==================== 物料编码(第二行)==================== "LINE -3 124 543 124 1\r\n" + "T 55 0 8 89 编码:\r\n" + // ==================== 供应商(第三行)==================== "LINE -3 186 543 186 1\r\n" + // 第3条分隔线(间隔62) "T 55 0 8 151 供应商:\r\n" + // ==================== 物料名称(第四行)==================== "LINE -3 248 543 248 1\r\n" + // 第4条分隔线(间隔62) "T 55 0 8 213 名称:\r\n" + // ==================== 规格型号(第五行)==================== "LINE -3 310 543 310 1\r\n" + // 第5条分隔线(间隔62) "T 55 0 8 275 规格:\r\n" + // ==================== 仓库(第六行)==================== "LINE -3 360 543 360 1\r\n" + // 第6条分隔线(移至竖线顶端Y=360) "T 55 0 8 335 仓库:\r\n" + // ==================== 数量和仓管员(第七行)==================== "LINE -3 430 543 430 1\r\n" + // 底部横线(与竖线底端对齐) "T 55 0 8 380 数量:\r\n" + // 文本位置保持 "T 55 0 275 380 仓管员:\r\n" + // 文本位置保持 // 中间竖线分隔(范围Y=360-430,与上下横线衔接) "LINE 265 430 265 360 1\r\n" + // 竖线顶端对齐仓库行分隔线 // ==================== 底部时间信息 ==================== "T 55 0 395 440 打印时间\r\n" + // 位置保持 "T 55 0 8 440 " + new Date().toLocaleString('zh-CN', { // 时间格式改为年月日时分秒 year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' }) + "\r\n" + // ==================== 二维码区域(左移5像素)==================== "BOX 425 3 535 113 1\r\n" + // 位置保持 "B QR 430 8 M 2 U 5\r\n" + // 位置保持 "MA,{zb.物料条码}\r\n" + "ENDQR\r\n" + "FORM\r\n" + "PRINT\r\n"; await printHandle(jsons, ip, port); }; // //正式代码 // export const queue = async (arr, ip, port) => { // try { // const printArr = arr; // 接收传入的打印指令数组 // console.log('当前打印参数:', { // ip, // port // }); // // 循环处理每一条打印指令 // for (const [index, jsons] of printArr.entries()) { // console.log(`正在处理第 ${index + 1} 条打印指令`); // console.debug('打印指令内容:', jsons); // // 执行异步打印操作 // await printHandle( // jsons, // 动态替换文本 // ip, // port // ); // } // } catch (error) { // console.error('打印队列执行出错:', error); // throw error; // 向上抛出错误供调用方处理 // } // }; export const queue111 = async (arr, ip, port) => { let jsons = ``; console.log(arr[0]); console.log(arr[1]); console.log(ip); console.log(port); const printArr = arr; console.log(printArr) printArr.forEach((info) => { console.log("打印一张"); console.log(info); //await printHandle(info, ip, port); //await printHandle(jsons, ip, port); }); // printArr.forEach((info) => { // //以下temp打印模板为pple指令(深圳博思德,支持性一般),指令需要根据实际需要配置 // let temp = `N\r\n` + `H8\r\n` + `q560\r\n` + `Q480,16\r\n` + `I8,U,001\r\n` + `S3\r\n` + // `LO41,140,400,3\r\n` + // `T261,170,0,6,1,1,N," ${info.gw.value} ${info.gw.unit}"\r\n` + // `T195,170,0,6,1,1,N,"${info.gw.cn}:"\r\n` + // `T41,170,0,4,1,1,N,"${info.gw.en}"\r\n` + // `T261,210,0,6,1,1,N," ${info.nw.value} ${info.nw.unit}"\r\n` + // `T195,210,0,6,1,1,N,"${info.nw.cn}:"\r\n` + // `T41,210,0,4,1,1,N,"${info.nw.en}"\r\n` + // `T261,250,0,6,1,1,N," ${info.quantity.value} ${info.quantity.unit}"\r\n` + // `T195,250,0,6,1,1,N,"${info.quantity.cn}:"\r\n` + // `T41,250,0,4,1,1,N,"${info.quantity.en}"\r\n` + // `T261,290,0,6,1,1,N," ${info.dimension.value} ${info.dimension.unit}"\r\n` + // `T195,290,0,6,1,1,N,"${info.dimension.cn}:"\r\n` + // `T41,290,0,4,1,1,N,"${info.dimension.en}"\r\n` + // `LO41,325,400,3\r\n` + // `T41,120,0,3,1,1,N,"S/N: ${info.boxDisPlay}"\r\n` + // `T444,444,0,2,1,1,N,"${info.tag}"\r\n` + // `B41,344,0,1,3,3,100,B,"${info.SOID}"\r\n` + // `W1,1\r\n`; // //arr是数组所以可以连续打印只需要字符拼接 // jsons += temp; // }); // let printCmd = "! 0 400 400 480 1\r\n" + // "PREFEED 0\n\r" + // "POSTFEED 0\n\r" + // "PAGE - WIDTH 640\r\n" + // "GAP-SENSE\r\n" + // "BOX 5 10 620 450 2\r\n" + // "LINE 5 60 620 60 1\r\n" + // 横线1 // "LINE 5 110 620 110 1\r\n" + // 横线2 // "LINE 5 160 620 160 1\r\n" + // 横线3 // "LINE 5 210 620 210 1\r\n" + // 横线4 // "LINE 5 260 620 260 1\r\n" + // 横线5 // "LINE 120 10 120 260 1\r\n" + // 字段名称右侧竖线 // "LINE 240 260 240 450 1\r\n" + // 规格型号左侧竖线 // "LINE 285 210 285 450 1\r\n" + // 规格型号右侧竖线 // "LINE 410 210 410 260 1\r\n" + // 到货日期右侧竖线 // "ENDQR\r\n" + // "FORM\r\n" + // "PRINT\r\n"; // jsons = printCmd; // // jsons = "! 0 200 200 565 1\r\n" + // // //"PREFEED 10\n\r"+//打印之前走纸距离指令 // // //"POSTFEED 19.5\n\r" + //打印之后走纸距离指令 // // "PAGE - WIDTH 400\r\n" + // // "BAR - SENSE\r\n" + // // "BOX 10 10 400 565 2\r\n" + // // "LINE 10 60 400 60 1\r\n" + // // "LINE 10 110 400 110 1\r\n" + // // "LINE 10 160 400 160 1\r\n" + // // "LINE 10 210 400 210 1\r\n" + // // "LINE 10 300 400 310 1\r\n" + // // "LINE 10 350 400 360 1\r\n" + // // "LINE 10 405 190 415 1\r\n" + // // "LINE 10 460 190 470 1\r\n" + // // "LINE 10 515 190 525 1\r\n" + // // // "LINE 10 410 400 410 1\r\n" + // // "LINE 130 10 130 350 1\r\n" + // // "LINE 190 350 190 565 1\r\n" + // // "TEXT 24 0 15 25 " + '条码' + " " + '001' + "\r\n" + //物料条码 // // "TEXT 24 0 15 75 " + '条码' + "\r\n" + //物料名称 // // "TEXT 55 0 140 75 " + '条码' + "\r\n" + //物料名称 // // "TEXT 24 0 15 125 " + '条码' + " " + '001' + "\r\n" + //物料编码 // // "TEXT 24 0 15 175 " + '条码' + " " + '001' + "\r\n" + //图号 // // "TEXT 24 0 15 250 " + '条码' + "\r\n" + // // // "TEXT 24 0 15 325 "+strt6+" " + str6 + "\r\n" + // // "TEXT 24 0 15 315 " + '条码' + " " + '001' + "\r\n" + // // "TEXT 55 0 140 218 " + '条码' + "\r\n" + // // "TEXT 55 0 140 238 " + '条码' + "\r\n" + // // "TEXT 55 0 140 258 " + '条码' + "\r\n" + // // "TEXT 55 0 140 272 " + '条码' + "\r\n" + // // "TEXT 24 0 50 365 " + '001' + "\r\n" + // // "TEXT 24 0 40 420 " + '001' + "\r\n" + // // "TEXT 24 0 50 475 " + '001' + "\r\n" + // // "TEXT 24 0 60 530 " + '001' + "\r\n" + // // "B QR 200 360 M 2 U 9\r\n" + // // "MA," + '001' + "\r\n" + // // "ENDQR\r\n" + // // // "B QR 25 285 M 2 U 4\r\n" + // // // "MA," + str8 + "\r\n" + // // // "ENDQR\r\n" + // // "FORM\r\n" + // // "PRINT\r\n"; // jsons = "! 0 200 200 565 1\r\n" + // //"PREFEED 10\n\r"+//打印之前走纸距离指令 // //"POSTFEED 19.5\n\r" + //打印之后走纸距离指令 // "PAGE - WIDTH 400\r\n" + // "BAR - SENSE\r\n" + // "BOX 10 10 400 565 2\r\n" + // "LINE 10 60 400 60 1\r\n" + // "LINE 10 110 400 110 1\r\n" + // "LINE 10 160 400 160 1\r\n" + // "LINE 10 210 400 210 1\r\n" + // "LINE 10 300 400 310 1\r\n" + // "LINE 10 350 400 360 1\r\n" + // "LINE 10 405 190 415 1\r\n" + // "LINE 10 460 190 470 1\r\n" + // "LINE 10 515 190 525 1\r\n" + // // "LINE 10 410 400 410 1\r\n" + // "LINE 130 10 130 350 1\r\n" + // "LINE 190 350 190 565 1\r\n" + // "TEXT 24 0 15 25 " + '条码' + " " + '001' + "\r\n" + //物料条码 // "TEXT 24 0 15 75 " + '条码' + "\r\n" + //物料名称 // "TEXT 55 0 140 75 " + '条码' + "\r\n" + //物料名称 // "TEXT 24 0 15 125 " + '条码' + " " + '001' + "\r\n" + //物料编码 // "TEXT 24 0 15 175 " + '条码' + " " + '001' + "\r\n" + //图号 // "TEXT 24 0 15 250 " + '条码' + "\r\n" + // // "TEXT 24 0 15 325 "+strt6+" " + str6 + "\r\n" + // "TEXT 24 0 15 315 " + '条码' + " " + '001' + "\r\n" + // "TEXT 55 0 140 218 " + '条码' + "\r\n" + // "TEXT 55 0 140 238 " + '条码' + "\r\n" + // "TEXT 55 0 140 258 " + '条码' + "\r\n" + // "TEXT 55 0 140 272 " + '条码' + "\r\n" + // "TEXT 24 0 50 365 " + '001' + "\r\n" + // "TEXT 24 0 40 420 " + '001' + "\r\n" + // "TEXT 24 0 50 475 " + '001' + "\r\n" + // "TEXT 24 0 60 530 " + '001' + "\r\n" + // "B QR 200 360 M 2 U 9\r\n" + // "MA," + '001' + "\r\n" + // "ENDQR\r\n" + // // "B QR 25 285 M 2 U 4\r\n" + // // "MA," + str8 + "\r\n" + // // "ENDQR\r\n" + // "FORM\r\n" + // "PRINT\r\n"; // await printHandle(jsons, ip, port); }; /** * @description Java类调用安卓连接打印机 仅在安卓设备下使用 * @param {string} jsons 模板字符 * @param {string} ip ip地址 * @param {Number} port //端口号 */ /* export const printHandle = async (jsons, ip, port) => { return new Promise((resolve, reject) => { try { var Socket = plus.android.importClass('java.net.Socket'); var PrintWriter = plus.android.importClass('java.io.PrintWriter'); var BufferedWriter = plus.android.importClass('java.io.BufferedWriter'); var OutputStreamWriter = plus.android.importClass('java.io.OutputStreamWriter'); var BufferedReader = plus.android.importClass('java.io.BufferedReader'); var InputStreamReader = plus.android.importClass('java.io.InputStreamReader'); var StrictMode = plus.android.importClass('android.os.StrictMode'); var Build = plus.android.importClass('android.os.Build'); // const ip = '192.168.1.61'; // const port = 9100; // 安卓9后完全打开构建权限 if (Build.VERSION.SDK_INT > 9) { var policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); } var socket = new Socket(`${ip}`, port * 1); console.log(`返回isocket:`, socket); socket.setSoTimeout(5000); // 增加超时时间 var inputStreamReader = new InputStreamReader(socket.getInputStream()); var socketReader = new BufferedReader(inputStreamReader); var outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), 'GBK'); var bufferWriter = new BufferedWriter(outputStreamWriter); var socketWriter = new PrintWriter(bufferWriter, true); socketWriter.println(jsons); var msgBeReceived = socketReader.readLine(); console.log(`返回ip:`, ip); console.log(`返回port:`, port); console.log(`返回内容:`, msgBeReceived); resolve(msgBeReceived); } catch (error) { console.error("打印失败", error); reject(error); } finally { if (socket) { socket.close(); } } }); }; */ export const printHandle = async (jsons, ip, port) => { var mac_address = uni.getStorageSync('printMac'); console.log('打印开始:'+mac_address) var device = null, BAdapter = null, BluetoothAdapter = null, uuid = null, main = null, bluetoothSocket = null; if (!mac_address) { this.$showMessage('请选择蓝牙打印机'); return false; } main = plus.android.runtimeMainActivity(); BluetoothAdapter = plus.android.importClass("android.bluetooth.BluetoothAdapter"); let UUID = plus.android.importClass("java.util.UUID"); uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); BAdapter = BluetoothAdapter.getDefaultAdapter(); device = BAdapter.getRemoteDevice(mac_address); plus.android.importClass(device); bluetoothSocket = device.createInsecureRfcommSocketToServiceRecord(uuid); plus.android.importClass(bluetoothSocket); if (!bluetoothSocket.isConnected()) { console.log('检测到设备未连接,尝试连接....'); bluetoothSocket.connect(); } console.log('设备已连接'); if (bluetoothSocket.isConnected()) { var outputStream = bluetoothSocket.getOutputStream(); plus.android.importClass(outputStream); let printStr =jsons; var bytes = plus.android.invoke(printStr, 'getBytes', 'gbk'); outputStream.write(bytes); outputStream.flush(); device = null //这里关键 bluetoothSocket.close(); //必须关闭蓝牙连接否则意外断开的话打印错误 //this.$showMessage('OK'); console.log("打印机连接状态:111"); return true; } else { //this.$showMessage('NG'); console.log("打印机连接状态:222"); return false; } };