Index: ssts-web/src/main/webapp/disinfectsystem/print/print.js =================================================================== diff -u -r28814 -r29119 --- ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 28814) +++ ssts-web/src/main/webapp/disinfectsystem/print/print.js (.../print.js) (revision 29119) @@ -234,6 +234,22 @@ return; } var foreignTousseList = printSummaryObj.foreignTousseList || []; + //LODOP.SET_PRINT_STYLE("ItemType",0); + // 如果设置了paperType为连续纸张,必须设置pageWidth和pageHeight属性 + if(myObj.paperType == '连续纸张'){ + + // 打印的页面对象 + var page = printSummaryObj.pages[printSummaryObj.pageIndex]; + var rows = page.rows; + if(rows != null && rows.length > 0){ + // 表格的总行数 = 物品的行数page.rows + 合计行 + 页脚行 + var linesCount = rows.length + 2; + // rowHeight + 1,因为表格线有占高度 + setContinuousPaperHeight(myObj.pageHeightOfDengFenPaper,myObj.pageWidth,myObj.pageHeight,linesCount,myObj.goodsTable.rowHeight+1,myObj.goodsTable.position[0]); + + } + } + // 打印表头的内容 if (!isObjEmpty(myObj.headerFooter)){ // 设置为页眉页脚模式 @@ -812,6 +828,62 @@ } } +/** + * 设置连续纸的纸张高度。适用于打印发货计划,单据的内容不固定,打印内容的高度不固定的场景。 + * 根据传入的打印表格的行数和行高、表格的上边距,打印纸的高度,动态计算出本次打印占用的纸张的张数及高度。 + * + * pageHeightOfDengFenPaper:等分纸的每页的高度。单位为毫米mm(值为数值,不能包含单位)。 + * 三等分纸,高度为93.1mm;二等分纸,高度为139.7mm;连续纸(没有切割线的纸)的高度设置为0,洗水布属于此类型 + * + * pageWidth:打印纸的宽度 + * pageHeight:打印纸的高度,如果是连续纸,是指打印完毕后的下边距。 + * rowsCount:打印表格的总行数,包括表格的合计行、页脚行 + * rowHeight:表格的行高,值为数值,单位为px + * topOfTable:表格的上边距,值为数值,单位为px。如果为其它,则会报错,程序提示异常信息 + * + */ +function setContinuousPaperHeight(pageHeightOfDengFenPaper,pageWidth,pageHeight,rowsCount,rowHeight,topOfTable){ + + // 如果没有定义每等分纸的高度,则为洗水布,真正的连续纸 + if (isUndefinedOrNull(pageHeightOfDengFenPaper)){ + LODOP.SET_PRINT_PAGESIZE(3,pageWidth,pageHeight,''); + } + else{ + // 计算打印内容的实际高度,设置为固定纸张,高度为占用的等分纸的总高度 + + // 打印内容的实际高度 + var dynamicPageHeight = 0; + + // 页面上打印表格的内容所占的总行数 + if(rowsCount != null ){ + // 表格的高度 = 表格的行数 * 每行的高度 + 表格的上边距 + 页面最上面的不可打印区域高度 + try{ + dynamicPageHeight = rowsCount * rowHeight + parseInt(topOfTable) + 30; + } + catch(e){ + + alert("hmtl表格定义的上边距必须为数值,并且不能加单位。") + return; + + } + // 将纸张的动态高度,由px单位的数值,转换为mm单位的数值 + var dynamicPageHeightInMM = 25.4 * dynamicPageHeight / 96; + + // 计算所占用的等分纸的页数 + var pageCount = Math.ceil(dynamicPageHeightInMM / pageHeightOfDengFenPaper); + // 计算所占用的等分纸的高度 + dynamicPageHeight = pageCount * pageHeightOfDengFenPaper; + } + else{ + alert("打印表格的内容为空!") + } + + // 设置打印纸张的大小,高度为动态计算出来的高度,单位为毫米,必须加上'mm'的单位 + LODOP.SET_PRINT_PAGESIZE(1,pageWidth,dynamicPageHeight + "mm",''); + } +} + + //根据配置的表单打印信息,以及从服务器取到的物品信息数据,打印表单 //@Deprecated,新的打印函数采用Lodop的自动分页以及页眉页脚打印方式 function print(printSummaryObj){ @@ -828,7 +900,21 @@ myObj.customPrint(printSummaryObj); return; } + //LODOP.SET_PRINT_STYLE("ItemType",0); + // 如果设置了paperType为连续纸张,必须设置pageWidth和pageHeight属性 + if(myObj.paperType == '连续纸张'){ + + // 打印的页面对象 + var page = printSummaryObj.pages[printSummaryObj.pageIndex]; + var rows = page.rows; + if(rows != null && rows.length > 0){ + // 表格的总行数 = 物品的行数page.rows + 合计行 + 页脚行 + var linesCount = rows.length + 2; + // rowHeight + 1,因为表格线有占高度 + setContinuousPaperHeight(myObj.pageHeightOfDengFenPaper,myObj.pageWidth,myObj.pageHeight,linesCount,myObj.goodsTable.rowHeight+1,myObj.goodsTable.position[0]); + } + } logPrintTousse(printSummaryObj,printSummaryObj.barcode); // 根据配置过滤掉材料列表里面的一次性物品(后台会返回所有材料和一次性物品) if(!isUndefinedOrNull(printSummaryObj.materials)){ @@ -3354,7 +3440,7 @@ tableHtml += ""; tableHtml += ""; - tableHtml += ""; + tableHtml += ""; tableHtml += "规格:"+specification; tableHtml += "
"; tableHtml += "
"+barcode;