WeWin标签打印机
浏览量:加载中...
关于wewin品牌打印机调用 支持批量打印

WeWin 打印机使用
11. 先按插件 [官网文档](https://soft-makeid.yuque.com/wwprint/api) 上面有 22. 跑官网上 demo 测试打印机联通 33. 根据打印内容设计打印模板建议以下步骤:1、code 文件设置模板预览代码 可写死数据 2、在浏览器调用看是否调起 2、再设计代码打印模板 也就是浏览器调起后选择打印会出现的预览界面 也就是打印界面(如果未出现建议调整参数 我也是这么过来的~) 44. 设置标签高宽度 变大可以向上调整完整 如果参数设置小的话就会偏下
code 文件配置设置
1/** 2 * 导出版本:v1.0 3 * 导出时间:6/29/2021, 8:57:28 AM 4 */ 5 6//初始化WewinPrintService API 7var wps = typeof require !== 'undefined' ? require("./labelimage/static/WewinPrintService")() : WewinPrintService(); 8window.wewin = wps; 9wps.fontname = "黑体"; 10 11//修改-标签预览 12wps.PageViewPrint = function () { 13 wps.StartPreviewTag( 14 { 15 title: "重庆品胜 - 资管打印 - 打印预览", 16 version: "v2.0.9", 17 }, 18 function (i) { 19 var labelType = wps.ParseElement(i, "EntityTypeId"); 20 var Texts = wps.ParseElement(i, "Text"); 21 22 if (labelType[0] == "1001") { 23 // 注册标签模板名称及编号 24 wps.SetLabelName({ 25 "P50-70": "0", 26 }); 27 28 var selValue = wps.GetLabelName(); 29 30 if (selValue == "0") { 31 // 只允许 WEWIN H50 打印机打印 32 wps.SetPrintInfo("WEWIN H50"); 33 34 // 定死的预览数据,格式为“字段名:字段值” 35 var fixedTexts = [ 36 "设备名称:设备A", 37 "备注:无" 38 ]; 39 40 var leftX = 10; //左侧字段偏移 41 var rightX = 36; // 右侧字段值适当右移 42 var startY =0; // 起始Y坐标 43 var lineGap = 16; // 行间距适中 44 var fontSize = 4.2; // 字体大小 45 var underlineStr = "________________________"; // 统一长度 46 47 for (var idx = 0; idx < fixedTexts.length; idx++) { 48 var text = fixedTexts[idx]; 49 var parts = text.split(":"); 50 var fieldLabel = parts[0] + ":"; 51 var fieldValue = parts[1] || ""; 52 53 var y = startY + idx * lineGap; 54 55 // 左侧字段名,右对齐 56 wps.AddPreviewText({ 57 str: [fieldLabel], 58 fontHeight: fontSize, 59 printWidth: 120, // 适当加宽,保证右对齐有效 60 x: leftX, 61 y: y, 62 maxH: 16.0, 63 xoffset: 0.25, 64 loffset: 0.13, 65 horizontal: wps.horizontal.right, // 右对齐 66 vertical: wps.vertical.center, 67 rotate: false, 68 rotateLowIE: { x: 0, y: 0 }, 69 debug: false 70 }); 71 72 // 右侧字段值,左对齐 73 wps.AddPreviewText({ 74 str: [fieldValue], 75 fontHeight: fontSize, 76 printWidth: 80, 77 x: rightX, 78 y: y, 79 maxH: 16.0, 80 xoffset: 0.25, 81 loffset: 0.13, 82 horizontal: wps.horizontal.left, // 保持左对齐 83 vertical: wps.vertical.center, 84 rotate: false, 85 rotateLowIE: { x: 0, y: 0 }, 86 debug: false 87 }); 88 89 90 // 右侧字段下划线(只画一次,紧贴字段值下方) 91 wps.AddPreviewText({ 92 str: [underlineStr], 93 fontHeight: 3.2, 94 printWidth: 50, 95 x: rightX, 96 y: y + fontSize + 1, // 紧贴字段值下方 97 maxH: 16.0, 98 xoffset: 0.25, 99 loffset: 0.13, 100 horizontal: wps.horizontal.left, 101 vertical: wps.vertical.center, 102 rotate: false, 103 rotateLowIE: { x: 0, y: 0 }, 104 debug: false 105 }); 106 } 107 } 108 } 109 }, 110 function (i) { 111 var labelType = wps.ParseElement(i, "EntityTypeId"); 112 var Codes = wps.ParseElement(i, "Code"); 113 var selValue = wps.GetLabelName(); 114 115 if (labelType[0] == "1001") { 116 if (selValue == 0) { 117 var printTexts = Codes.slice(0, 1); 118 wps.GenerateQrcode({ 119 qrcodeName: ".qrcode" + i + "1", 120 str: printTexts[0], 121 width: 21, 122 height: 21, 123 }); 124 } 125 } 126 } 127 ); 128}; 129//修改-标签打印 130wps.PageDoLabelPrint = function () { 131 132 //开始调用标签打印函数 133 wps.StartPrintTag(function (i) { 134 135 //解析数据 136 //EntityTypeId节点 137 var labelType = wps.ParseElement(i, "EntityTypeId"); 138 //Text节点 139 var Texts = wps.ParseElement(i, "Text"); 140 // 标签1(1001) 141 if (labelType[0] == '1001') { 142 wps.SetPrintFunc(i, print_tag1001, [Texts]); 143 } 144 }); 145 146} 147function print_tag1001(Texts) { 148 var selValue = wps.GetLabelName(); 149 150 var label = new wps.Label(); 151 label.labelWidth = 100 // 标签高度 152 label.labelHeight = 80; // 标签宽度 153 label.rotate = wps.rotate.rotate90; // 横向打印 154 if (selValue == 0) { 155 wps.StartTag(label); 156 var leftX = 2; // 左侧字段名X坐标,整体向中间偏移 157 var rightX = 24; // 右侧字段值X坐标,整体向中间偏移 158 var startY = 0; // 起始Y坐标 159 var lineGap = 9; // 行间距 160 var fontSize = 4; // 字体大小 161 var underlineLength = 24; // 下划线长度 162 var labelWidth = 33; 163 164 for (var idx = 0; idx < Texts.length; idx++) { 165 var text = Texts[idx] || ""; 166 var parts = text.split(":"); 167 var fieldLabel = parts[0] + ":"; 168 var fieldValue = parts.length > 1 ? parts.slice(1).join(":") : ""; 169 170 var y = startY + idx * lineGap; 171 172 // 左侧字段名,写死宽度和位置 173 var leftText = new wps.TextBlock(); 174 leftText.str = [fieldLabel]; 175 leftText.x = leftX; // 固定左侧X坐标 176 leftText.y = y; 177 leftText.fontName = "Courier New"; 178 leftText.fontWeight = 200; 179 leftText.fontHeight = fontSize; // 固定字体大小 180 leftText.printWidth = 38; // 固定区域宽度 181 leftText.maxH = 16.0; 182 leftText.xoffset = 0.25; 183 leftText.loffset = 0.13; 184 leftText.rotate = wps.rotate.rotate0; 185 leftText.horizontal = wps.horizontal.left; 186 leftText.vertical = wps.vertical.center; 187 wps.PrintText(leftText); 188 189 // 右侧字段值,写死宽度和位置 190 var rightText = new wps.TextBlock(); 191 rightText.str = [fieldValue]; 192 rightText.x = rightX; // 固定右侧X坐标 193 rightText.y = y; 194 rightText.fontName = "Courier New"; 195 leftText.fontWeight = 200; 196 rightText.fontHeight = fontSize; 197 rightText.printWidth = 120; // 固定宽度,避免撑开 198 rightText.maxH = 16.0; 199 rightText.xoffset = 0.25; 200 rightText.loffset = 0.13; 201 rightText.rotate = wps.rotate.rotate0; 202 rightText.horizontal = wps.horizontal.left; 203 rightText.vertical = wps.vertical.center; 204 wps.PrintText(rightText); 205 206 // 右侧下划线,写死宽度和位置 207 var underlineStr = "__________________________________"; 208 var underlineText = new wps.TextBlock(); 209 underlineText.str = [underlineStr]; 210 underlineText.x = rightX; 211 underlineText.y = y + 7; 212 underlineText.fontHeight = 3.0; 213 underlineText.printWidth = 60; 214 underlineText.horizontal = wps.horizontal.left; 215 underlineText.vertical = wps.vertical.center; 216 underlineText.rotate = wps.rotate.rotate0; 217 wps.PrintText(underlineText); 218 } 219 wps.EndTag(); 220 } 221}
封装 XML 打印体
1// 里面标明使用1001模板 2function safeText(value) { 3 return value === '' ? '无' : value; 4} 5 6export default function generatePrintXML(dataList) { 7 var xml = '<Data>'; 8 for (var i = 0; i < dataList.length; i++) { 9 var data = dataList[i]; 10 xml += '<Print><EntityTypeId>1001</EntityTypeId>'; 11 if (data.name != null) { 12 xml += '<Text>' + distributeLabel('设备名称') + ':' + safeText(data.name) + '</Text>'; 13 } 14 if (data.remark != null) { 15 xml += '<Text>' + distributeLabel('备注') + ':' + safeText(data.remark) + '</Text>'; 16 } 17 xml += '</Print>'; 18 } 19 xml += '</Data>'; 20 return xml; 21} 22function distributeLabel(label, maxLen = 5) { 23 const chars = label.split(''); 24 const count = chars.length; 25 if (count >= maxLen) return label; // 5字及以上不处理 26 27 // 计算每个字应该插入的位置 28 // 例如2字:[0, 4],3字:[0, 2, 4],4字:[0, 1, 3, 4] 29 let positions = []; 30 if (count === 1) { 31 positions = [2]; // 居中 32 } else { 33 for (let i = 0; i < count; i++) { 34 // 均匀分布到maxLen-1区间 35 positions.push(Math.round(i * (maxLen - 1) / (count - 1))); 36 } 37 } 38 39 let arr = new Array(maxLen).fill('\u3000'); // 全角空格 40 positions.forEach((pos, idx) => { 41 arr[pos] = chars[idx]; 42 }); 43 return arr.join(''); 44} 45
页面调用 支持批量
根据对象长度决定打印个数
1 var dataList = [ 2 { 3 name: "设备A", 4 remark: "备注1344" 5 }, 6 { 7 name: "设备B", 8 remark: "备注2" 9 } 10 ]; 11 12checkAndPrint(dataList) 13 14function checkAndPrint(dataList) { 15 console.log('标签打印数据:', dataList); 16 if (!Array.isArray(dataList) || dataList.length === 0) { 17 console.error('传入打印的数据必须是非空数组'); 18 return; 19 } 20 const printXML = generatePrintXML(dataList); 21 console.log('printXML===============----', printXML); 22 23 wewin.LabelPrint(printXML, { 24 debug: false,//如果下方为false 即使为true也会不预览 25 modal: false, 26 noView:'H50',//必须modal为false debug为false 这个设置之后才会不预览直接打印 27 alert: false, 28 isToCDATA: false, 29 imgPath: '' 30 }, function (data) { 31 console.log('打印回调:', data); 32 }); 33 34}