关于web 服务打印
现有一个餐饮社区团购,团长使用浏览器打开线上商城登录自己的账户,当该团长有新订单时则打印订单,一个收银打印机,一个后厨打印机
web 打印一直是一个比较尴尬的问题,不过好在有很多第三方产品可供选择,至于哪一款更好相信每个人都有属于自己的“车”。
在解决问题过程中,本人选择了 Lodop 打印。这款插件完全满足以上需求 [ 除了水印之外 ]
设备及软件
Lodop:Lodop综合版(Lodop6.226+CLodop3.083) [ 2019-05-23 目前官网是这个 ]
打印机:Xprinter 80-c 网络打印机 [ 设置IP 的那种,-c是自动切纸 ]【 USB打印机不考虑,后厨可能会很远 】
Xprinter 查看打印机信息:先关机->按住FEED键不要松->开机->松开FEED键,则会打印打印机的相关信息
打印机默认端口:9100。
打印机默认IP:192.168.0.xxx
可以去Xprinter 官网下载测试工具
如果修改不了的话,就设置一下路由器LAN口与打印机相同,然后浏览器登录打印机IP进行设置,设置完成后再将路由器LAN口修改回来
eg:打印机默认IP:192.168.0.100
eg:路由器LAN口:192.168.1.1
eg:则需要将路由器LAN 口设置为:192.168.0.1
eg:设置完成后访问打印机IP 192.168.0.100 则可以看到设置页面类似下图:
需要解决的问题:
服务器端如何连接线下的打印机
解决方案:
web 服务器端:
1.下载 Lodop 软件
2.在web 服务器安装Lodop软件
3.将Lodop 的代码部署到web 项目首页页面 [ 方便监听订单 ]
4.在web项目首页页面编写打印票据的格式
Lodop 格式打印设计
5.写循环监听订单函数[ 当然是只监听登录商户的了 ]
6.服务端选择本地打印机序号进行定向输出打印 [ 虽然是在服务器写的代码,但这里的本地,指的是商户端 ]
获得打印设备和选择打印机输出
参考以上地址,发现 Lodop 可以获取本地打印机的个数以及打印机序号。那我们使用打印机序号进行定向输出打印就可以了。
团长端:
1.安装与web服务器同样的 Lodop 软件
2.安装打印机控件
3.设置打印机IP
4.设置好后,可尝试打印测试页进行校验是否连接正常
5.此时可以查看本地打印机的序号,参考服务器端第 6 步链接
以上步骤完成后,当团长在浏览器访问web 服务器地址时,因在web服务器页面引入 Lodop 控件,而团长本地也安装了打印机和Lodop 插件,所以当有新订单时,Lodop 会根据服务器端设置的团长端打印机序号选择团长端打印机进行定向输出打印
服务器端代码
Html 页面引入 [ head 头内 ]
<script src="{__STATIC_PATH}Lop/LodopFuncs.js"></script>
<object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0>
<embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
</object>
Html 脚本 Script 内
var LODOP;
//团长端打印机序号
var strPrinterName = [0,1];
/**
* 打印函数
* @param printerPointer 打印机列表
* @param data 数据
* @constructor
*/
function PrintByPrinterName(printerPointer,data) {
//遍历打印机序号
for (var i = 0; i < printerPointer.length; i++) {
//设置当前打印机 SET_PRINTER_INDEXA
if (LODOP.SET_PRINTER_INDEXA(printerPointer[i])) {
//遍历数据生成打印内容
for(var j=0;j<data.length;j++){
CreatePrintPage(data[j]);
LODOP.PRINT();
}