WEB 列印的相關技術分析
來源:互聯網
上載者:User
一.自訂控制項完成列印
利用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列印簡單,容易實現,在使用者需求簡單或列印內容較少的情況下採用此方案比較適宜。利用自訂控制項列印可以實現完全自訂,但需要較高的技術要求和開發週期。利用匯出的方式則可以滿足使用者需要一點自訂或列印內容有多頁的需求。