正在加载...

在IE直接控制打印机打印

八月 21st, 2009

最近有个需求要用到收银条的打印,决定用Web架构,已开始直接使用打印机的通用去打动,用 IE 的命令来打印,结果打印速度太慢,打印20来行居然要用40秒,这在业务量高的情况下是不可以接受的。我们用的是EPSON TM-T88IV 打印机,问过厂商,答复是说都是要通过端口直接发打印指令才能发挥这个打印机的速度。这个指令集是“ESC/POS”。

我们问过其他人,他们都是用VB这些做的桌面应用,可以直接控制端口的,我们用Web不知道怎么写COM或者并口。还好,我问了一下陈小明,他给了我一个例子,用javascript 在客户端直接打印输出,真是雪中送炭。

这个方案的思路是用windows的FileSystemObject,打开COM1或者LPT1,然后就把指令写进去就可以了,代码片断如下:

<script Language=JavaScript> 
function print_onclick() {
    var objfs = new ActiveXObject("Scripting.FileSystemObject");
    var objprinter=objfs.CreateTextFile("COM1:",true);

    objprinter.Write(String.fromCharCode(0x1B) + "@");
    objprinter.Writeline("__________________________________");
    objprinter.Writeline("| 您打印的数据是:") ;
    objprinter.Writeline("|_________________________________|")  ;
    objprinter.Close();
}
</script>

这样就可以直接打印了。这样打印的相同的内容几乎是马上就完成了,基本不用等待,比40s的时间不知道快了多少倍。

在调用FileSystemObject,也出现过一些插曲,出现了“Automation server can't create object ”错误,这是两个原因,Microsoft Windows Script 没有安装或者版本低,第二个原因是IE的安全限制了ActiveX的执行。调整了这两点就没有问题。

虽然这个是直接写端口的,但是好像还是需要安装打印机的驱动程序,我在vista下没装驱动程序直接写端口,都是打印乱码,不过后来没有在深究这个问题了。

2010-5-12 更新:

事隔一年之后,又重新用这个方法,发现了一个很妖的问题,在很多机器上运行的挺好,但是在某些系统配置下就是不行,创建对象时说“错误:没有权限”。对IE、Microsoft Windows Script都作了该做的事情,还是不行。最后都放弃了,突然找到一个去年可以运行的系统。检查没有什么差别,只是那个js文件去年的编码是iso,今年用的是GBK。换了文件的编码居然就通过了。

我深度怀疑这还是系统配置,特别是操作系统组件和IE的版本、配置的问题,否则没有这么怪异的现象。问题也算解决了,任务完成。这个问题也没精力再深究了。



“在IE直接控制打印机打印” 共有1条留言

  1. 卢松松 On

    虽然弄过打印机,但每次都忘,可能是用的少的原因吧!

我要留言

麻烦,计算一下:+