還是WebBrowser,列印設定及JavaScript代碼

來源:互聯網
上載者:User

標籤:

  1 使用了IE內建的WebBrowser控制項,無需使用者下載和安裝。WebBrowser有很多功能,除列印外的其他功能就不再贅述了,你所能用到的列印功能也幾乎全部可以靠它完成,下面的問題就是如何使用它了。先說顯示後列印,後面說後台列印。  2   3 1.首先引入一個WebBrowser在需要列印的頁面,可以直接添加:   4    5 <object id="WebBrowser" classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height="0" width="0">   6 </object>   7   8 到頁面,或者使用JavaScript在需要的時候臨時添加也可以:  9  10 document.body.insertAdjacentHTML("beforeEnd", 11     "<object id=\"WebBrowser\" width=0 height=0  12 classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\">"); 13  14 2 .版面設定和預覽列印 15  16 如下所示,直接調用即可 17 document.all.WebBrowser.ExecWB(6,6)   直接列印 18 document.all.WebBrowser.ExecWB(8,1)   版面設定 19 document.all.WebBrowser.ExecWB(7,1)   預覽列印 20  21 或者: 22  23 execScript("document.all.WebBrowser.ExecWB 7, 1","VBScript");  24  25 3 隱藏不列印的頁面元素和分頁 26  CSS 有個Media 屬性,可以分開設定列印和顯示的格式。 27 如 <style media="print" type="text/css"> …</style> 中間的格式將只在列印時起作用,不會影響顯示介面。 28 所以可以設定 29 <style media="print" type="text/css">  30 .Noprint{display:none;}  31 .PageNext{page-break-after: always;}  32 </style>  33 然後給不想列印的頁面元素添加: class="Noprint" ,那就不會出現在列印和預覽列印中了。 34 想分頁的地方添加:  <div class="PageNext"></div> 就可以了。 35  36 4.列印頁面的特定部分 37  38 我是通過將需要列印的特定部分另建一個頁面,然後裝入首頁面的一個IFrame中,再調用IFrame的列印方法,只列印IFrame中的內容實現的。 39 如: 40 <iframe style="visibility: visible" name="FrameId" width="100%" height="30%" src="NeedPrintedPage.asp"></iframe> 41 下面的pringFrame  js函數將只列印Iframe中的內容,可以直接引用使用,如printFrame(FrameId); 42  43  44 window.print = printFrame; 45 // main stuff 46 function printFrame(frame, onfinish) { 47   if ( !frame ) frame = window; 48   function execOnFinish() { 49     switch ( typeof(onfinish) ) { 50       case "string": execScript(onfinish); break; 51       case "function": onfinish(); 52     } 53     if ( focused && !focused.disabled ) focused.focus(); 54   } 55   if (( frame.document.readyState !== "complete") &&( !frame.document.confirm("The document to print is not downloaded yet! Continue with printing?") )) 56   { 57     execOnFinish(); 58     return; 59   } 60   61   var eventScope = printGetEventScope(frame); 62   var focused = document.activeElement; 63   64   window.printHelper = function() { 65     execScript("on error resume next: printWB.ExecWB 6, 1", "VBScript"); 66     printFireEvent(frame, eventScope, "onafterprint"); 67     printWB.outerHTML = ""; 68     execOnFinish(); 69     window.printHelper = null; 70   } 71   72   document.body.insertAdjacentHTML("beforeEnd", 73     "<object id=\"printWB\" width=0 height=0  74     classid=\"clsid:8856F961-340A-11D0-A96B-00C04FD705A2\">"); 75   76   printFireEvent(frame, eventScope, "onbeforeprint"); 77   frame.focus(); 78   window.printHelper = printHelper; 79   setTimeout("window.printHelper()", 0); 80 } 81  82 // helpers 83 function printIsNativeSupport() { 84   var agent = window.navigator.userAgent; 85   var i = agent.indexOf("MSIE ")+5; 86   return parseInt(agent.substr(i)) >= 5 && agent.indexOf("5.0b1") < 0; 87 } 88 function printFireEvent(frame, obj, name) { 89   var handler = obj[name]; 90   switch ( typeof(handler) ) { 91     case "string": frame.execScript(handler); break; 92     case "function": handler(); 93   } 94 } 95 function printGetEventScope(frame) { 96   var frameset = frame.document.all.tags("FRAMESET"); 97   if ( frameset.length ) return frameset[0]; 98   return frame.document.body; 99 }100 101 Iframe中所裝載頁面的列印效果在所裝載版面設定就可以了,如分頁等。102 103 5.後台列印104 105 我是通過建一個隱藏Iframe實現的,當然仍然會有頁面裝載的過程。106 下面的函數建立Iframe裝載頁面並列印。如 printHidden(url)  //url為頁面地址107 108 function printHidden(url) {109   document.body.insertAdjacentHTML("beforeEnd",110     "<iframe name=printHiddenFrame width=0 height=0></iframe>");111   var doc = printHiddenFrame.document;112   doc.open();113   doc.write("<body onload=\"parent.onprintHiddenFrame()\">");114   doc.write("<iframe name=printMe width=0 height=0 src=\"" + 115       url + "\"></iframe>");116   doc.write("</body>");117   doc.close();118 }119 function onprintHiddenFrame() {120   function onfinish() {121     printHiddenFrame.outerHTML = "";122     if ( window.onprintcomplete ) window.onprintcomplete();123   }124   printFrame(printHiddenFrame.printMe, onfinish);125 }126 127 它用到了printFrame,所以別忘了引用前面的函數。

 

還是WebBrowser,列印設定及JavaScript代碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.