实现Web应用中的本地打印
实现Web应用中的本地打印
邱庆华
随着Internet的飞速发展,企业纷纷开发基于Web的业务应用系统。为了实现业务系统与Internet的互联,许多企业将Web服务器和数据库系统托管在IDC(互联网数据中心),因而需要从托管在 IDC的服务器上提取业务数据在本地打印输出。通常客户端浏览器只能打印简单的HTML页面,如何才能在浏览器上实现更为强大灵活的打印输出功能呢?笔者采用相关的技术对浏览器的功能进行扩展,完成了比较复杂的数据打印任务,如收条、回执等,下面具体介绍实现这种功能的方法。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组件对象实例的第二种方法,就可以借助该组件对客户端系统的文本文件、文件夹及驱动器进行访问和控制。因为Windows系统带有FileSystem组件,所以Windows平台的客户端不需要另外从远程服务器上下载它,在安装操作系统时会自动安装这个组件并注册;而对于其他平台的客户端,则需要安装插件并下载FileSystem组件。
本地打印的实现机制
利用FileSystem组件实现本地打印的过程如图1所示:
图1 本地打印的实现原理
1. 客户端向Web服务器发送数据请求;
2.
Web服务器根据业务处理逻辑与后台数据库进行交互,取得所需的数据并生成HTML页面(其中有操作FileSystem组件对象的VBScript脚本),然后向客户端浏览器发回HTML页面;
3. 在客户端运行脚本,取出HTML页面中的数据,建立与打印机的连接,并向打印机输出打印数据。
前两步与一般的Web应用没有什么区别,需要说明的是第三步:
首先使用VBScript脚本函数CreateObject来创建FileSystem组件对象的实例;然后调用该实例创建文本文件的CreateTextFile方法,把打印端口LPT1或LPT2作为文件名参数,并将可否覆盖文件的参数设为TRUE,建立与打印机的连接;
最后调用获得的打印机文本文件流实例的写文本方法WriteLine,向打印机输出打印的内容。
程序示例
程序代码分为客户端执行的脚本和服务器端执行的脚本,客户端执行的脚本如下:
<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>
小 结
●
使用此方法实现打印任务之前,必须调整浏览器的安全设置。通过降低浏览器的Internet选项上的安全级别,对自己的站点充分信任,才可以通过浏览器执行脚本访问本机资源。
●
本方法可以实现在局域网的打印机上打印远程服务器的数据。只需用局域网上的打印机注册在本地的端口代替本地打印机端口作为创建文本文件的CreateTextFile方法的参数即可。
● 本方法可以实现根据用户的要求选择打印的宽度、高度、数量和内容,并可重复打印。
●
不需要编写ActiveX控件即可以完成特定的打印功能,实现较为简单。
●
不足之处是需要调整浏览器的安全设置,且不支持图片和特殊字体的打印。
- 1上海OA能赚钱
- 2Web服务与二进制传输
- 3客户支持中心的上海OA(By AMT 宋亮)
- 4上海OA和信息管理之间的联系和区别(By AMT 宋亮)
- 5麦肯锡电子商务论丛-网络社群的价值所在
- 6上海OA的功能框架
- 7全文检索技术的深层剖析
- 8企业内部的知识市场
- 9知识转移,是防范信息化风险的首要良方
- 10如何搭上Web服务这班车?
- 112002年Web Services技术论坛上海开幕
- 12《解构Web services系列之二》新兴技术较劲 竞争白热化
- 13泛普软件(上海)OA软件官方网站的研究和分析
- 14“管理信息化热点问题讨论”之八:上海OA很好,但到底如何实现(by AMT 孔祥云 徐家俊)
- 15麦肯锡电子商务论丛-网络订价策略
- 16[理论] 上海OA的“平衡”性分析及其实施的七个支柱(夏敬华)
- 17Web服务中的信息安全:软肋 or 机会?
- 18网络服务也称得上是一场革命
- 19上海OA管出企业"钱途"
- 20使用Visual Basic .NET访问Google的Web服务
- 21IBM绝地大反攻(II):加强与微软的合作
- 22Web技术、上海OA与高等教育(by AMT 刘宇 编译)
- 23五大Web服务神话
- 24实施上海OA:把经验和信息转化为生产力(by AMT 仲英豪编译)
- 25美公司推出下一代网络服务工具包
- 26美政府吸取911教训将眼光投向Web服务
- 27企业知识吸收能力的主要影响因素(刘常勇 谢洪明)
- 28Novell OneNet重拳出击Web服务
- 29Check Point加强Web服务的安全性
- 30统计分析Web服务器日志
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