C-lodop打印控件 實現批量打印

Lodop是什麼? 官網鏈接

  • 有人說她是Web打印控件,因爲她能打印、在瀏覽器中以插件的形式出現,用簡單一行語句就把整個網頁打印出來;
  • 有人說她是打印編程接口,因爲她介於瀏覽器和打印設備之間,是個通道和橋樑,幾乎能想到的打印控制事項都能做到;
  • 有人說她是JavaScript的擴展,因爲她所有功能就那麼幾個語句,和JS語法一樣,一看就明白個究竟;
  • 有人說她是報表打印工具,因爲那個add_print_table語句把報表統計的那點事弄了個明明白白;
  • 有人說她是條碼打印工具,因爲用了她再也不用後臺生成條碼圖片了,前端一行指令就動態輸出清晰準確的條碼,一維二維都行;
  • 有人說她是圖表打印工具,因爲用她能輸出幾乎能想象的任何圖表,雖然沒那麼豪華,但什麼餅圖、折線圖、柱圖甚至複合圖等等都不在話下;
  • 有人說她是個小玩意,因爲她體積太小了,才2M多,她所包含的其中任何一個對照工具都是她的好幾倍(例如條碼打印控件、圖表控件等);
  • 有人說她是套打教案,因爲以Lodop+JS實現套打這種模式,在網上已被吵吵爲教科書般的解決方案;
  • 有人說她是Web打印控件的“終結者”,因爲接觸“她”後再不想別的“她”;
  • 有人說她就是一個Web編程小工具,因爲有了她,在BS下的打印終於像cs下那種隨意而高效了;
  • 但我們說,她是全國1000多家軟件公司的智慧結晶,誕生10年了,幾乎每個功能細節都蘊藏着無數開發者的期待和汗水;
  • 她就是Lodop(讀音“勞道譜”),沒有別的名稱,她是web開發的必選伴侶;
  • 現在,她又添了個小兄弟,名叫C-Lodop(可編程的雲打印),未來將由他開創.....

官網中有很多例子 不再贅述

Lodop打印控件批量打印的方式:
1.批量打印每頁內容相同的:
(1)批量打印相同內容的很多紙張,可以設置打印份數,把該內容打印出多份。
2.批量打印每頁不同內容的:
(1)通過在一個任務中分頁,循環添加頁數,每頁添加不同內容,一個任務中打印多頁。
(2)一個任務中一頁,循環多個任務,每個任務添加不同內容。
(3)多任務與多頁相結合,既分頁又分任務,循環多任務,每個任務中循環多頁。

使用建議:
1.批量打印同樣的內容,可用多份,需要多少份打印多少份。
2.批量打印不同內容,頁數很少,每頁內容也很少,需要預覽,可在一個任務中分多頁。
3.批量打印不同內容,頁數很少,不需要預覽,直接打印,可一個任務分頁,也可一頁分多任務,均可。
4.批量打印大批量不同內容,內容多,頁數很多,建議分頁分任務,分組打印,提高打印性能。

打印過多頁,不拆分任務,打印成百上千複雜頁面,會導致需要等待一段時間,例如點語句後可能很久纔出現預覽界面。
打印上千上萬個任務,任務太多,對操作系統負擔大,可酌情分頁,分頁分任務進行折中處理。

簡單來說,就是相同內容,可設份數。
不同內容,可多任務,可任務中分頁,可多任務+分頁進行組合分組。

批量多任務打印的時候,如果都是相同的模版,可以用同一個Lodop任務名,如果擔心打印機隊列裏都是統一名稱,無法區分,可用語句控制,爲每個任務取不同的打印機隊列名,方法可查看本博客的相關博文:

LODOP循環多任務 同模版只設置不同隊列任務名

Lodop打印語句最基本結構介紹(什麼是一個任務)
Lodop中的一個任務,就是從PRINT_INIT(或PRINT_INITA)初始化到PRINT(或預覽等),是一個任務。

方法:
設置打印份數:
LODOP.SET_PRINT_COPIES(4);//設置打印三份
LODOP.SET_PRINT_COPIES(document.getElementById('T6').value);//設置打印名爲T6文本框裏輸入的值的份數。

設置一個任務分多頁,沒頁內容不同:
初始化//任務開始
for (設置循環)

