WEB打印的幾種方案
當前位置:點晴教程→知識管理交流
→『 技術(shù)文檔交流 』
js代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
[p][br][br] -------------------------------------------一 基于web的打印方案比較分析-------------------------------- [br][br] 基于web的套打,難度在于要將瀏覽器中呈現(xiàn)的html,精確地打印到票據(jù)中,而且能夠?qū)崿F(xiàn)對分頁位置的控制。下面就ie瀏覽器所能采用的套打解決方案,來個匯總分析,希望對大家有所幫助。 [br][br] [b]一、瀏覽器的打印功能菜單[/b] [br][br] 這種方案的優(yōu)勢是不需要對瀏覽器作任何擴充,是最簡單的辦法,但問題也最多,如: [br][br] 不能精確分頁。瀏覽器一般是根據(jù)用戶設(shè)置的頁面大小,web頁面的內(nèi)容多少,來自行決定分頁位置,程序員很難控制。會有頁腳頁眉干擾。 [br][br] 不能準確對齊邊邊距及打印文字。 [br][br] 不能解決連續(xù)打印。比如,不是僅打印一張票據(jù),而是連續(xù)一次打印若干個票據(jù)。 [br][br] [b]二、使用webbrowser控件+ javascript[/b] [br][br] 這實際上,是瀏覽器打印功能菜單的一種程序調(diào)用,與打印功能菜單沒什么兩樣。分頁的問題仍然存在,只不過,可以讓用戶不用去點菜單,直接在網(wǎng)頁中的一個按鈕,或一個鏈接里面調(diào)用罷了。 [br][br] [b]三 、使用print css[/b] [br][br] 這是一種最理想的實現(xiàn)web套打的方法。這種方法通過在html文檔中,嵌入打印相關(guān)的css樣式,來實現(xiàn)對html文檔輸出打印的控制,比如設(shè)置紙張大小,紙張縱橫方向,打印邊距,分頁等。顯而易見,這種方式成本小,不需要下載任何插件,而且跨平臺性非常好。print css推出已經(jīng)有些時日,但遺憾的是,至今沒有一個廠商的瀏覽器很好地實現(xiàn)了這些標準,這使得程序員目前還不能利用print css進行實際的開發(fā)。關(guān)于打印css,參見http://css-discuss.incutio.com/?page=printstylesheets [br][br] [b]四 、使用pdf文件[/b] [br][br] 用這種方式,就是從服務(wù)器端下載一個pdf文件流,在ie中用adobe插件打開,然后用adobe的打印菜單進行打印,雖然這種方案,也能實現(xiàn)精確套打,但需要下載adobe插件。這是國外報表工具經(jīng)常推薦的一種打印方法,但在pdf不那么普及的中國,這種方案不是最好選擇。 [br][br] [b]五 、采用純activex[/b] [br][br] 這種方案就是下載一個控件,票據(jù)的數(shù)據(jù)不再以html方式呈現(xiàn),而是呈現(xiàn)在activex中。這種方案的優(yōu)點是打印的精確度高,分頁的可控性好,但缺點也是很明顯的,嵌入activex控件破壞了web應(yīng)用的整體html風(fēng)格,且這樣的控件比較大(一般超過1m),下載頗費時間)。市場上的非java類報表產(chǎn)品,一般都采用這種方案。 [br][br] [b]六 、采用applet方式[/b] [br][br] 采用applet方式,分頁或精確打印,都可以做到完美,但缺點也很明顯,表現(xiàn)在: [br][br] 安裝applet成本巨大。需要下載十幾m的文件。 [br][br] 打印報表時,需要重新向服務(wù)器檢索數(shù)據(jù),效率低。因為applet方案,一般采用html方式呈現(xiàn)數(shù)據(jù),打印時applet必須向服務(wù)器檢索同一張票據(jù)的數(shù)據(jù),看上去,是打印了當前頁的票據(jù),實際上,applet根本不會用當前html頁的數(shù)據(jù)來打印,而是向服務(wù)器下載數(shù)據(jù)到applet中來打印。也就是說,打印的話,必須兩次請求,一次html呈現(xiàn),一次用來打印。 [br][br] 不能解決連續(xù)打印。比如,不是僅打印一張票據(jù),而是連續(xù)一次打印若干個票據(jù)。 [br][br] 不能解決打印機設(shè)置問題,如存在多臺打印機時,總是需要手工選擇,打印到哪一臺打印機。 [br][br] 市場上java類的報表工具,一般推薦applet方式來實現(xiàn)打印。 [br][br] [color=red][b]七 、輕量級的activex打印方式[/b][/color] [br]-----scriptx----- [br] scriptx的免費版本好點,已經(jīng)能滿足大部分的需求. [br]meadco's scriptx控件有兩種使用方式,一種是做為免費版本使用,一種是做為收費版本使用,免費版本支持的功能要少些,不過最重要也是最常用的頁面設(shè)置,它還是提供的,因此使用免費版本即可。不過這兩個版本用的都是同一個cab文件,只不過在代碼設(shè)置中有一些不同。 [br][br]-----pazu (四方)----- [br] pazu 個人或者商業(yè)使用均真正免費授權(quán),無ip或者域名限制。 [br][br] pazu自2009年6月起采用免費的許可,申請時,您必須有確定的ip地址或者域名(主機名),pazu是綁定ip或者域名的,ip或域名尚未確定的我們不能頒發(fā)授權(quán),另外,授權(quán)一經(jīng)頒發(fā)就不能修改綁定。 綁定的ip和域名必須是最終用戶的,所以,最終用戶的應(yīng)用網(wǎng)站必須和4fang網(wǎng)站做好鏈接,否則 pazu會因為無法驗證授權(quán)的合法性而不能正常工作(內(nèi)網(wǎng)應(yīng)用除外)。 [br][br]企業(yè)可以購買開發(fā)集成版(適合項目集成或者產(chǎn)品開發(fā)公司,提供keygen工具,自己生成許可授權(quán),不限制發(fā)行) [br][br][br]-----jatoolsprinter(杰表.打印控件)----- [br] 免費版本只能在192.168.*** 網(wǎng)段使用,2.0之前的版本有免費版本,2.0之后是收費的。目前最新版本是4.2.他們可以通過web腳本來選擇輸出打印機,紙張大小,打印方向等,不必每次手工設(shè)定。 [br][br]價格請看:http://jatools.com/print/howtobuy.htm [br][br][br] [br] 對于簡單的打印,我們用ie的功能就可以了,對于需要復(fù)雜的設(shè)置的,建議使用輕量級的activex打印方式。在接下來的系列教程里,我們會一一介紹。 [br][br][br][br]---------------------------------------二 使用ie的打印功能進行一般的網(wǎng)頁打印----------------------------- [br][br]在我們進行web開發(fā)的時候,通常會需要用到打印,然而,由于web技術(shù)的限制及考慮到安全的問題,一直以來,web打印的功能都是非常弱的,對此,我們也只能接受。也許你在開發(fā)過程中經(jīng)常會遇見客戶對你說,“你們系統(tǒng)的打印太差了,你看看excel的打印多好啊,”,面對這樣的用戶,我們除了苦笑,還能說什么呢?如果你對著他們?nèi)ソ忉屖裁词莃s架構(gòu),什么是cs架構(gòu),不但不能夠解決問題,反而會招致用戶的反感。 [br][br] 那么,我們是不是就什么都不能做了呢?答案當然是否定的。利用現(xiàn)有的web技術(shù),再加上針對求的靈活實現(xiàn),我們也可以做出漂亮的打印出來。 [br][br] 在接下來的幾篇文章里,我將分別介紹幾種打印的方法或技術(shù)。這些方法有的很簡單,有的稍微復(fù)雜一點。我們還是從基礎(chǔ)做起,先了解最簡單的打印技術(shù),然后再一步一步提高,這樣也有利于消化技術(shù)。 [br][br] 本篇內(nèi)容講述利用ie提供的簡單的打印功能,進行打印的設(shè)置以及打印。 [br][br] 在ie里打印,我們可以通過javascript來調(diào)用window.print()函數(shù)實現(xiàn)。下面是一個簡單的代碼示例。[/p]
[p] [/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
[p] 點擊“打印”后,即可彈出打印窗口,如下圖 [br][br][img]http://dl.javaeye.com/upload/attachment/269213/9991e273-7cd0-3894-a367-5521d62ab6d6.bmp[/img][br] [/p]
[p]通過這個函數(shù),可以實現(xiàn)最簡單的打印功能。如果我們要對紙張,頁邊距進行設(shè)置,那該怎么做呢? 我們知道,我們可以方便地通過 internet explorer 用戶界面更改頁邊距、頁眉和頁腳設(shè)置和默認 internet explorer 打印機,ie也提供了一個叫webbrowser 控件來供我們調(diào)用,通過調(diào)用,可以在頁面上調(diào)出打印的設(shè)置窗口,在設(shè)置窗口里,用戶可以更改頁邊距、頁眉和頁腳設(shè)置等。(但是,在 internet explorer 或 webbrowser 控件下沒有以編程方式更改這些設(shè)置的方法。在本系列教程的第三篇,我將介紹如何在頁面上通過編程的方式來更改設(shè)置。)我們可以在頁面上輸入如下代碼來調(diào)用webbrowser 控件。[/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
[p] [/p]
[p]上例中的object就是ie提供的打印控件,叫webbrowser,我們在網(wǎng)頁中可以用我們設(shè)置的id或name來引用它。 [br][br] 這個對象有很用法,其中涉及到打印的有下面三項。 [br][br] wb.execwb(6,1) 打印 [br][br] wb.execwb(7,1) 打印預(yù)覽 [br][br] wb.execwb(8,1) 打印頁面設(shè)置 [br][br] 點擊“打印”按鈕,即可彈出和window.print()函數(shù)一樣的窗口。 點擊打印預(yù)覽,即可預(yù)覽當前頁面。[/p]
[p] [/p]
[p][br][img]http://dl.javaeye.com/upload/attachment/269215/6ef00446-139a-33ac-857e-e6fddd458e12.bmp[/img][br] [/p]
[p]點擊“頁面設(shè)置”,即可彈出頁面設(shè)置窗口,在設(shè)置窗口里,可以對邊距,頁眉等進行詳細設(shè)置。 [br][br][img]http://dl.javaeye.com/upload/attachment/269217/ba95de22-7d89-3640-84d6-c7406e38386a.bmp[/img][br] [/p]
[p] [/p]
[p]通過以上三個功能,我們就可以進行簡單的打印和設(shè)置了,對于一般的打印需求來說基本足夠。 [br][br] 這里需要說明的是,“頁面設(shè)置”中的各個值,是存儲在用戶的注冊表中。 [br][br] 下面是 microsoft internet explorer 訪問打印設(shè)置的方式: [br][br] 對于頁邊距,microsoft internet explorer 首先嘗試從以下注冊表項中獲取值:[/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
hkey_current_usersoftwaremicrosoftinternet explorerpagesetup hkey_current_usersoftwaremicrosoftinternet explorerpagesetup
[p] [/p]
[p]如果沒有此項,internet explorer 將通過從以下注冊表項中復(fù)制值來創(chuàng)建此項:[/p]
[p] [/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
hkey_local_machinesoftwaremicrosoftinternet explorerpagesetup hkey_local_machinesoftwaremicrosoftinternet explorerpagesetup
[p] 如果沒有此項,將提供默認值。 [br][br] 對于頁眉和頁腳,將從以下項中獲取值:[/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
hkey_current_usersoftwaremicrosoftinternet explorerpagesetup hkey_current_usersoftwaremicrosoftinternet explorerpagesetup
[p] 如果沒有此項,將提供默認值。 [br][br] 頁邊距的默認值是 0.75, [br][br] 對于 internet explorer 默認打印機,默認值將從以下項提供: [/p]
[p] [/p]
java代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
hkey_current_usersoftwaremicrosoftinternet explorerpagesetupprinter hkey_current_usersoftwaremicrosoftinternet explorerpagesetupprinter
[p] [/p]
[p]請注意,這些值作用于整個系統(tǒng),影響著當前用戶的 webbrowser 控件和 internet explorer 的所有實例。因此,如果你設(shè)置了第一張網(wǎng)頁的頁眉是“ajava.org”,那么第二張網(wǎng)頁的頁眉也是它。 [br][br] 那么,有沒有一種辦法,能夠在程序里對這些選項進行設(shè)置,而不需要用戶每次都手工來設(shè)置呢?請看下面. [br][br][br][br][br][br]------------------------------------三 使用wscript.shell通過編程方式進行復(fù)雜的web打印設(shè)置----------------------------- [br][br]上篇文章介紹了如何進行簡單的打印和設(shè)置,適用與一般的打印要求,如互聯(lián)網(wǎng)上網(wǎng)站的打印。然而,在我們?yōu)檎蚱髽I(yè)開發(fā)系統(tǒng)時,打印需求較為復(fù)雜,一般的打印設(shè)置可能滿足不了用戶需求,特別是為了用戶良好的可操作性,不能要求用戶在打印時都手工進行打印設(shè)置,這時,就需要我們在程序里實現(xiàn)對打印的預(yù)設(shè)置,用戶只需要點擊打印就可以了。 [br][br] 那么如何實現(xiàn)可編程的打印設(shè)置呢?有很多種方法,本文將介紹wscript.shell來進行打印設(shè)置。 [br][br] 使用wscript.shell,必須要求客戶ie允許 activex進行交互。如果是你開發(fā)的系統(tǒng)是針對于特定的用戶群,如一個政府單位,或一個企業(yè),那么建議你要求客戶將你的系統(tǒng)加入可信任站點。 [br][br] 從《[ajava原創(chuàng)]web打印系列教程之二--使用ie的打印功能進行一般的網(wǎng)頁打印》一文中,我們知道,頁邊距,頁眉,頁腳是存儲在注冊表里的。因此,接下來,我們主要是針對注冊表進行可編程設(shè)置。 [br][br] 請看如下代碼。[/p]
js代碼 [url=#][img]/images/icon_copy.gif[/img][/url]
[br][br] [br][br] [br][br] [br][br] [br][br] [br][br] [br][br]
Copyright 2010-2025 ClickSun All Rights Reserved |