LODOP一个任务多列,只打一列如何维护
打印维护是针对整个任务进行维护的,打印多少个打印项就要维护多少个打印项,维护了多少打印项,就要打印多少内容。
但是打印的时候不需要打印其他列,可以把其他列的数值传入空置,add_print_text纯文本空值的时候背景又是透明的,和不存在差不多。
不能通过判断等方法,只加载需要的打印项,不需要的打印项不加载,因为这样就和维护的打印项个数不同了,如果打印项不设置项目类名之类的,维护是根据的打印项的序号,因为打印项个数不同,所以维护的序号也就不同。
例如本文我测了一下,打印维护用的是四个打印项,而实际打印或预览,是通过判断的两个打印项,然后通过打印维护把每列的第二个打印项移动位置。
最后再通过实际打印或预览,如果是第一列,打印项显示正常,是维护后的,但是到第二列之后,第二个打印项的位置就不正常了,这是因为打印维护根据的是序号进行维护和修改的。
如本文的图示,在打印维护中,第二个打印项就是A002的位置被维护了,所以打印维护根据任务名记忆,记忆了第二个打印项修改后的位置,而当选择第二列是,第二个打印项的位置还会跑到A002的位置,但是实际需要的是它在B002的位置。
位置根据序号到不该在位置,这就是维护的打印项个数和预览或打印个数不同会造成的现象。
如该文中测试的,现象就是两列,维护完后,打印的时候只能是第一列是正常维护的,第二列经过维护的都会跑到第一列去,因为在任务中的序号已经改变了。
测试代码(错误测试演示代码,请勿使用,请参考本博客下方的另一份代码):
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>WEB打印控件LODOP</title> <script language="javascript" src="LodopFuncs.js"></script> </head> <!--打印或预览个数 和 打印维护不同,错误演示--> <body> <input type="radio" id="r1" name="r" checked>打第一列<br> <input type="radio" id="r2" name="r">打第二列<br> <a href="javascript:prn0_preview()">打印预览(维护个数和打印不同)</a><br> <a href="javascript:prn1_preview()">打印维护(维护个数和打印不同)</a><br> <script language="javascript" type="text/javascript"> var LODOP; //声明为全局变量 function prn0_preview() {//错的演示,请勿使用 LODOP=getLodop(); LODOP.PRINT_INITA(0,0,"100mm","100mm","某两列内容打一列"); LODOP.SET_PRINT_PAGESIZE(1,1000,1000,""); LODOP.ADD_PRINT_SETUP_BKIMG("<img src='bg.png'>"); LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",true); if(document.getElementById("r1").checked) { LODOP.ADD_PRINT_TEXT(128,54,100,20,"A001"); LODOP.ADD_PRINT_TEXT(196,56,100,20,"A002");} else{ LODOP.ADD_PRINT_TEXT(128,209,100,20,"B001"); LODOP.ADD_PRINT_TEXT(193,217,100,20,"B002");} LODOP.PREVIEW(); }; function prn1_preview() {//错的演示,请勿使用 LODOP=getLodop(); LODOP.PRINT_INITA(0,0,"100mm","100mm","某两列内容打一列"); LODOP.SET_PRINT_PAGESIZE(1,1000,1000,""); LODOP.ADD_PRINT_SETUP_BKIMG("<img src='bg.png'>"); LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",true); LODOP.ADD_PRINT_TEXT(128,54,100,20,"A001"); LODOP.ADD_PRINT_TEXT(196,56,100,20,"A002"); LODOP.ADD_PRINT_TEXT(128,209,100,20,"B001"); LODOP.ADD_PRINT_TEXT(193,217,100,20,"B002"); LODOP.PRINT_SETUP(); }; </script> </body>
图示:(错误测试样式代码 )后面的bg是用PS做的一个背景图,一般套打都是根据背景图套打的。
正确维护的代码(打印项个数与维护个数一致,序号一致)
function prn0_preview() {// LODOP=getLodop(); LODOP.PRINT_INITA(0,0,"100mm","100mm","某两列内容打一列2"); LODOP.SET_PRINT_PAGESIZE(1,1000,1000,""); LODOP.ADD_PRINT_SETUP_BKIMG("<img src='bg.png'>"); LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",true); if(document.getElementById("r1").checked) { LODOP.ADD_PRINT_TEXT(128,54,100,20,"A001"); LODOP.ADD_PRINT_TEXT(196,56,100,20,"A002"); LODOP.ADD_PRINT_TEXT(128,209,100,20,"");//传入空置 LODOP.ADD_PRINT_TEXT(193,217,100,20,"");//传入空置 } else{ LODOP.ADD_PRINT_TEXT(128,54,100,20,"");//传入空置 LODOP.ADD_PRINT_TEXT(196,56,100,20,"");//传入空置 LODOP.ADD_PRINT_TEXT(128,209,100,20,"B001"); LODOP.ADD_PRINT_TEXT(193,217,100,20,"B002"); } LODOP.PREVIEW(); };
图示: