轻松用Lodop实现批量打印功能

批量打印功能在软件系统里是一项基础功能,常用于大批量打印各种单据。本经验分享为利用优秀的打印控件Lodop批量打印的解决方案。

本经验分享基于Lodop打印控件,文中说到的相关专业名词和函数均能在Lodop技术手册文档中找到。

Lodop(标音:劳道谱,俗称:露肚皮)是web开发的必选伴侣,它能使BS下的打印像CS下那样随意而高效。

当打印页数超级多(上千页)时,如果用单页循环打印,会因为在操作系统中产生太多的打印任务而影响性能;

如果用NewPage分页方式打印,则会因为一次性占用太多的系统资源而需要等待很长时间...

解决问题的办法是采用折中处理,既分组完成,每组完成一部分,循环执行组打印。

打印效果预览

打印维护(模板)
打印维护(模板)

 

打印预览
打印预览

代码演示

下面演示一组打印预览10页,分70组循环实现700页的学位证书套打:

(在分组打印模板中,需要用ADD_PRINT_TEXTA函数,为每一个对象起个类名)

HTML代码

  1. <script language="javascript" src="LodopFuncs.js"></script>
  2. <input type="button" value="打印维护(模板)" onClick=" MySetup()">    
  3. <input type="button" value="打印预览(10页)" onClick="MyPREVIEW()">  
  4. <input type="button" value="批量打印700页" onClick="MyPrint()"> 

JS代码

  1. var LODOP; //声明为全局变量 
  2. function MySetup() {     
  3.         LODOP=getLodop();   
  4.         LODOP.PRINT_INIT("中文学位证书打印"); 
  5.         LODOP.SET_PRINT_PAGESIZE(1,2970,2100,""); 
  6.         LODOP.SET_PRINT_STYLE("FontSize",16); 
  7.         LODOP.SET_PRINT_STYLE("Bold",1); 
  8.         CreateOnePage("姓名","男","");          
  9.         LODOP.PRINT_SETUP(); 
  10. }; 
  11. function MyPREVIEW() {   
  12.         LODOP=getLodop();   
  13.         LODOP.PRINT_INIT("中文学位证书打印"); 
  14.         LODOP.SET_PRINT_PAGESIZE(1,2970,2100,""); 
  15.         LODOP.SET_PRINT_STYLE("FontSize",16); 
  16.         LODOP.SET_PRINT_STYLE("Bold",1);     
  17.         for (j = 1; j <=10; j++) { 
  18.             CreateOnePage("姓名"+j,"男",j);             
  19.         };       
  20.         LODOP.SET_PREVIEW_WINDOW(0,0,0,0,0,"");          
  21.         LODOP.PREVIEW(); 
  22. };   
  23. function MyPrint() {     
  24.     LODOP=getLodop();   
  25.     if(!confirm("下面的演示会产生大量的实际打印操作,确定继续吗?")) return
  26.     for (i = 1; i <=70; i++) { 
  27.         LODOP.PRINT_INIT("中文学位证书打印"); 
  28.         LODOP.SET_PRINT_PAGESIZE(1,2970,2100,""); 
  29.         LODOP.SET_PRINT_STYLE("FontSize",16); 
  30.         LODOP.SET_PRINT_STYLE("Bold",1);         
  31.         for (j = 1; j <=10; j++) { 
  32.             CreateOnePage("姓名"+i+j,"男",""+i+j);          
  33.         };   
  34.         LODOP.SET_PRINT_MODE("CUSTOM_TASK_NAME","中文学位证书打印"+i);//为每个打印单独设置任务名     
  35.         LODOP.PRINT(); 
  36.     }; 
  37. };   
  38. function CreateOnePage(XM,XB,BH){    
  39.     LODOP.NewPage(); 
  40.     LODOP.ADD_PRINT_TEXTA("text01",67,132,137,35,XM); 
  41.     LODOP.SET_PRINT_STYLEA(0,"Alignment",3); 
  42.     LODOP.ADD_PRINT_TEXTA("text02",67,280,40,35,XB); 
  43.     LODOP.ADD_PRINT_TEXTA("text03",67,329,70,35,"1979"); 
  44.     LODOP.SET_PRINT_STYLEA(0,"Alignment",3); 
  45.     LODOP.ADD_PRINT_TEXTA("text04",67,421,50,35,"09"); 
  46.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  47.     LODOP.ADD_PRINT_TEXTA("text05",67,489,40,35,"09"); 
  48.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  49.     LODOP.ADD_PRINT_TEXTA("text06",223,220,76,35,"理学"); 
  50.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  51.     LODOP.ADD_PRINT_TEXTA("text07",121,130,332,35,"应用物理与微电子技术"); 
  52.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  53.     LODOP.ADD_PRINT_TEXTA("text08",271,482,34,35,"校"); 
  54.     LODOP.ADD_PRINT_TEXTA("text09",271,616,32,35,"长"); 
  55.     LODOP.SET_PRINT_STYLEA(0,"Alignment",3); 
  56.     LODOP.ADD_PRINT_TEXTA("text10",300,131,289,35,"合肥工业大学"); 
  57.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  58.     LODOP.ADD_PRINT_TEXTA("text11",364,210,261,35,"103700002009000"+BH); 
  59.     LODOP.ADD_PRINT_TEXTA("text12",365,753,66,35,"2009"); 
  60.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  61.     LODOP.ADD_PRINT_TEXTA("text13",365,843,37,35,"12"); 
  62.     LODOP.ADD_PRINT_TEXTA("text14",365,911,54,35,"31"); 
  63.     LODOP.SET_PRINT_STYLEA(0,"Alignment",2); 
  64. }; 