分頁語句
根據循環添加不同打印項
}
打印(或預覽)//任務結束

設置多個任務,循環多任務: 
for (設置循環)

初始化//任務開始
根據循環添加不同打印項
打印(或預覽)//任務結束
}

設置分頁分任務,分組打印,
for (設置循環)

初始化//任務開始
for (設置循環)

分頁語句
根據循環添加不同打印項
}
打印(或預覽)//任務結束
}

例如,如下四個方法代碼,實現打印四張:
第一個把相同的內容打印四份
第二個一個任務打印四頁
第三個打印四個任務
第四個,打印兩個任務,每個任務兩頁,共打印四頁。

具體演示會代碼:

當中的console.log是由於分2頁爲一個任務,打印兩個任務,需要確定數組下標是0,1,2,3,所以加了個console.log查看一下循環中每次i+j的值是否是否正確。

<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="text" id="T6" size="2" value="4" name="copies">
<a href="javascript:prn1_preview()">預覽打印多份一樣的內容</a><br>
<a href="javascript:prn1_preview2()">預覽打印多頁</a><br>
<a href="javascript:prn1_preview3()">直接打印多任務</a><br>
<a href="javascript:prn1_preview4()">直接打印分頁分任務 分組打印</a>
<script language="javascript" type="text/javascript">   
        var LODOP; //聲明爲全局變量 
    function prn1_preview() {//批量打印相同內容可以用份數
        LODOP=getLodop(); 
        LODOP.PRINT_INIT("");
        LODOP.SET_PRINT_PAGESIZE(1,300,500,""); 
        LODOP.SET_PRINT_COPIES(document.getElementById('T6').value);
        LODOP.ADD_PRINT_TEXT(75,6,100,20,"一個文本");
        //LODOP.PRINT_DESIGN();
        LODOP.PREVIEW();    
    };
    function prn1_preview2() {    //一個任務中循環多頁,每頁內容不同
         LODOP=getLodop();  
          var wenben=["一號文本","二號文本","三號文本","四號文本"];
         LODOP.PRINT_INIT("");//初始化在循環外
         LODOP.SET_PRINT_PAGESIZE(1,300,500,"");
         for (i=0;i<wenben.length;i++)
      {  
         LODOP.NewPage();
         LODOP.ADD_PRINT_TEXT(75,6,100,20,wenben[i]);
      }
        //LODOP.PRINT_DESIGN();
        LODOP.PREVIEW();
    };
    function prn1_preview3() {    //循環多個任務,每個任務內容不同
         LODOP=getLodop();  
         var wenben=["一號文本","二號文本","三號文本","四號文本"];
          for (i=0;i<wenben.length;i++)
      {  
        LODOP.PRINT_INIT("");//初始化在循環中
        LODOP.SET_PRINT_PAGESIZE(1,300,500,"");
        LODOP.ADD_PRINT_TEXT(75,6,100,20,wenben[i]);   
        LODOP.PRINT(); 
   }
    };
   function prn1_preview4() {    //循環多個任務,任務中循環頁數,分頁分任務
         LODOP=getLodop();  
         var wenben=["一號文本","二號文本","三號文本","四號文本"];
          for (i=0;i<4;i=i+2)
      {  
        LODOP.PRINT_INIT("");//初始化在外循環中
        LODOP.SET_PRINT_PAGESIZE(1,300,500,"");
               for (j=0;j<2;j++)
             {   
             console.log(i+j);
             LODOP.ADD_PRINT_TEXT(75,6,100,20,wenben[i+j]);
             LODOP.NewPage();              
             }  
        //LODOP.PRINT_DESIGN(); 
        LODOP.PRINT(); 
   }
    };
</script> 
</body>

 

簡單點描述,就是循環多頁,在任務中循環頁數;循環多任務,直接循環多任務。

數據和頁數過多,需要分頁分任務,分組打印,提高性能。

注意,批量打印建議用直接打印,如果用預覽,lodop會彈出多次,c-lodop會提示窗口已打開。

 

官網給出的事例如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<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>

<h2><font color="#009999">超多頁打印演示:</font></h2>

<p>&nbsp;&nbsp;&nbsp; 當打印頁數超級多(上千頁)時,如果用單頁循環打印,會因爲在操作系統中產生太多的</p>  

