明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

WEB打印的相關(guān)技術(shù)區(qū)分

[摘要]WEB打印的相關(guān)技術(shù)分析現(xiàn)有的Web打印控制技術(shù)分成幾種方案  自定義控件完成打印  利用IE自帶的WebBrowser控件實(shí)現(xiàn)打印  利用第三方控件實(shí)現(xiàn)打印以下主要談前兩個方面的內(nèi)容一、 自定義控...
WEB打印的相關(guān)技術(shù)分析

現(xiàn)有的Web打印控制技術(shù)分成幾種方案

  自定義控件完成打印

  利用IE自帶的WebBrowser控件實(shí)現(xiàn)打印

  利用第三方控件實(shí)現(xiàn)打印

以下主要談前兩個方面的內(nèi)容



一、 自定義控件方式

自定義控件方式就是利用VB或VC等工具生成COM組件,用定義好的打印格式來分析打印源文件從而實(shí)現(xiàn)打印。只有將生成的組件下載并注冊到客戶機(jī)上,才能實(shí)現(xiàn)在客戶端的打印。

難點(diǎn)主要是定義打印格式、如何來分析打印源文件,F(xiàn)有的比較好的方法是利用XML技術(shù)來全面的解決問題,利用XML可以非常容易地定義打印目標(biāo)的文本、表格等內(nèi)容的格式。但對程序員的開發(fā)要求高,難度比較大。



二、 利用WebBrowser實(shí)現(xiàn)Web打印

WebBrowser是IE內(nèi)置的瀏覽器控件,無需用戶下載。本文檔所討論的是有關(guān)IE6.0版本的WebBrowser控件技術(shù)內(nèi)容。與其相關(guān)的技術(shù)要求有:打印文檔的生成、頁面設(shè)置、打印操作的實(shí)現(xiàn)等幾個環(huán)節(jié)。



(一)、 打印文檔的生成

1、 客戶端腳本方式

客戶端腳本分為VBScript、JavaScript、JScript幾種腳本語言。在IE下開發(fā)應(yīng)用使用的語法為JScript的語法,由于它和JavaScript幾乎沒有什么區(qū)別,所以也可以稱其為JavaScript(下面簡寫為JS)。一般情況下,主要使用JS來實(shí)現(xiàn)DOM文檔的分析,DOM為微軟提出的一種Web文檔模型,主要用來實(shí)現(xiàn)Web腳本編程。

利用JS可以分析源頁面的內(nèi)容,將欲打印的頁面元素提取出來,實(shí)現(xiàn)打印。通過分析源文檔的內(nèi)容,可以生成打印目標(biāo)文檔。



優(yōu)點(diǎn):客戶端獨(dú)立完成打印目標(biāo)文檔的生成,減輕服務(wù)器負(fù)荷;

缺點(diǎn):源文檔的分析操作復(fù)雜,并且源文檔中的打印內(nèi)容要有約定;



2、 服務(wù)器端程序方式

服務(wù)器端程序方式,主要是利用后臺代碼從數(shù)據(jù)庫中讀取打印源,生成打印目標(biāo)文檔。當(dāng)?shù)捻撁嫔蓵r,還應(yīng)適當(dāng)考慮使用CSS來實(shí)現(xiàn)強(qiáng)制分頁控制。



優(yōu)點(diǎn):可以生成內(nèi)容非常的豐富的打印目標(biāo)文檔,目標(biāo)文檔的內(nèi)容的可控性強(qiáng)。由于打印內(nèi)容是從數(shù)據(jù)庫中獲取的,所以生成操作相對簡單;

缺點(diǎn):服務(wù)器端負(fù)載比較大;



(二)、 頁面設(shè)置

頁面設(shè)置主要是指設(shè)置打印文檔的頁邊距、頁眉、頁腳、紙張等內(nèi)容。頁面設(shè)置將直接影響到打印文檔版面的生成效果,所以它和打印文檔的生成有著密切的關(guān)系。比如:表格的行數(shù)、大小、位置、字體的大小等。

現(xiàn)有的技術(shù)是利用IE6.0內(nèi)置的打印模板方式來控制頁面設(shè)置,其可以對打印目標(biāo)文檔產(chǎn)生非常大的影響。打印模板可以控制頁邊距、頁眉、頁腳、奇偶頁等內(nèi)容,并可以將用戶的設(shè)置取得,還可以將設(shè)置發(fā)送到服務(wù)器端。

打印模板技術(shù)可以自定預(yù)覽窗口和打印格式,最大限度地影響目標(biāo)文檔和打印效果。



(三)、 打印操作的實(shí)現(xiàn)

此功能的實(shí)現(xiàn)主要是利用WebBrowser控件的函數(shù)接口來實(shí)現(xiàn)打印、打印預(yù)覽(默認(rèn)的)、頁面設(shè)置(默認(rèn)的)。

<object ID='WebBrowser1' WIDTH=0 HEIGHT=0

CLASSID='CLSID:8856F961-340A-11D0-A96B-00C04FD705A2'>

//打印

WebBrowser1.ExecWB(6,1);

//打印設(shè)置

WebBrowser1.ExecWB(8,1);

//打印預(yù)覽

WebBrowser1.ExecWB(7,1);



三、 本項目采用的打印方案

服務(wù)器端程序方式、打印預(yù)覽接口調(diào)用,下面為例,主要參考項目中的:pageErrorPrint.aspx.vb文件

主調(diào)用頁

function PrintPage(iPageIndex,strQuery)

{

var strURL;

strURL = "PageErrorPrint.aspx?PageIndex=" + iPageIndex + "&QueryString=" + strQuery;

winPrint=window.open(strURL,"","left=2000,top=2000,fullscreen=3");

}



打印頁HTML源中的預(yù)覽控制

<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

'每個表格中的記錄數(shù)量

Private Const ItemPerTable As Integer = 20





關(guān)鍵的實(shí)現(xiàn)部分

'創(chuàng)建一個符合打印要求的表格

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()



'創(chuàng)建新一輪的表格

tabPagePrint = NewPrintTable()

Call AddTableTitle(tabPagePrint)

End If



'將記錄添加到表格中

Call AddItemToTable(iItemIndex, tabPagePrint, clsItem)

iItemIndex = iItemIndex + 1

i = i + 1

Next



'添加表格控件到頁面中

phContainer.Controls.Add(tabPagePrint)





支持函數(shù)

'功能:添加頁的換行符

Private Sub AddPageBreak()

Dim ltBreak As LiteralControl



ltBreak = New LiteralControl("<p style='page-break-before:always'>")

phContainer.Controls.Add(ltBreak)

End Sub



'功能:創(chuàng)建一個符合打印要求的表格

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論壇