WEB列印的相關技術分析

來源:互聯網
上載者:User
web|web列印 WEB列印的相關技術分析

現有的Web列印控制技術分成幾種方案

  自訂控制項完成列印

  利用IE內建的WebBrowser控制項實現列印

  利用第三方控制項實現列印

以下主要談前兩個方面的內容



一、 自訂控制項方式

自訂控制項方式就是利用VB或VC等工具產生COM組件,用定義好的列印格式來分析列印源檔案從而實現列印。只有將產生的組件下載並註冊到客戶機上,才能實現在用戶端的列印。

痛點主要是定義列印格式、如何來分析列印源檔案。現有的比較好的方法是利用XML技術來全面的解決問題,利用XML可以非常容易地定義列印目標的文本、表格等內容的格式。但對程式員的開發要求高,難度比較大。



二、 利用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);



三、 本項目採用的列印方案

伺服器端程式方式、預覽列印介面調用,下面為例,主要參考項目中的: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



'功能:建立一個符合列印要求的表格

Private Function NewPrintTable() As Table

Dim tabSrc As New Table()



tabSrc.Width = Unit.Percentage(100)

tabSrc.Attributes("border") = "1"

tabSrc.CellPadding = 4

tabSrc.CellSpacing = 0

tabSrc.BorderWidth = Unit.Pixel(2)

tabSrc.BorderColor = Color.Black

tabSrc.Style.Add("FONT-SIZE", "12px")

NewPrintTable = tabSrc

End Function


摘自CSDN論壇



聯繫我們

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