“打印精灵”发布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 均有三种取值方式:
- 数字。设置拼版的行数/列数。如: { col:3, row:4} 表示每页打印3x4个标签。
- auto。表示自动计算行数/列数。
- 不设置时,缺省值为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>