语法注释

名称:增加纯文本打印项

格式:ADD_PRINT_TEXT(Top,Left,Width,Height,strContent)

功能:增加纯文本打印项,设定该打印项在纸张内的位置和区域大小,文本内容在该区域内自动折行,当内容超出区域高度时,如果对象被设为“多页文档”则会自动分页继续打印,否则内容被截取

 

名称:增加纯文本打印项(扩展型)

格式:ADD_PRINT_TEXTA(strItemName,Top,Left,Width,Height,strContent)

功能:增加纯文本打印项,设定该打印项在纸张内的位置和区域大小,文本内容在该区域内自动折行,当内容超出区域高度时,如果对象被设为“多页文档”则会自动分页继续打印,否则内容被截取

说明:功能同函数ADD_PRINT_TEXT,strItemName所增纯文本打印项的项目名,字符型,未限制长度。打印项序号比较难以控制时,用本函数。

 

名称:设置打印项风格A,继承SET_PRINT_STYLE的所有属性(扩展型)

格式:SET_PRINT_STYLEA(varItemNameID, strStyleName,varStyleValue)

功能:类似函数SET_PRINT_ STYLE的功能,二者的区别是本函数只对单个打印项有效。

参数说明:varItemNameID:要设置的目标项序号或项目名,数字型或字符型。

  • 数字型时,表示是序号,以其增加的先后自然顺序为准,从1开始,所有打印对象都参与排序,包括超文本、纯文本、图片、图线、图表、条码等。
  • 如果序号为0,代表当前(最后加入的那个)数据项;如果序号是负数,代表前面加入的数据项,该值为前移个数偏移量。
  • 字符型时,是对象的类名或代表部分对象的关键字。

关键字有如下几种:

  • Selected-代表在设计界面上用鼠标所选的所有对象;
  • unSelected-代表在设计界面上所有没有被鼠标选择的对象;
  • All-代表所有正常对象;
  • First-代表第一个正常对象;
  • Last-代表最后一个正常对象;

不是关键字的字符一般是类名,类名可以在ADD_PRINT_TEXTA加入纯文本时用strItemName来声明,也可以在设计界面用菜单功能(Set TEXT Item Name)来设置。

strStyleName:打印风格名。此处风格“Alignment”(设定纯文本打印项的内容左右靠齐方式)

varStyleValue:打印风格值。此处风格值“2”(1--左对齐、2--居中、3--右对齐,缺省值1)

 

名称:设置打印模式

格式:SET_PRINT_MODE(strModeType,varModeValue)

功能:设置人工双面打印模式等。

参数说明:strModeType:模式类型名。此处类型名“CUSTOM_TASK_NAME”:设置本次输出的打印任务名(打印任务池里的“文档名”)

varModeValue:模式类型值,整数或字符型。此处类型值为字符型,可以是汉字,未限制长度,本设置比PRINT_INIT或PRINT_INITA函数设置的打印任务名优先级高,如此以来可以实现在同一套配置文件下起多个打印任务名,以利于按打印任务名管理的输出。

 

注意:以上参数描述仅针对本经验分享到的代码作为说明,实际上,Lodop打印控件的函数其参数非常丰富,欲一睹Lodop打印控件的强大请大家参考官方手册详细说明!

 

相关经验

导读书签
书签初始化中…