<p>打印任務而影響性能;如果用NewPage分頁方式打印,則會因爲一次性佔用太多的系統資源而</p>
<p>需要等待很長時間...</p>

<p>&nbsp;&nbsp;&nbsp;   
解決問題的辦法是採用折中處理,既分組完成,每組完成一部分,循環執行組打印。</p>

<p>下面演示一組打印預覽10頁,分50組循環實現500頁的學位證書套打:</p>

<p>(在分組打印模板中,需要用ADD_PRINT_TEXTA函數,爲每一個對象起個類名)</p>

<p>&nbsp; <font size="2"><input type="button" value="打印維護(模板)" onClick=" MySetup()">   
<input type="button" value="打印預覽(10頁)" onClick="MyPREVIEW()"> 
<input type="button" value="批量打印500頁" onClick="MyPrint()"></font>      
</p>
<p><a href="PrintSampIndex.html">&lt;&lt;回樣例目錄</a></p>
<script language="javascript" type="text/javascript"> 
	var LODOP; //聲明爲全局變量
	function MySetup() {	
			LODOP=getLodop();  
			LODOP.PRINT_INIT("中文學位證書打印");
			LODOP.SET_PRINT_PAGESIZE(1,2970,2100,"");
			LODOP.SET_PRINT_STYLE("FontSize",16);
			LODOP.SET_PRINT_STYLE("Bold",1);
			CreateOnePage("姓名","男","");			
			LODOP.PRINT_SETUP();
	};
	function MyPREVIEW() {	
  			LODOP=getLodop();  
			LODOP.PRINT_INIT("中文學位證書打印");
			LODOP.SET_PRINT_PAGESIZE(1,2970,2100,"");
			LODOP.SET_PRINT_STYLE("FontSize",16);
			LODOP.SET_PRINT_STYLE("Bold",1);	
			for (j = 1; j <=10; j++) {
				CreateOnePage("姓名"+j,"男",j);			
			};		
			LODOP.SET_PREVIEW_WINDOW(0,0,0,0,0,"");			
			LODOP.PREVIEW();
	};	
	function MyPrint() {	
		LODOP=getLodop();  
		if(!confirm("下面的演示會產生大量的實際打印操作,確定繼續嗎?")) return;
		for (i = 1; i <=50; i++) {
			LODOP.PRINT_INIT("中文學位證書打印");
			LODOP.SET_PRINT_PAGESIZE(1,2970,2100,"");
			LODOP.SET_PRINT_STYLE("FontSize",16);
			LODOP.SET_PRINT_STYLE("Bold",1);		
			for (j = 1; j <=10; j++) {
				CreateOnePage("姓名"+i+j,"男",""+i+j);			
			};	
			LODOP.SET_PRINT_MODE("CUSTOM_TASK_NAME","中文學位證書打印"+i);//爲每個打印單獨設置任務名	
			LODOP.PRINT();
		};
	};	
	function CreateOnePage(XM,XB,BH){	
		LODOP.NewPage();
		LODOP.ADD_PRINT_TEXTA("text01",67,132,137,35,XM);
		LODOP.SET_PRINT_STYLEA(0,"Alignment",3);
		LODOP.ADD_PRINT_TEXTA("text02",67,280,40,35,XB);
		LODOP.ADD_PRINT_TEXTA("text03",67,329,70,35,"1979");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",3);
		LODOP.ADD_PRINT_TEXTA("text04",67,421,50,35,"09");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text05",67,489,40,35,"09");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text06",223,220,76,35,"理學");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text07",121,130,332,35,"應用物理與微電子技術");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text08",271,482,34,35,"校");
		LODOP.ADD_PRINT_TEXTA("text09",271,616,32,35,"長");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",3);
		LODOP.ADD_PRINT_TEXTA("text10",300,131,289,35,"合肥工業大學");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text11",364,210,261,35,"103700002009000"+BH);
		LODOP.ADD_PRINT_TEXTA("text12",365,753,66,35,"2009");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
		LODOP.ADD_PRINT_TEXTA("text13",365,843,37,35,"12");
		LODOP.ADD_PRINT_TEXTA("text14",365,911,54,35,"31");
		LODOP.SET_PRINT_STYLEA(0,"Alignment",2);
	};	
</script> 
</body>
</html>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章