轉載http://hi.baidu.com/zyb512/blog/item/e9cf70441ce0984a500ffe79.html
1.利用組件把報表的內容生成WORD文檔或者是Excel文檔,導出以后利用Office自帶的打印功能進行打印
2.在網頁上利用javascript或者是其他基於javascript和其他語言的組建
下面詳細介紹這兩種方法
1.生成word或者是Excel文檔,當要打印的區域內容為文本的時候適合導出為Word文檔來處理,當要打印的內容為表格的時候適合導出為Excel文檔,在JSP中可以利用Jxl,jacob,POI等組建進行office文檔的處理,個人推薦使用POI,這個組件是由apache基金開發維護的,其在開源領域的地位無可置疑。這個組件的使用方法不再詳細介紹,再它的幫助文檔上面有詳細的使用方法和示例代碼。可以滿足各種基本的開發需要。
2.采用javascript或者打印組件的方法就更多了,下面簡單介紹幾種方案並給出其中一個方案的詳細代碼
a.用純javascript代碼:
這種方法就是簡單的調用window.open()方法,這中方法的功效等同於用IE的打印功能,將對整個頁面所見的內容進行全部的打印,而且會自動打印出頁眉頁腳。
b.修改注冊項,和其它針對某一種瀏覽器的解決方案
這種方法的原理基本上都是進入客戶端系統的注冊表,把里面的某些IE選項進行修改,例如屏蔽或者是修改頁眉頁腳等自定義的打印方方案,這種反感的弊端是非常明顯的,首先要在網頁上修改注冊表項需要再客戶端降低瀏覽器的安全性設置,這將給客戶的計算機帶來很大的風險,而且這些方法都是在注冊表中找到瀏覽器的位置然后進行操作,這就將處理局限為某一種或者是幾種瀏覽器,而且也將客戶端的操作系統局限為Windows
c.第三方的插件
采用第三方的插件,例如ScriptX,WebPrint等,這也第三方的原理基本上同 b 方案相同,也有的是采用純javascript代碼進行封裝,但是采用這種插件就需要客戶端在打印的時候安裝插件,同樣需要降低客戶端的安全設置,如果有防火牆或者是殺毒軟件的影響將不能起到作用,而且這種方案的運行速度很成問題,加載插件的處理嚴重影響運行速度,不過這種方案的打印效果倒是非常理想的
d.折衷方案
采用WebBrowser和javascript和CSS結合起來
打印指定區域
在頁面上顯示 打印 打印預覽 頁面設置 按鈕 ,用來對打印進行設置,這樣可以去掉頁眉頁腳
在javascript中采用CSS控制隱藏不想打印的內容
下面是詳細的代碼(注:由於利用javascript里面構造新頁面,所以構造代碼連在一起,否則javascript解釋錯 誤):
<html> <head> <script language="javascript"> function printme() { var print = this.document.getElementById("print").innerHTML; print = print +"<br/>" print = print +'<SCRIPT language=javascript> function printView(){hidden();document.all.WebBrowser.ExecWB(7,1); } function print(){hidden();document.all.WebBrowser.ExecWB(6,6)}function pageSetup(){hidden();document.all.WebBrowser.ExecWB(8,1);}function hidden(){document.all("printView").style.display="none"; document.all("print").style.display="none"; document.all("pageSetup").style.display="none";}<\/script>'; print = print + "<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=21 id=WebBrowser width=87></OBJECT> <input id=printView name=Button onClick=printView() type=button value=打印預覽> <input id = print name=Button onClick=print() type=button value=直接打印> <input id = pageSetup name=Button onClick= pageSetup() type=button value=頁面設置>"; var newWindow = window.open(); newWindow.document.open("text/html"); newWindow.document.write(print); newWindow.document.close(); } </script> </head> <body> <span id='print'>把要打印的內容放這里</span> <p>所有內容</p> <a href="javascript:printme()" target="_self">打印</a> </body> </html>
代碼解釋: 把要打印的內容放在 id為print 的區域內在 printme函數中把 要輸出的內容放入一個新的也頁面,在新頁面里面進行打印的處理,在新頁面里面用WebBrowser對象進行打印的處理,用css控制隱藏不想打印的內容。