function createTemplate(hiprintTemplateMap,dataList,pageWidth,pageHeight){ // A4纸张大小 const { height, width } = { width: pageWidth, height: pageHeight } // 70:小模板的高 105:小模板的宽 // 垂直方向, 可以容纳多少个模板 const ver = parseInt(height / hiprintTemplateMap.panels[0].height); // 水平方向, 可以容纳多少个模板 const hor = parseInt(width / hiprintTemplateMap.panels[0].width); // 新的模板,宽高单位是 mm let template = { panels: [ { type:"auto", index: 0, width, height, paperNumberDisabled:true, // 我们实际需要打印的元素,都存放在这个数组里 printElements: [], }, ], } // 记录整体个数 let limitCount = 0; let size = 0; // top: 记录 打印元素 top值(注意单位); 提示:相当于记录上次填充到哪儿了 for (let v = 1, top = 0; v <= ver; v++) { // left: 记录 打印元素 left值 for (let h = 1, left = 0; h <= hor; h++) { // 这里就需要获取到小模板内的所有打印元素了,然后更新它的定位 // 为了更好理解, 我这里拆分来写 // 获取 模板 的 打印元素 let printElements1 = hiprintTemplateMap.panels[0].printElements; const printElements2 = printElements1.map((items) => { const item = JSON.parse(JSON.stringify(items)) // 偏移量计算 item.options.top += top item.options.left += left // !! 元素的字段名 肯定不能重复呀! 所以需要特殊处理!!! if (item.options.field ) { // 及变成 字段名 + 第 v 行 第 h 列 // 如: qrcode 变成 qrcode_1_1 (第 1 行 的 第 1 列) item.options.field += `_${v}_${h}` } return item; }) //判断总个数是否超过标签数量 if(limitCount= len) { break; } keys.forEach((key) => { panelPrintData[`${key}_${v}_${h}`] = dataList[curIndex][key]; }); curIndex++; } } printData.push(panelPrintData); } return { template, printData } } export {createTemplate}