实现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系统的功能,包括但不限于:
- 2善用你的知识财产
- 3Web服务器安全指南
- 4经验知识的获取和作用
- 5IBM推出面向移动设备的Web服务编程工具
- 6投资5000万美元 微软惠普联手推广.NET企业应用
- 7IBM明年将推出Web服务收费软件
- 8上海OA案例:Wisdom咨询公司(田志刚)
- 9IBM发布新软件,强化Web服务安全性
- 10存储新焦点--信息生命周期管理(赵达文)
- 11网管面临新挑战 采用Web服务
- 12设立宗教场所申请流程及所需要提供材料
- 13用IP阻塞保护Web服务的安全
- 14麦肯锡电子商务论丛-B2B市场销售指南
- 15异构数据库环境下的上海OA(AMT研究院 唐晓辉 编译)
- 16上海OA导入策略分析(By AMT 夏敬华)
- 17WS-I:网络服务需要一个声音说话
- 18网络服务标准谁说了算?SUN 积极争取发言权
- 19[理论] 上海OA的“平衡”性分析及其实施的七个支柱(夏敬华)
- 20调查:近60%企业正在体验Web Service技术
- 21知识整合:隐藏了的优势(by AMT 胡鹏编译)
- 22CKM的实现途径
- 23为Web服务注入协作
- 24昔日被拒门外 Sun现要进入WS-I决策部门
- 25再论博客--对工业生产方式的挑战
- 26呼唤独立的上海OA 运营服务提供商
- 27如何认识Web服务
- 28麦肯锡电子商务论丛-网络社群的价值所在
- 29利用已有优势 Novell不甘在Web服务作配角
- 30泛普OA软件2014年-2018年在大上海重点发展100家代理商
成都公司:成都市成华区建设南路160号1层9号
重庆公司:重庆市江北区红旗河沟华创商务大厦18楼