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、不足之处是需要调节浏览器的安全设置,且不支持图片和特殊字体的打印。
巧用FileSystem组件实现WEB应用中的本地特定打印的方法
2019-10-15 10:16asp技术网 ASP教程
一般情况下,基于WEB的业务应用都采用三层或三层以上的结构,前台即客户端是普通的WEB浏览器,中间业务逻辑应用层存放于WEB服务器上,由WEB服务器上的服务构件访问后台数据库。
延伸 · 阅读
- 2019-10-15asp调用Word打印的代码
- 2019-10-11asp代码实现检测组件是否安装的函数
- 2019-10-10ASP控制每页打印行数
- 2019-10-07在Linux下使用Prips打印指定范围内的IP地址的方法
- 2019-10-07asp中xmlhttp组件发包
- 2019-09-11DAM 简单跨数据库ADO.NET组件
精彩推荐
- ASP教程
ASP 游标参数详解(ASP记录集)
经常使用游标,但一些具体的说明不是很清楚,书上的东西太乏味 ...
- ASP教程
asp textbox获取显示mysql数据示例代码
这篇文章主要介绍了asp textbox如何获取显示mysql数据,需要的朋友可以参考下...
- ASP教程
ASP中让Replace替换不区分大小写的方法
默认我们在ASP中用Replace的时候是会区分大小写的,如何让Replace不区分呢,这里简单介绍下,方便需要的朋友...
- ASP教程
ASP Crazy 模版操作类(最简单的模板类、仅提供交流)
ASP Crazy 模版操作类 最简单的模板类需要的朋友可以参考下。...
- ASP教程
asp之让Session永不过期
保持Session的方法:有人说设session.timeout=-1,或小于0的数。这种方法肯定是不行的,session计算时间以分钟为单位,必须是大于等于1的整数。 ...
- ASP教程
asp去除所有的超级链接的两种方法 替换与正则
asp去除所有的超级链接的两种方法 替换与正则 ...
- ASP教程
新手asp编程的基本法则与常见错误注意事项
在论坛看到很多帖子代码中都有一个共同的基本错误,字段类型错误。程序和数据库是紧紧相连的,数据库字段文本型或时间型的都使用单引号 ...
- ASP教程
asp将table生成excel文件(xls)
asp将table生成xls文件的实现代码。...