[轉]WEB 打印的相關技術分析

一.自定義控件完成打印
  利用IE 自帶的WebBrowser 控件實現打印
  利用第三方控件實現打印
  1、 自定義控件方式
  自定義控件方式就是利用VB 或VC 等工具生成COM 組件,用定義好的打印格式來分析打印源文件從而實現打印。只有將生成的組件下載並註冊到客戶機上,才能實現在客戶端的
打印。
  難點主要是定義打印格式、如何來分析打印源文件。現有的比較好的方法是利用XML 技術來全面的解決問題,利用XML 可以非常容易地定義打印目標的文本、表格等內容的格式。
但對程序員的開發要求高,難度比較大。
  2、利用WebBrowser 實現Web打印
  WebBrowser是IE 內置的瀏覽器控件,無需用戶下載。本文檔所討論的是有關IE6.0 版本 的WebBrowser 控件技術內容。與其相關的技術要求有:打印文檔的生成、頁面設置、打印操作的實現等幾個環節。
  (一)、打印文檔的生成
  1、客戶端腳本方式
  客戶端腳本分爲VBScript、JavaScript、JScript 幾種腳本語言。在IE 下開發應用使用的語法爲JScript 的語法,由於它和JavaScript 幾乎沒有什麼區別,所以也可以稱其爲JavaScript(下面簡寫爲JS)。一般情況下,主要使用JS 來實現DOM 文檔的分析,DOM 爲微軟提 出的一種Web文檔模型,主要用來實現Web腳本編程。
  利用JS 可以分析源頁面的內容,將欲打印的頁面元素提取出來,實現打印。通過分析源文檔的內容,可以生成打印目標文檔。
  優點:客戶端獨立完成打印目標文檔的生成,減輕服務器負荷;
  缺點:源文檔的分析操作複雜,並且源文檔中的打印內容要有約定;
  2、服務器端程序方式
  服務器端程序方式,主要是利用後臺代碼從數據庫中讀取打印源,生成打印目標文檔。當的頁面生成時,還應適當考慮使用CSS 來實現強制分頁控制。
  優點:可以生成內容非常的豐富的打印目標文檔,目標文檔的內容的可控性強。由於打印 內容是從數據庫中獲取的,所以生成操作相對簡單;
  缺點:服務器端負載比較大;
  (二)、頁面設置
  頁面設置主要是指設置打印文檔的頁邊距、頁眉、頁腳、紙張等內容。頁面設置將直接影響到打印文檔版面的生成效果,所以它和打印文檔的生成有着密切的關係。比如:表格的
行數、大小、位置、字體的大小等。
  現有的技術是利用IE6.0 內置的打印模板方式來控制頁面設置,其可以對打印目標文檔產生非常大的影響。打印模板可以控制頁邊距、頁眉、頁腳、奇偶頁等內容,並可以將用戶的設置取得,還可以將設置發送到服務器端。
  打印模板技術可以自定預覽窗口和打印格式,最大限度地影響目標文檔和打印效果。
  (三)、打印操作的實現
  此功能的實現主要是利用WebBrowser控件的函數接口來實現打印、打印預覽(默認的)、
  頁面設置(默認的)。
<object ID='WebBrowser1' WIDTH=0 HEIGHT=0
CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'>
//打印
WebBrowser1.ExecWB(6,1);
//打印設置
WebBrowser1.ExecWB(8,1);
//打印預覽
WebBrowser1.ExecWB(7,1);
3、 一個實例項目採用的打印方案
服務器端程序方式、打印預覽接口調用, 下面爲例, 主要參考項目中的:
pageErrorPrint.aspx.vb 文件
主調用頁
function PrintPage(iPageIndex,strQuery)
{
var strURL;
strURL = "PageErrorPrint.aspx?PageIndex=" + iPageIndex + "&QueryString=" +
strQuery;
winPrint=window.open(strURL,"","left=2000,top=2000,fullscreen=3");
}
打印頁HTML 源中的預覽控制
<SCRIPT language="javascript">
document.write("<object ID='WebBrowser' WIDTH=0 HEIGHT=0
CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'></object>");
WebBrowser.ExecWB(7,1);
window.opener=null;
window.close();
</SCRIPT>
程序頭
'首先聲明表格容器
Protected WithEvents phContainer As System.Web.UI.WebControls.PlaceHolder
'每個表格中的記錄數量
Private Const ItemPerTable As Integer = 20
關鍵的實現部分
'創建一個符合打印要求的表格
tabPagePrint = NewPrintTable()
'將表頭添加到此表格中
Call AddTableTitle(tabPagePrint)
'初始化記錄器
i = 0
iItemIndex = iStartPoint
For Each clsItem In clsAllData.ErrorCollection
If i > 0 And i Mod ItemPerTable = 0 Then
'添加表格控件到頁面中
phContainer.Controls.Add(tabPagePrint)
'在頁面中添加一個換行符
Call AddPageBreak()
'創建新一輪的表格
tabPagePrint = NewPrintTable()
Call AddTableTitle(tabPagePrint)
End If
'將記錄添加到表格中
Call AddItemToTable(iItemIndex, tabPagePrint, clsItem)
iItemIndex = iItemIndex + 1
i = i + 1
Next
'添加表格控件到頁面中
phContainer.Controls.Add(tabPagePrint)
支持函數
'功能:添加頁的換行符
Private Sub AddPageBreak()
Dim ltBreak As LiteralControl
ltBreak = New LiteralControl("<p style='page-break-before:always'>")
phContainer.Controls.Add(ltBreak)
End Sub
  二、利用IE自身打印
  這種方式比較簡單,也常用的打印方式,只需要將報表頁面設計好,用戶通過IE菜單中的打印功能完成打印。優點是簡單,容易實現,缺點是不靈活,不能控制分頁,不能控制好頁眉和頁腳。
  三、將報表導出成Word,Excel或PDF形式打印
  這種方式需要將頁面導出成Office文檔或pdf,最低的要求是客戶端已經安裝用以打開Word、Excel或Pdf文檔的軟件。這種方式可以通過水晶報表組件或其他一些第三方控件非常容易地實現。導出成Pdf形式後打印質量和效果都很好,導出成Word或Excel後用戶可以自定義打印的內容和格式。
  總之,現有的打印方案各有所長,在開發過程中應根據用戶的需求作選擇,利用IE打印簡單,容易實現,在用戶需求簡單或打印內容較少的情況下采用此方案比較適宜。利用自定義控件打印可以實現完全自定義,但需要較高的技術要求和開發週期。利用導出的方式則可以滿足用戶需要一點自定義或打印內容有多頁的需求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章