做過(guò)很多的Web項(xiàng)目,,大多數(shù)在打印頁(yè)面內(nèi)容的時(shí)候,,采用的都是通過(guò)Javascript調(diào)用系統(tǒng)內(nèi)置的打印方法進(jìn)行打印,也就是調(diào)用 PrintControl.ExecWB(?,?)實(shí)現(xiàn)直接打印和打印預(yù)覽功能,。
打印的效果及控制性雖然不是很好,,但是也能勉強(qiáng)使用,應(yīng)付一般的打印還是 可以的了,。
代碼如下所示: 代碼 代碼如下: //調(diào)用PrintControl.ExecWB(?,?)實(shí)現(xiàn)直接打印和打印預(yù)覽功能,。(直接用系統(tǒng)提供的print()方法打印無(wú)法隱藏某些區(qū)域) //preview:是否顯示預(yù)覽。null/false:不顯示,,true:顯示 function printPage(preview) { try { var content=window.document.body.innerHTML; var oricontent=content; while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'"); if(content.indexOf("ID="PrintControl"")<0) content=content+"<OBJECT ID="PrintControl" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>"; window.document.body.innerHTML=content; //PrintControl.ExecWB(7,1)打印預(yù)覽,,(1,1)打開(kāi),(4,1)另存為,,(17,1)全選,,(10,1)屬性,(6,1)打印,,(6,6)直接打印,,(8,1)頁(yè)面設(shè)置 if(preview==null||preview==false) PrintControl.ExecWB(6,1); else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1 window.document.body.innerHTML=oricontent; } catch(ex){ alert("執(zhí)行Javascript腳本出錯(cuò),。"); } } function printConten(preview, html) { try { var content=html; var oricontent=window.document.body.innerHTML; while(content.indexOf("{$printhide}")>=0) content=content.replace("{$printhide}","style='display:none'"); if(content.indexOf("ID="PrintControl"")<0) content=content+"<OBJECT ID="PrintControl" WIDTH=0 HEIGHT=0 CLASSID="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"></OBJECT>"; window.document.body.innerHTML=content; //PrintControl.ExecWB(7,1)打印預(yù)覽,(1,1)打開(kāi),,(4,1)另存為,,(17,1)全選,(10,1)屬性,,(6,1)打印,,(6,6)直接打印,(8,1)頁(yè)面設(shè)置 if(preview==null||preview==false) PrintControl.ExecWB(6,1); else PrintControl.ExecWB(7,1); //OLECMDID_PRINT=7; OLECMDEXECOPT_DONTPROMPTUSER=6/OLECMDEXECOPT_PROMPTUSER=1 window.document.body.innerHTML=oricontent; } catch(ex){ alert("執(zhí)行Javascript腳本出錯(cuò),。"); } } 上面兩個(gè)函數(shù)放在一個(gè)Js文件中,,在頁(yè)面內(nèi)容中通過(guò)應(yīng)用該腳本文件并調(diào)用進(jìn)一步封裝的函數(shù)即可打印指定部分的內(nèi)容: 代碼如下: <script language="javascript"> function Print(preview) { var text = document.getElementById("content").innerHTML; printConten(preview, text); } 打印的效果大致如下圖所示,如果打印的頁(yè)面在框架頁(yè)面中,,那么需要選定“僅打印選定框架”的選項(xiàng),。 采用此種方法,不需要安裝任何控件,,具有很好的兼容優(yōu)勢(shì),不過(guò)出來(lái)的報(bào)表內(nèi)容,,好像控制起來(lái)會(huì)比較麻煩一些,,特別對(duì)于一些報(bào)表方面的打印,需要輸出復(fù)雜的內(nèi)容是,,也有一定的缺陷,,但總體來(lái)說(shuō),也是一個(gè)較好的選擇,。 后來(lái)在需要做一些證件套打方面的工作,,這個(gè)控件就做不到了,因此需要一種方法或者控件,,能夠較好處理套打方面的事情,。 無(wú)意間,發(fā)現(xiàn)一個(gè)比較好的打印控件,,支持各種格式的打印,,還有我關(guān)心的證件套打功能,功能強(qiáng)大,,使用也很簡(jiǎn)單的,,非常值得推薦。 控件的相關(guān)地址: 控件下載 http://www.jb51.net/codes/23956.html 控件博客介紹:http://blog.sina.com.cn/s/articlelist_1340389911_0_1.html
應(yīng)用這個(gè)控件,,普通報(bào)表的打印效果如下所示:
上面兩個(gè)報(bào)表的打印其實(shí)都差不多,,都是打印部分的HTML內(nèi)容,不過(guò)后者看起來(lái)要好一點(diǎn),,而且提供很完善的報(bào)表功能設(shè)置,。 代碼大致如下所示,。 如果給打印內(nèi)容設(shè)置了樣式,,那么出來(lái)的界面效果就好很多了,。
|
|
來(lái)自: 悟靜 > 《.net和asp.net》