歲月如哥
          人生非夢
          posts - 50,comments - 144,trackbacks - 0

          做管理系統的時候,打印一直是個棘手的問題,做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腳本來實現一個簡單的例子。
          < script language="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< 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驅動不了。
            
            
            
          2、利用瀏覽器自帶的打印控件來實現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()顯然遠遠不夠。


          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 歲月如歌 閱讀(91047) 評論(22)  編輯  收藏 所屬分類: 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

            回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2010-06-18 14:10 | eee
          @interdrp
          reyo 雙打的SCRIPT 在哪呢  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2011-05-31 13:26 | 站長工具
          不錯啊 試試看.  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2011-10-27 22:54 | ssxsfj
          不錯  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2012-03-20 15:02 | 郭磊
          謝謝,收藏了
            回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2012-05-24 21:23 | qqq
          打印報表時,需要重新向服務器檢索數據,效率低。
          因為Applet方案,一般采用html方式呈現數據,打印時Applet必須向服務器檢索同一張票據的數據,看上去,是打印了當前頁的票據,實際上,Applet根本不會用當前html頁的數據來打印,而是向服務器下載數據到Applet中來打印。也就是說,打印的話,必須兩次請求,一次html呈現,一次用來打印。


          可以通過調用applet的方法將打印內容傳進去啊


          唯一的遺憾是要彈個是否允許使用打印機的提示,  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz[未登錄]
          2013-04-12 11:32 | rex
          國內最專業的打印控件:jatoolsPrinter
          且支持chrome,opera,firefox 等非IE瀏覽器。  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2013-04-22 22:49 | lol
          好像lodop快一統江湖了。  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz[未登錄]
          2013-06-27 14:58 | rex
          jatoolsPrinter (杰表打印控件) 是國內最專業的網頁打印的工具。解決了web客戶端精確打印,批量打印,打印配置自動保留等問題。

          1、小巧,整個控件只有200k。
          2、可以打印預覽。
          3、支持一維碼,二維碼顯示、打印功能。
          4、有可視化設計套打功能,可輕松地拖拽位置、調整樣式,保存調整結果;
          5、支持票據上萬份的連續批量打印,不走樣、不偏移。
          6、完美支持復雜表格分頁。
          7、支持excel導出功能。
          8、支持瀏覽器有IE、Firefox、Chrome、Opera、Safari,帶微軟數字簽名。
          9、大型電子政務項目、各大軟件開發商指定打印控件。   回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2013-06-30 11:45 | 9d
          jatoolsPrinter有基于web的設計器,允許用戶在打印時,拖放打印位置:

          http://bbs.jatools.com/attachments/month_1306/20130627_9972c31b7b6719a969deGbHOpI2dwUTu.gif  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2013-07-02 12:05 | gdTo
          不錯的文檔,感謝分享,我們公司之前做了一個japerreport報表項目就需要打印功能。找來市面上幾乎所有的web打印控件,發現在幾百臺機子的情況下,穩定性最好的還是jatoolsPrinter.  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz
          2013-07-12 15:01 | gdTo
          貌似不錯的樣子!  回復  更多評論
            
          # re: web打印,web打印控件的三種實現方法 zz[未登錄]
          2014-07-23 09:58 | jacob
          好厲害,學習了  回復  更多評論
            
          主站蜘蛛池模板: 广德县| 手机| 昭觉县| 石泉县| 丹凤县| 达日县| 循化| 石狮市| 湟中县| 金堂县| 桐城市| 大城县| 东莞市| 普陀区| 保山市| 阿坝县| 繁昌县| 玉溪市| 杭锦旗| 遂平县| 乌鲁木齐县| 兴仁县| 津南区| 巴东县| 昭苏县| 塘沽区| 牡丹江市| 蓝山县| 镇雄县| 黔东| 门头沟区| 河津市| 红桥区| 台东县| 湾仔区| 成都市| 焦作市| 故城县| 冷水江市| 商水县| 沙河市|