監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢(xún)管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 甲方項(xiàng)目管理系統(tǒng) | 簽約案例 | 客戶(hù)案例 | 在線(xiàn)試用
X 關(guān)閉

實(shí)現(xiàn)Web應(yīng)用中的本地打印

申請(qǐng)免費(fèi)試用、咨詢(xún)電話(huà):400-8352-114

AMTeam.org

實(shí)現(xiàn)Web應(yīng)用中的本地打印

 邱慶華  

隨著Internet的飛速發(fā)展,企業(yè)紛紛開(kāi)發(fā)基于Web的業(yè)務(wù)應(yīng)用系統(tǒng)。為了實(shí)現(xiàn)業(yè)務(wù)系統(tǒng)與Internet的互聯(lián),許多企業(yè)將Web服務(wù)器和數(shù)據(jù)庫(kù)系統(tǒng)托管在IDC(互聯(lián)網(wǎng)數(shù)據(jù)中心),因而需要從托管在 IDC的服務(wù)器上提取業(yè)務(wù)數(shù)據(jù)在本地打印輸出。通??蛻?hù)端瀏覽器只能打印簡(jiǎn)單的HTML頁(yè)面,如何才能在瀏覽器上實(shí)現(xiàn)更為強(qiáng)大靈活的打印輸出功能呢?筆者采用相關(guān)的技術(shù)對(duì)瀏覽器的功能進(jìn)行擴(kuò)展,完成了比較復(fù)雜的數(shù)據(jù)打印任務(wù),如收條、回執(zhí)等,下面具體介紹實(shí)現(xiàn)這種功能的方法。

FileSystem組件使用簡(jiǎn)介

FileSystem組件是一個(gè)ActiveX控件,存在于Windows平臺(tái)中(不管是Win98、Win2000,還是NT操作系統(tǒng)都包含該組件),它的CLSID是“0D43FE01-11CF-8940-00A0C9054228”。熟悉ASP編程方法的人可能有許多使用過(guò)FileSystem組件,一般情況下該組件用在服務(wù)器端,用來(lái)對(duì)文本文件、文件夾及驅(qū)動(dòng)器進(jìn)行訪(fǎng)問(wèn)和控制??梢酝ㄟ^(guò)兩種方法創(chuàng)建FileSystem組件的對(duì)象實(shí)例:

1. 使用ASP內(nèi)置的Server對(duì)象的方法Server.CreateObject來(lái)創(chuàng)建服務(wù)器端對(duì)象的實(shí)例。

2. 使用VBScript腳本函數(shù)CreateObject來(lái)創(chuàng)建客戶(hù)端對(duì)象的實(shí)例(也可以在服務(wù)器端使用該方法,但有時(shí)會(huì)出錯(cuò),一般不建議使用)。

FileSystem組件有如下一些方法可以對(duì)文本文件進(jìn)行操作: 

● CreateTextFile(Filename,[Overwrite if exists],[Unicode/ASCII])
//創(chuàng)建文本文件
● OpenTextFile(Filename,[Input/output mode],[Create if not exists],[Format])
//打開(kāi)文本文件
● CopyFile(Filename1,F(xiàn)ilename2,[Overwrite])
//拷貝文本文件
● MoveFile(Filename1,F(xiàn)ilename2)
//移動(dòng)文本文件
● DeleteFile(Filename) 
//刪除文本文件
● GetFile(Filename)
//獲得文本文件
● FileExists(Filename)

//判斷文本文件是否存在

FileSystem組件對(duì)文件夾和驅(qū)動(dòng)器也有和操作文本文件相類(lèi)似的方法,在此不一一贅述。

FileSystem組件也可用于客戶(hù)端。如果采用創(chuàng)建FileSystem組件對(duì)象實(shí)例的第二種方法,就可以借助該組件對(duì)客戶(hù)端系統(tǒng)的文本文件、文件夾及驅(qū)動(dòng)器進(jìn)行訪(fǎng)問(wèn)和控制。因?yàn)閃indows系統(tǒng)帶有FileSystem組件,所以Windows平臺(tái)的客戶(hù)端不需要另外從遠(yuǎn)程服務(wù)器上下載它,在安裝操作系統(tǒng)時(shí)會(huì)自動(dòng)安裝這個(gè)組件并注冊(cè);而對(duì)于其他平臺(tái)的客戶(hù)端,則需要安裝插件并下載FileSystem組件。

本地打印的實(shí)現(xiàn)機(jī)制


利用FileSystem組件實(shí)現(xiàn)本地打印的過(guò)程如圖1所示: 

圖1 本地打印的實(shí)現(xiàn)原理


