巧用FileSystem組件實現WEB應用中的本地特定列印 (轉)

來源:互聯網
上載者:User
web|列印 1、引言
隨著Internet的飛速發展,許多企業都紛紛開發基於WEB的業務應用系統。一般情況下,基於WEB的業務應用都採用三層或三層以上的結構,前台即用戶端是普通的WEB瀏覽器,中間商務邏輯應用程式層存放於WEB伺服器上,由WEB伺服器上的服務構件訪問後台資料庫。為了業務系統與Internet的互聯,WEB伺服器和資料庫系統均託管在IDC(互連網資料中心),因而需要從託管在 IDC的伺服器上提取業務資料在本地列印輸出。在用戶端瀏覽器只能列印簡單的HTML頁面的情況下,要求更為強大靈活的列印輸出功能;通過採用相關的技術對瀏覽器的功能進行擴充,能夠完成更複雜的資料列印的任務,如收條、回執等。筆者曾經為一網路教育公司開發教育管理軟體時採用FileSystem組件實現在本地列印三聯收款憑證和准考證等的功能。
2、FileSystem組件使用簡介
FileSystem組件其實是一個ActiveX控制項,其存在於WINDOWS平台中(不管是Win98、Win2000,還是NT環境都包含該組件。),CLSID:0D43FE01-11CF-8940-00A0C9054228。熟悉ASP編程人可能都使用過FileSystem組件,一般情況下該組件用在伺服器端,用來對文字檔、檔案夾及磁碟機進行訪問和控制。可以通過兩種方法建立FileSystem組件的對象執行個體:
1、使用ASP的內建對象SERVER的方法Server.CreateObject來建立伺服器端對象的執行個體。
2、使用Vbscript指令碼函數CreateObject來建立用戶端對象的執行個體(也可以在伺服器端用該方法,但有時會出錯,一般不使用;)。
FileSystem組件對文字檔進行操作有如下方法:
CreateTextFile(Filename,[Overwrite if exists],[Unicode/ASCII]) //建立文字檔
OpenTextFile(Filename,[Input/output mode],[Create if not exists],[Format]) //開啟文字檔
CopyFile(Filename1,Filename2,[Overwrite]) //拷貝文字檔
MoveFile (Filename1,Filename2) //移動文字檔
DeleteFile (Filename) //刪除文字檔
GetFile (Filename) //獲得文字檔
FileExists (Filename) //判斷文字檔是否存在
FileSystem組件對檔案夾和磁碟機也有和文字檔相類似的方法,在此不一一贅述。
其實,FileSystem組件也可使用於用戶端,採用建立FileSystem組件對象執行個體的第二種方法即可以使用該組件對用戶端系統的文字檔、檔案夾及磁碟機進行訪問和控制。因為微軟平台帶有FileSystem組件,所以對於微軟平台的用戶端則不需要從遠程伺服器下載,其在安裝作業系統時會自己安裝並註冊;而對於其他平台的用戶端則須安裝外掛程式並下載FileSystem組件。
3、本地端特定列印的實現機制
利用FileSystem組件實現本地端特定列印的過程如圖所示:

1、用戶端向WEB伺服器發送資料請求;
2、WEB伺服器根據業務處理邏輯與後台資料庫進行互動,取得所需資料形成HTML頁面,並附帶有FileSystem組件對象的VBScript指令碼,向用戶端瀏覽器發回HTML頁面;
3、在用戶端運行指令碼,指令碼取得HTML頁面構件的資料,建立與印表機的串連,向印表機輸出列印資料。
前兩步與一般的WEB應用沒有什麼區別,需要說明的是第三步:首先使用Vbscript指令碼函數CreateObject來建立FileSystem組件對象的執行個體;然後調用該執行個體建立文字檔的CreateTextFile方法,把列印連接埠LPT1或LPT2作為檔案名稱參數,並將可覆蓋檔案參數設為TRUE,建立與印表機的串連;調用獲得的印表機文字檔流執行個體的寫文本方法WriteLine向印表機輸出列印的內容。
4、程式樣本
用戶端指令碼:
<script Language=VBScript>
function print_onclick //列印函數
dim label
label=document.printinfo.label.value //獲得HTML頁面的資料
set objfs=CreateObject("Scripting.FileSystemObject") //建立FileSystem組件對象的執行個體
set objprinter=objfs.CreateTextFile ("LPT1:",true) //建立與印表機的串連
objprinter.Writeline("__________________________________") //輸出列印的內容
objprinter.Writeline("| |")  
objprinter.Writeline("| 您列印的資料是:"&label& " |”)  
objprinter.Writeline("| |")
objprinter.Writeline("|_________________________________|")  
objprinter.close //斷開與印表機的串連
set objprinter=nothing  
set objfs=nothing // 關閉FileSystem組件對象
end function
</script>
伺服器端指令碼:
<%………
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
……….%> //與資料庫進行互動
HTML頁面編碼:
<HTML>
………
<FORM ID=printinfo NAME="printinfo" >
<INPUT type="button" value="列印>>" id=print name=print > //調用列印函數
<INPUT type=hidden id=text1 name=label value=<%=………%>> //儲存伺服器端傳來的資料
………
</HTML>
5、說明及結論
1、使用此方法實現列印任務之前,必須調節瀏覽器的安全設定;在Internet選項上安全層級降低,對自己的網站充分信任,可以通過瀏覽器執行指令碼訪問本機資源。
2、本方法可以實現在區域網路的印表機上列印遠程伺服器的資料,只須用區域網路上印表機註冊在本地的連接埠代替本機印表機連接埠作為建立文字檔的CreateTextFile方法的參數即可。
3、本方法可以實現根據使用者選擇列印的寬度、高度和數量及內容,並可重複列印。
4、不需要編寫ActiveX控制項即可以完成特定的列印功能,實現較為簡單。
5、不足之處是需要調節瀏覽器的安全設定,且不支援圖片和特殊字型的列印。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。