别笑菜:固定格式的针式票据或文件打印具体是怎么实现的?

请问:
那种三联四联一组的打印纸,提前印刷出固定格式范本,留有空位,塞到针式打印机后,相应字段打印到相应位置,是怎么实现的?

假设现在有 Vue+PHP 开发的系统,从系统读出数据后,放入固定格式的打印纸,是怎么把相应字段数据打印到相应位置的?

阅读 1.2k
3 个回答

主要看打印机的协议,我之前做过一款打印快递单子的打印机的网页端,这款打印机有自定义的协议,按照协议描述,把内容拼接到指定的 XML 字符串模板里面,通过 webSocket 发送给打印机,打印机自己会完成排版。
所以如果明确了需要适配的打印机机型的话,你可以问打印机厂商或者商家找找有没有打印机的开发文档,有文档并且明确怎么打的话再好不过了。
没有的话那恐怕只能提供大致位置的初始值了,最多也就是提供一个调参界面,让用户自己去调整。

说说我以前的解决方案
目标是珠宝店的质保单价格标签
其中质保单内容大概就是

“尊敬的_____,于____在_____

购买____商品xxxxxxx

最开始就是用html模拟一下这个布局,然后尝试调用print()直接打印到纸上,当然第一次打印可能错位得离谱,但是经过一点点调试还是能差不多对准位置。
不过弊端就是总不能每次打印都调试代码吧?每个门店的质保单内容和需要填充的数据位置都不一样。
所以就有了第一个解决方案

  • 写一个可通过配置内容坐标的编辑器
    其实就是门店用户可以设置每一个内容块的上下左右px来慢慢调试位置,但是工作量也是不小,用户对px没有概念
  • 升级版,可视化拖拽的编辑器
    在上一个版本的基础上,不用那么晦涩难懂的坐标控制,直接做一个可以拖拽的编辑器页面,自行通过鼠标调整位置,然后保存为模板让后端保存起来。用户可以针对不同质保单制作不同的模板,按需使用。只需要编辑一次即可。

注:不同打印纸张对打印内容的位置有影响,在window.print()打印时会让选择纸张尺寸,这里得按你的单子大小来选尺寸,不然就像一开时有的门店用A4的打印尺寸打印质保单,导致内容错位严重且难以调试

这类票据套打,看别人说的比较多的是Lodop。但是Lodop如果没有申请授权码的话,实现静默打印不太方便。然后模板的调节也不是很方便,之前了解过但是没有仔细用,你可以了解一下。
1)官网地址:https://www.lodop.net/index.html
2)参考文章:https://www.lodop.net/blogs/Blog008.html
3)参考文章:https://juejin.cn/post/6844904088132403207?searchId=202308191...

还有一个hiprint
1)官网地址:http://hiprint.io/
2)参考文章:http://hiprint.io/demo/list/bill
2)vue版本:https://juejin.cn/user/1662117311414462/posts

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题