1. 客戶(hù)端向Web服務(wù)器發(fā)送數(shù)據(jù)請(qǐng)求;

2. Web服務(wù)器根據(jù)業(yè)務(wù)處理邏輯與后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行交互,取得所需的數(shù)據(jù)并生成HTML頁(yè)面(其中有操作FileSystem組件對(duì)象的VBScript腳本),然后向客戶(hù)端瀏覽器發(fā)回HTML頁(yè)面;

3. 在客戶(hù)端運(yùn)行腳本,取出HTML頁(yè)面中的數(shù)據(jù),建立與打印機(jī)的連接,并向打印機(jī)輸出打印數(shù)據(jù)。

前兩步與一般的Web應(yīng)用沒(méi)有什么區(qū)別,需要說(shuō)明的是第三步: 首先使用VBScript腳本函數(shù)CreateObject來(lái)創(chuàng)建FileSystem組件對(duì)象的實(shí)例;然后調(diào)用該實(shí)例創(chuàng)建文本文件的CreateTextFile方法,把打印端口LPT1或LPT2作為文件名參數(shù),并將可否覆蓋文件的參數(shù)設(shè)為T(mén)RUE,建立與打印機(jī)的連接; 最后調(diào)用獲得的打印機(jī)文本文件流實(shí)例的寫(xiě)文本方法WriteLine,向打印機(jī)輸出打印的內(nèi)容。

程序示例

程序代碼分為客戶(hù)端執(zhí)行的腳本和服務(wù)器端執(zhí)行的腳本,客戶(hù)端執(zhí)行的腳本如下: 

<script Language=VBScript>
function print_onclick
//打印函數(shù)
dim label
label=document.printinfo.label.value
//獲得HTML頁(yè)面里的數(shù)據(jù)
set objfs=CreateObject(“Scripting.FileSystemObject”)
//創(chuàng)建FileSystem組件對(duì)象的實(shí)例
set objprinter=objfs.CreateTextFile (“LPT1:”,true)
//建立與打印機(jī)的連接
objprinter.Writeline(“___________________”)
//輸出打印的內(nèi)容
objprinter.Writeline(“| |”)
objprinter.Writeline(“| 您打印的數(shù)據(jù)是:”&label& “|”)
objprinter.Writeline(“| |”)
objprinter.Writeline(“|________________|”)
objprinter.close
//斷開(kāi)與打印機(jī)的連接
set objprinter=nothing
set objfs=nothing
// 關(guān)閉FileSystem組件對(duì)象
end function
</script>
服務(wù)器端執(zhí)行的腳本如下:
<%……
set conn=Server.CreateObject (“adodb.connection”)
conn.Open “DSN=name;UID=XXXX;PWD=XXXX;”
set rs=server.CreateObject(“adodb.recordset”)
rs.Open(“select ……”, conn, 1, 1)
……%>
//與數(shù)據(jù)庫(kù)進(jìn)行交互
HTML頁(yè)面其他代碼:
<HTML>
……
<FORM ID=printinfo NAME=“printinfo”>
<INPUT type=“button” value=“打印>>” id=print name=print >
//調(diào)用打印函數(shù)
<INPUT type=hidden id=text1 name=label value=<%=……%>>
//保存服務(wù)器端傳來(lái)的數(shù)據(jù)
……
</HTML>

小 結(jié)

● 使用此方法實(shí)現(xiàn)打印任務(wù)之前,必須調(diào)整瀏覽器的安全設(shè)置。通過(guò)降低瀏覽器的Internet選項(xiàng)上的安全級(jí)別,對(duì)自己的站點(diǎn)充分信任,才可以通過(guò)瀏覽器執(zhí)行腳本訪(fǎng)問(wèn)本機(jī)資源。

● 本方法可以實(shí)現(xiàn)在局域網(wǎng)的打印機(jī)上打印遠(yuǎn)程服務(wù)器的數(shù)據(jù)。只需用局域網(wǎng)上的打印機(jī)注冊(cè)在本地的端口代替本地打印機(jī)端口作為創(chuàng)建文本文件的CreateTextFile方法的參數(shù)即可。

● 本方法可以實(shí)現(xiàn)根據(jù)用戶(hù)的要求選擇打印的寬度、高度、數(shù)量和內(nèi)容,并可重復(fù)打印。

● 不需要編寫(xiě)ActiveX控件即可以完成特定的打印功能,實(shí)現(xiàn)較為簡(jiǎn)單。

● 不足之處是需要調(diào)整瀏覽器的安全設(shè)置,且不支持圖片和特殊字體的打印。 

發(fā)布:2007-03-25 10:35    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章: