静默打印

首先, 为了需求要做一个扫码枪扫码,打印pdf的需求,为了规避用户那一下点击操作,balabalabalabala。。。。。这是背景。

最初,用iframe来显示,看见东西出来了,我以为打印尽在眼前了,但是特么没想到的是和黄土高坡一样,面对面不过数尺,握手还要走几十公里,根本没有想象中那么简单好不好!!!然后试了试window.print()方法,发现太鸡肋,根本就不能打印我要的元素好不好。

然后,找了很多的资料,看到一个iframe.contentWindow.print()这种方法,我欣喜若狂,找到这个元素简直和玩一样好吗!但是我翻来覆去找不到print这个方法。我决定试一试,我换着颤抖的心情保存看代码,看着热加载转圈圈,然后控制台告诉我跨域问题,想想也能说得通,pdf的路径在阿里云生成的,于是我放下了手里的西瓜刀,然后试着用在项目里面引入一个iframe,指向我的一个静态页面,在这个静态页面里面在加载一个iframe,我想,我自己找自己不算跨域了吧,爱因斯坦说绕着大树光速跑就能**自己嘛!结果还是跨域问题,然后问题就变成怎么解决跨域问题了,stack overflow 跨域问题,然后又是跨域问题,草我崩溃了。容我出去抽一根烟.................

想过来,想过去,iframe毕竟是一个iframe,有没有方法能转化成dom结构呢?然后我找到了pdf.js, 他确实可以吧iframe里面的东西转化成dom结构(至少demo里面是这样,情原谅我没有测试),然后又找到了print.js,他确实可以打印dom结果,看见这对狗男女,我开心的笑了,然后马上我就笑不出来了,老哥(我老大)告诉我这有性能问题,这两个货不能结合。。。。

最后的最后还是用print.js打印的,规定后台回来的数据是二进制数据流,最后在这个一下,那个一下就好了

axios.get('http://192.168.6.69:8971/orders/inventories/area/test', {responseType: 'blob'}).then(value => {
  console.log(value)
  const pdfFile = new Blob([value.data], {
    type: 'application/pdf'
  })
  const pdfUrl = URL.createObjectURL(pdfFile)
  printJS(pdfUrl)
})

这样就能成功掉起打印机了。

然后就是静默打印了,需要chrome的配合,你们要的教程:

静默打印配置方法

地址栏里面输入about:flags

需要修改两个设置

静默打印_第1张图片

chremo的快捷方式也要修改,名称修改成   OMS Kiosk Printing

静默打印_第2张图片

然后右键属性,在目标里面也要增加一些,这面是我修改之后的

C:\Users\vidries\AppData\Local\Google\Chrome\Application\chrome.exe chrome.exe --kiosk-printing

这样就好了。你所需要做的是吧chrome全部关掉。然后打开这个特殊的快捷方式就可以了,讲道理就没问题了。

你可能感兴趣的:(chrome)