“打印精灵”发布web打印控件2.04版

近期,“打印精灵”发布了web打印控件2.04版,功能更强,使用更方便,并解决了一些BUG。

主要新增功能

1、JS命令选择打印机

2.04版以前选择打印机, 需要通过http://127.0.0.1:9011打开控制台设置。2.04版提供了新的JS API,可以通过JS命令选择打印机,有了该功能,可以根据需要更好地控制应用程序的行为。

SPIRIT.open(opt, function(p) {		
  p.PrintLabel(...)
  p.close();
})

SPIRIT.open函数的第一个参数(下面简称为opt参数)非常重要,可以进行各种打印配置。选择打印机opt参数相关字段是type, name,这两个字段可以进行多种组合,如下:

type name 结果
使用控制台配置的缺省打印机
ZPL 无  选择链接到USB/并口/串口上的地一个可用的打印机
ZPL LP1/COM1/Printer 选择name指定的打印机,且type是ZPL,如果name指向一个windows打印机会报错
WIN/无 Printer 选择name指定的打印机,且type是WIN

举例:

SPIRIT.open({}, ...)  使用缺省打印机
SPIRIT.open({type:"ZPL", ...}, ...)  使用第一个可用的ZPL打印机
SPIRIT.open({type:"ZPL", name:"LP1", ...}, ...)  使用连接到并口1上的ZPL打印机
SPIRIT.open({name:"Microsoft Print to PDF", ...}, ...)  使用windows自带的PDF虚拟打印机

2、优化批量打印

2.04版打印精灵优化了连续批量打印功能,提供了更方便的API, 更好的过程控制方法。

一次性送入多组模板变量,一个命令打印多张标签。适合数量较少的连续打印。

SPIRIT.open({}, function(p) {
	p.PrintLabel("953745b5-90f3-4852-805d-d11f994d2374", [vars1, vars2])
})

2.04版开始,PrintLabel的第二个参数可以是一个数组,每个元素为一个标签的模板变量。打印精灵可以自动完成全部标签的打印,无需JS控制。

通过异步回调控制打印过程,可控制程序确保完成打印后送下组数据,适合大批量打印。

大批量打印机时,比较容易出现的问题是,已经一次性给打印机送入了大量数据,如果此时发生了卡纸、设备故障等原因造成的打印中断,很难定位故障发生时的打印位置,执行断点继打,容易造成纸张浪费。
打印精灵2.04版进行了优化,提供了方便的API, 可通过异步回调控制打印过程,以确保当前标签打印完成后再发送下一张标签数据。异步回调可以使用function callback, 也可以使用async/await,推荐在浏览器支持的情况下,尽可能使用async/await。

SPIRIT.open({}, async function(p) {
    for(var i=0; i<6; i++) {
       try {
           vars.name="name" + i;
           var rc=await p.PrintLabel("953745b5-90f3-4852-805d-d11f994d2374", vars);
           /* 可在这里标记打印完成 */
       }catch(rc){
           alert(rc.msg);
       }
    }	
    p.close();
})

3、自动拼版

自动拼版可以在一张纸上打印多个标签,如A4纸张可以打印3X4个7cmX7cm的标签。自动拼版可以节约纸张、提高打印速度。

控制自动拼版的参数在open的opt中,通过col, row字段控制。col, row 均有三种取值方式:

  1. 数字。设置拼版的行数/列数。如: { col:3, row:4} 表示每页打印3x4个标签。
  2. auto。表示自动计算行数/列数。
  3. 不设置时,缺省值为1。

下面这个程序会将12个标签打印在两页(每页6个)上。

SPIRIT.open({col:2, row:3}, async function(p) {
     for(var i=0; i<12; i++) {
        vars.name="name" + i;
        var rc=await p.PrintLabel("953745b5-90f3-4852-805d-d11f994d2374", vars);
     }
     p.close();
})

打印精灵会自动计算需要的纸张大小,如果不够大,会报错。

4、双端口启动打印服务,避免端口被占用

打印精灵使用9011作为打印服务端口,如果被其他软件占用了,会出现打印服务不能启动的情况。为了解决该问题,2.04版同时使用 (9011, 19011)两个服务端口,基本上不会再出现被同时占用的情况。

使用双端口,应用程序只要同时从两个端口引用spirit.js即可,无需做其他修改。

 <script src="http://127.0.0.1:9011/js/spirit.js"></script>
 <script src="http://127.0.0.1:19011/js/spirit.js"></script>

留言

登录