web打印,web打印控件的三種實現方法javascript
作管理系統的時候,打印一直是個棘手的問題,作B/S的系統這個問題就更加突出了!下面舉出三種經常使用的web打印處理方式
一、利用word或者excel來實現web打印(若是不修改ie設置,能夠在web服務器端生成xls文件,而後經過xlBook = xls.Workbooks.Open(remotePath) 獲取對象打印)
實現過程:先將須要打印的數據導入到word或者excel中,再利用word或者excel的打印功能來實現web打印。
下面以excel爲例實現如何打印的過程
將網頁中數據導入excel中的方法有不少,這裏先介紹一種,利用ActiveX控件的方式,即 Excel.Application, 這個控件是MS爲excel提供的編程接口,在不少種編程語言種均可以經過該接口來操縱excel表格。
下面用javascript腳原本實現一個簡單的例子。
< script language="javascript">css
function ExcelPrint(){html
var excelApp;//存放Excel對象java
var excelBook;//存放Excel工件簿文件程序員
var excelSheet;//存放Excel活動工做表web
try{編程
excelApp = new ActiveXObject("Excel. Application");//建立Excel對象}瀏覽器
catch(e){安全
alert("請啓用ActiveX控件設置!");服務器
return;}
excelBook = excelApp.Workbooks.Add();//建立Excel工做簿文件
excelSheet = excelBook.ActiveSheet;//激活Excel工做表
var rowLen = printTable.rows.length;//table對象的行數
for (var i=0;i< rowLen;i++){
var colLen = printTable.rows(i).cells.length;//table對象的列數
for (var j=0;j< colLen;j++)//爲Excel表的單元格賦值
excelSheet.Cells(i+1,j+1).value = printTable.rows(i).cells(j).innerText;} //將表格中的每一個單元格的innerText導入到excel的單元格中
excelApp.Visible = true;//設置Excel對象可見}
excelSheet.PrintOut(); //打印工做表
excelBook.Close(true); //關閉文檔
excelApp.Quit(); //結束excel對象
excelApp=null; //釋放excel對象
< /script>
注意:
運行該程序的前提是 IE要容許對沒有標記爲安全的Activex控件進行初始化和腳本運行。設置方法以下:
打開控制面板→Internet選項→安全性→自定義級別→對沒有標記爲安全的ActiveX控件進行初始化和腳本運行→選中啓用,這樣咱們的程序就能夠運行了。若是沒有啓用該ActiveX控件設置,那麼程序在執行建立Excel對象時會拋出一個異常,這時能夠經過catch()語句來捕獲這個異常,而且作出相應的處理。
運行該程序必須客戶端安裝了MS EXCEL,不然Activex驅動不了。
二、利用瀏覽器自帶的打印控件來實現web打印
實現過程:直接調用IE的打印功能或者在程序中調用window.print()來實現web打印,頁眉和頁腳會有網頁標題、頁碼、網址,日期等信息,這些打印時若是不須要,怎樣能去掉呢。作法其實很簡單,只有在IE的文件菜單中打開頁碼設置對話框,去掉頁眉頁腳中設置的哪些信息,就能夠了。可是這須要每一個客戶端都去手動設置一次。若是不想讓每一個客戶端都手動去設置一次,也能夠用代碼經過修改註冊表的鍵值來實現。
下面是用VBScript來實現的修改註冊表的過程:
< script language="VBScript">
dim path, reg
'path存放IE打印設置的註冊表地址, reg存放WScript.Shell組件的對象
path = "HKEY_CURRENT_USER\Software\Micro-soft\Internet Explorer\PageSetup"
'經過註冊表修改打印設置,只修改頁眉、頁腳和各邊界的值
'參數說明:header--頁眉,footer--頁腳,margin_left--左邊界
'margin_top--上邊界,margin_right--右邊界,margin_bottom--下邊界
'頁邊距的設置中 1對應25.4mm,即margin_left=1表示實際值的25.4mm
function pagesetup(header, footer, margin_left, margin_top, margin_right, margin_bottom)
On Error Resume Next
Set reg = CreateObject("WScript.Shell")
if err.Number>0 then
MsgBox "不能建立WScript.Shell對象!"
exit function
end if
reg.RegWrite path+"\header", header'設置頁眉
reg.RegWrite path+"\footer", footer '設置頁腳
reg.RegWrite path+"\margin_left", margin_left'設置左邊界
reg.RegWrite path+"\margin_top", margin_top'設置上邊界
reg.RegWrite path+"\margin_right", margin_right'設置右邊界
reg.RegWrite path+"\margin_bottom", margin_bottom'設置下邊界
end function
< /script>
還有一點須要注意的是,利用window.print()這樣的方法來打印,是直接彈出打印對話框,而不是打印預覽的窗口。通常來講用戶但願先打印預覽一下,而後再打印。或者有的格式固定的,每次都是同樣的格式,就但願不彈出打印對話框,直接就打印出來。
還有的用戶但願每一個打印都是直接和一種紙張綁定好,打印時候直接就調用那種類型的紙張來打印,這樣window.print()顯然遠遠不夠。
三、利用第三方的控件或者報表軟件來實現web打印
實現過程:第三方控件將打印的參數和方法封裝成對象,在頁面中能夠方便的直接調用,例如ScriptX.cab,eprint.cab 都是這種類型的控件。能夠直接用代碼實現web打印頁眉頁腳的設置,web打印紙張的綁定,web打印邊距的設置,web打印預覽,直接web打印。
web打印格式設置,web打印分頁,web打印換頁從新打印某些信息,某些信息只能第一頁打印,某些信息只能最後一頁打印等等這些,也都解決方案。Scriptx沒有處理這些的方案,webprint有webgrid和eprint兩種解決方案,行列規則的表格式的能夠簡單webgrid來處理,複雜格式的能夠用eprint來設計格式。
通常這種類型的打印控件都是須要收費的,用戶能夠從經濟的角度來考慮。
==========================================================================================================
1、 瀏覽器的打印功能菜單
這種方案的優點是不須要對瀏覽器做任何擴充,是最簡單的辦法,但問題也最多,如:
|
2、 使用webbrowser控件+ javascript
這實際上,是瀏覽器打印功能菜單的一種程序調用,與打印功能菜單沒什麼兩樣。分頁的問題仍然存在,只不過,可讓用戶不用去點菜單,直接在網頁中的一個按鈕,或一個連接裏面調用罷了。
3、 使用print css
這是一種最理想的實現web套打的方法。這種方法經過在html文檔中,嵌入打印相關的css樣式,來實現對html文檔輸出打印的控制,好比設置紙張大小,紙張縱橫方向,打印邊距,分頁等。顯而易見,這種方式成本小,不須要下載任何插件,並且跨平臺性很是好。print css推出已經有些時日,但遺憾的是,至今沒有一個廠商的瀏覽器很好地實現了這些標準,這使得程序員目前還不能利用print css進行實際的開發。關於打印css,參見:
http://css-discuss.incutio.com/?page=PrintStylesheets
4、 使用pdf文件
用這種方式,就是從服務器端下載一個pdf文件流,在IE中用adobe插件打開,而後用adobe的打印菜單進行打印,雖然這種方案,也能實現精確套打,但須要下載adobe插件。這是國外報表工具常常推薦的一種打印方法,但在pdf不那麼普及的中國,這種方案不是最好選擇。
5、 採用純ActiveX
這種方案就是下載一個控件,票據的數據再也不以html方式呈現,而是呈如今ActiveX中。這種方案的優勢是打印的精確度高,分頁的可控性好,但缺點也是很明顯的,嵌入ActiveX控件破壞了web應用的總體html風格,且這樣的控件比較大(通常超過1M,下載頗費時間)。市場上的非java類報表產品,通常都採用這種方案。
6、 採用Applet方式
採用Applet方式,分頁或精確打印,均可以作到完美,但缺點也很明顯,表如今:
|
7、 輕量級的ActiveX打印方式
這是本公司應客戶要求,最新推出的一種最具創意的web套打解決方案。
傑表做爲一款純java的報表工具,之前提供的web套打方案也是基於Applet的,Applet也作到了儘量的小(只有24kb),但用戶仍是抱怨,由於jre太大,安裝須要耐心。另外,用Applet方式,很難實現客戶端的批量打印功能。