星期四, 十一月 12, 2009

用js访问COM口来控制打印机

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

一般用VC,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>

这样就可以直接打印了。打印的相同的内容几乎是马上就完成了,基本不用等待。

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

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

没有评论: