web 列印,web列印控制項的三種實現方法

來源:互聯網
上載者:User

http://www.blogjava.net/midstr/archive/2010/06/18/256597.html?opt=admin

web 列印,web列印控制項的三種實現方法 zz

做管理系統的時候,列印一直是個棘手的問題,做B/S的系統這個問題就更加突出了!下面舉出三種常用的web列印處理方式

1、利用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指令碼來實現一個簡單的例子。

function ExcelPrint(){

var excelApp;//存放Excel對象

var excelBook;//存放Excel工件簿檔案

var excelSheet;//存放Excel使用中工作表

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

注意:
運行該程式的前提是 IE要允許對沒有標記為安全的Activex控制項進行初始化和指令碼運行。設定方法如下:
開啟控制台→Internet選項→安全性→自訂層級→對沒有標記為安全的ActiveX控制項進行初始化和指令碼運行→選中啟用,這樣我們的程式就可以運行了。如果沒有啟用該ActiveX控制項設定,那麼程式在執行建立Excel對象時會拋出一個異常,這時可以通過catch()語句來捕獲這個異常,並且做出相應的處理。
運行該程式必須用戶端安裝了MS EXCEL,否則Activex驅動不了。

2、利用瀏覽器內建的列印控制項來實現web列印
實現過程:直接調用IE的列印功能或者在程式中調用window.print()來實現web列印,頁首和頁尾會有網頁標題、頁碼、網址,日期等資訊,這些列印時如果不需要,怎樣能去掉呢。做法其實很簡單,只有在IE的檔案菜單中開啟頁碼設定對話方塊,去掉頁首頁尾中設定的哪些資訊,就可以了。但是這需要每個用戶端都去手動設定一次。如果不想讓每個用戶端都手動去設定一次,也可以用代碼通過修改註冊表的索引值來實現。
下面是用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

還有一點需要注意的是,利用window.print()這樣的方法來列印,是直接彈出列印對話方塊,而不是預覽列印的視窗。一般來說使用者希望先預覽列印一下,然後再列印。或者有的格式固定的,每次都是一樣的格式,就希望不彈出列印對話方塊,直接就列印出來。
還有的使用者希望每個列印都是直接和一種紙張綁定好,列印時候直接就調用那種類型的紙張來列印,這樣window.print()顯然遠遠不夠。

3、利用第三方的控制項或者報表軟體來實現web列印
實現過程:第三方控制項將列印的參數和方法封裝成對象,在頁面中可以方便的直接調用,例如ScriptX.cab,eprint.cab 都是這種類型的控制項。可以直接用代碼實現web列印頁首頁尾的設定,web列印紙張的綁定,web列印邊距的設定,web預覽列印,直接web列印。
web列印格式設定,web列印分頁,web列印換頁重新列印某些資訊,某些資訊只能第一頁列印,某些資訊只能最後一頁列印等等這些,也都解決方案。 Scriptx沒有處理這些的方案,webprint有webgrid和eprint兩種解決方案,行列規則的表格式的可以簡單webgrid來處理,複雜格式的可以用eprint來設計格式。

一般這種類型的列印控制項都是需要收費的,使用者可以從經濟的角度來考慮。
==========================================================================================================
一、 瀏覽器的列印功能菜單
這種方案的優勢是不需要對瀏覽器作任何擴充,是最簡單的辦法,但問題也最多,如:

1. 不能精確分頁。
瀏覽器一般是根據使用者佈建的頁面大小,web頁面的內容多少,來自行決定分頁位置,程式員很難控制。會有頁尾頁首幹擾。
2. 不能準確對齊邊邊距及列印文字。
3. 不能解決連續列印。
比如,不是僅列印一張票據,而是連續一次列印若干個票據。

二、 使用webbrowser控制項+ javascript
這實際上,是瀏覽器列印功能菜單的一種程式調用,與列印功能菜單沒什麼兩樣。分頁的問題仍然存在,只不過,可以讓使用者不用去點菜單,直接在網頁中的一個按鈕,或一個連結裡面調用罷了。

三、 使用print css
這是一種最理想的實現web套打的方法。這種方法通過在html文檔中,嵌入列印相關的css樣式,來實現對html文檔輸出列印的控制,比如設定紙張大小,紙張縱橫方向,列印邊距,分頁等。顯而易見,這種方式成本小,不需要下載任何外掛程式,而且跨平台性非常好。print css推出已經有些時日,但遺憾的是,至今沒有一個廠商的瀏覽器很好地實現了這些標準,這使得程式員目前還不能利用print css進行實際的開發。關於列印css,參見:

http://css-discuss.incutio.com/?page=PrintStylesheets

四、 使用pdf檔案
用這種方式,就是從伺服器端下載一個pdf檔案流,在IE中用adobe外掛程式開啟,然後用adobe的列印菜單進行列印,雖然這種方案,也能實現精確套打,但需要下載adobe外掛程式。這是國外報表工具經常推薦的一種列印方法,但在pdf不那麼普及的中國,這種方案不是最好選擇。

五、 採用純ActiveX
這種方案就是下載一個控制項,票據的資料不再以html方式呈現,而是呈現在ActiveX中。這種方案的優點是列印的精確度高,分頁的可控性好,但缺點也是很明顯的,嵌入ActiveX控制項破壞了web應用的整體html風格,且這樣的控制項比較大(一般超過1M,下載頗費時間)。市場上的非java類報表產品,一般都採用這種方案。
六、 採用Applet方式
採用Applet方式,分頁或精確列印,都可以做到完美,但缺點也很明顯,表現在:

1. 安裝Applet成本巨大。需要下載十幾M的檔案。
Applet本身可能並不大,但運行Applet所需的jre一般至少10幾M(jre1.4.2 , 15.45M)。使用者需要極大的耐心,來進行列印。
2. 列印報表時,需要重新向伺服器檢索資料,效率低。
因為Applet方案,一般採用html方式呈現資料,列印時Applet必須向伺服器檢索同一張票據的資料,看上去,是列印了當前頁的票據,實際上,Applet根本不會用當前html頁的資料來列印,而是向伺服器下載資料到Applet中來列印。也就是說,列印的話,必須兩次請求,一次html 呈現,一次用來列印。
市場上java類的報表工具,一般推薦Applet方式來實現列印。

七、 輕量級的ActiveX列印方式
這是本公司應客戶要求,最新推出的一種最具創意的web套打解決方案。
傑表作為一款純java的報表工具,以前提供的web套打方案也是基於Applet的,Applet也做到了儘可能的小(只有24kb),但使用者還是抱怨,因為jre太大,安裝需要耐心。另外,用Applet方式,很難實現用戶端的批量列印功能。
我們採用輕量級的ActiveX列印方案,很好地解決了客戶的問題。以下是一個典型的該種方案的樣本
posted on 2009-02-25 13:44 歲月如歌 閱讀(8709) 評論(11) 編輯 收藏 所屬分類: js

FeedBack:
# re: web列印,web列印控制項的三種實現方法 zz[未登入]
2009-02-25 13:51 | 小白楊
不錯,長見識了。 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-03-13 16:33 | bgrs
國內的 jatoolsPrinter 做得挺不錯。我們項目中在用。 print.jatools.com
回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-04-15 20:12 | interdrp
ReYoPrint (銳洋.列印控制項)是一款實現網頁套打的專用工具。作為web應用開發人員,我們經常會遇到在瀏覽器中列印報表、票據的需求,這些需求瀏覽器本身的列印功能一般不能滿足, 如精確列印,分頁,套打等。這就需要有一種能解決常見的瀏覽器端列印問題的軟體工具,這也是 ReYoPrint 的研發背景。ReYoPrint內含一個在vc7.0上開發的ActiveX控制項(73k), 這個控制項主要實現對列印參數的控制,ReYoPrint使使用者通過JavaScript指令碼可以控制分頁,頁首頁尾,頁面邊界,方向,自訂紙張,直接列印,彈出列印對話方塊再列印,預覽,放縮列印,成批列印,套打等功能

ReYoPrint 的主要功能有:

支援設定列印參數,紙張類型,方向(橫、豎)等 。
支援自訂的頁尾、頁首設定。
支援列印範圍拖拽及滑鼠滾輪放大縮小功能。
支援程式分頁與自動分頁(支援ESC關閉預覽視窗)。
支援預覽列印,支援預覽時指定頁、指定份數列印。
支援直接列印指定票據的URL。
支援票據套打時,底圖僅在預覽列印時顯示,不輸出到印表機。
小巧,整個控制項只有73K,不需要額外的軟體包支援。
與您項目採用的技術標準無關,J2EE、.NET 項目均可。
IE 5.5+ 中適用。
ReYoPrint 的缺點有:

由於控制項是基於WebBroser的所以,目前只支援基於IE的WEB列印。
不支援直接列印時選擇印表機進行列印。 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-04-19 21:00 | llp
web列印的需求總在變,遠不止這些:
一開始人們只希望把網頁內容完整打出來;之後希望列印的內容不要包含頁首頁尾;再之後希望不要總是彈出列印對話方塊,能列印多頁,能分頁;後來希望列印的位置準確點;再後來希望位置能操作調整,調整後的內容能儲存,此後有的希望能列印不顯示的內容;再此後就是顯示是顯示,列印是列印;能列印多個頁面的內容,能只按地址列印,能適應各類瀏覽器...,實際上,這個需求變化的過程就有“網頁瀏覽查看”向“管理系統介面”發展的過程。為什麼列印控制項 lodop一問世就如此流行?方向很重要!控制項要能滿足未知的需求,開發人員才不至於走冤枉路。 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-06-23 10:04 | 找個美女做老婆
好文章,收藏了

Java樂園技術交流,http://www.javaly.cn
2群群號:28840096 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-10-13 10:01 | webprint
北京方成公司的列印外掛程式,很不錯!

使用特別方便,就是一個很小的activex控制項,頁面後,就能使用了

設定頁面邊界,頁首頁尾,橫向,縱向

設定自訂紙張,特定報表綁定特別紙張,指定印表機列印報表

列印url,一次列印多份文檔,列印完成後回調事件等等。

有興趣可以看看 www.fcsoft.com.cn 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2009-11-12 17:10 | 預覽 2010
如果能自己寫一個列印控制項就好了 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2010-01-09 12:35 | exezdl
PAZU -- 4Fang WEB 列印控制項 很不錯! 回複 更多評論

# eee
2010-01-09 12:40 | e
sdreee 回複 更多評論

# re: web列印,web列印控制項的三種實現方法 zz
2010-01-14 10:13 | start
Eloon WebPrint是為滿足不同使用者對WEB單據有不同的列印需求而產生,充分考慮到了使用者的使用習慣,簡單的操作就能定製出理想的列印格式,並且可以把列印格式儲存為XML格式描述文檔,在下次再進入該頁面時,自動載入此格式描述文檔進行列印做業。
Eloon WebPrint把列印格式的控制權交給了使用者,完全解脫軟體開發人員對WEB列印的開發與維護的工作,因此大大加快項目開發進度,為公司節省開發及維護成本。
可以自訂的內容如下:
1. 自訂預設印表機,列印紙型,方向,邊距。
2. 自訂列印頁首資訊。
3. 自訂列印標題。
4. 自訂列印表首資訊。
5. 自訂列印表格輸出的列及列寬、資料對齊、格式化資料、合計項目控制等。
6. 自訂列印表尾資訊。
7. 自訂列印頁尾資訊。

有中文版.有興趣可以看看 www.easywebprint.com

回複 更多評論

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.