国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

WEB打印的相關技術分析

2024-07-21 02:21:16
字體:
來源:轉載
供稿:網友
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論壇

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 襄城县| 南靖县| 渝中区| 莫力| 金门县| 通州区| 江川县| 鹿邑县| 莒南县| 徐水县| 南丹县| 冕宁县| 穆棱市| 酉阳| 土默特右旗| 荣昌县| 礼泉县| 新河县| 吴旗县| 小金县| 茶陵县| 滦南县| 拜城县| 重庆市| 营口市| 保山市| 延寿县| 布尔津县| 于田县| 理塘县| 庆元县| 白河县| 宁都县| 峨山| 布尔津县| 罗定市| 新安县| 乐陵市| 原平市| 张家港市| 康平县|