ZMPrintService使用说明
Hits:45482021-09-10 11:45:25 Source: RFID标签打印机、条码打印机制造商_国产品牌ZMIN致明兴科技
新闻摘要:ZMIN网页端(HTML5/WebSocket)打印服务程序ZMPrintService的使用说明
概述:
在条码打印机的系统应用上,B/S模式,即Browser/Server(浏览器/服务器)架构,是常用的一种方式。
以前通常的方法是使用ActiveX控件,即ocx控件,可以使IE浏览器像调用dll一样调用打印控制函数,控制打印机的输出和得到打印机的返回数据。但使用ocx有个很明显的弊端,它只支持IE,不支持Firefox,Chrome、甚至Edge等浏览器,在安卓或苹果终端,也没办法使用。
为此我们推出这个网页端打印服务端:ZMPrintService,它使用HTML5的WebSocket API,可以完美替换ocx。而且即使您已经使用ocx开发了系统,也只需要修改少量的代码即可转换过来。
ZMPrintService支持ZMPCL.dll的函数,使得您在网页上可以轻松控制打印机,支持一维条码、二维条码、文字、图片等的打印,支持RFID标签的读写,还可实现打印预览,功能很强大也很实用。
它小巧精干,界面简洁,设置方便,处理效率高,适合网页上快速预览或打印输出标签。
系统需求:
1、运行ZMPrintService需要.Net 4.5执行环境;
2、网页浏览器必须支持HTML5;
3、WinXP不支持.Net 4.5,所以ZMPrintService仅支持Win7及以上版本操作系统。.
使用步骤:
1、 运行ZMPrintService.exe程序,软件将自动最小化到右下角系统托盘。
2、 右键单击系统托盘图标,可以显示主界面、创建桌面快捷方式、设置开机自动启动,或退出软件(注意点击软件界面的X号将自动最小化,并不能退出软件)。
3、 主界面可以更改服务的端口号和打印方向,修改后即时生效。
4、 ZMPrintService.exe运行后,网页上才能正常预览和打印,建议设置为开机自动启动。
5、 同一个局域网内其他电脑或手机、iPad等可通过浏览器远程访问连接打印机的电脑ip进行网络打印。
注意事项:
1、 需将ZMPrintService.zip解压缩到某个指定目录下。
2、 Win10系统使用IE或者Edge浏览器,可能会因为安全性设置的问题而不能连接打印后台,需要做如下设置:
1) 打开控制面板->Internet选项;
2) 在弹出的“Internet属性”窗口中,选择“安全”选项卡;
3) 在“选择一个区域以查看或更改安全设置”下方框内,选中“本地Intranet”;
4) 点击“本地Intranet”右方的“站点(S)”按钮;
5) 在弹出的“本地Intranet”窗口中,将所有复选框都取消勾选,点击“确定”按钮;
6) 关闭“Internet属性”窗口,即可正常连接打印后台。
函数说明:
因为浏览器安全机制的限制,网页上不能直接操作条码打印机设备,需要通过开发浏览器对应的插件。但浏览器众多,针对每一个浏览器都开发插件不太现实,工作量巨大且维护困难。
WebSocket API是下一代客户端-服务器的异步通信方法。该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序。WebSocket目前由W3C进行标准化。WebSocket已经受到Firefox 4、Chrome 4、Opera 10.70以及Safari 5等浏览器及他们更新版本的支持。
WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信。
所以,您可以将ZMPrintService.exe程序理解为连接网页和打印机之间的桥梁。
它接收到网页端传过来的信息,如果需要和打印机交互,那么调用dll内相应的函数控制打印机,并将结果发送回网页端,由网页端再进行处理。
所以网页打印和调用dll打印使用的函数一样的,只是调用方式有所区别。dll具体的函数说明请参阅《ZMPCL_DLL函数说明_V****.pdf》文件。
如果C#中我们是这样调用dll函数:
int errorcode = ZMPCL.OpenPort(255);//打开当前电脑连接的USB端口打印机,不需要安装驱动
if (errorcode != 0) {
MessageBox.Show("打开打印机USB端口出错,代码为:" + errorcode.ToString() + "\r\nError opening the printer USB port, the code is:" + errorcode.ToString());return;}
ZMPCL.ZM_ClearBuffer();//清空缓存
ZMPCL.ZM_SetPrintSpeed(4);//设置打印速度
ZMPCL.ZM_SetDarkness(10);//设置打印黑度
ZMPCL.ZM_SetLabelWidth(400);//设置标签宽度
ZMPCL.ZM_SetLabelHeight(800, 16);//设置标签高度和间隙
网页内我们改为这样:
wsocket.send('OpenPort|255');//打开端口,如打开出错,ZMPrintService将错误代码返回给网页,需要网页端处理并终止继续发送函数指令。
wsocket.send('ZM_ClearBuffer');//清空
wsocket.send('ZM_SetPrintSpeed|4');//设置速度
wsocket.send('ZM_SetDarkness|10');//设置黑度
wsocket.send('ZM_SetLabelWidth|400');//设置标签宽度
wsocket.send('ZM_SetLabelHeight|800|16');//设置标签高度和间隙
wsocket.send函数内格式如下:
wsocket.send('dll中的函数名|参数1|参数2|参数3');
函数名及各个参数之间用竖线“|”分隔,如果打印的内容需要用到“|”,则需要使用“||”转义。
注意:
«ZMPrintService并没有解析全部ZMPCL.dll的函数,只对常用的大多数函数做了解析,如果您在使用过程中需要用到ZMPrintService还不支持的函数,请联系我们添加。
«所有函数内的坐标、宽高等参数,单位都是点(dot)。毫米(mm)转换为点(dot)的公式如下:
mm * printerDPI / 25.4;//mm换算为dot,需要知道打印机的打印分辨率
除了支持ZMPCL.dll的函数外,ZMPrintService也自定义了以下函数:
1、 预览标签:ZM_PrintLabel_Preview
调用格式:
wsocket.send('ZM_PrintLabel_Preview|203|0|1');//预览标签。
参数1为打印机分辨率;参数2为图片的宽度(高度自动按比例缩放),如果值为0则原始尺寸;参数3为边框的粗细,0为不画边框。
该函数调用后,将返回标签图片的Base64字符串,返回格式是:
ZM_PrintLabel_Preview:标签图片的Base64编码字符串
在网页端的wsocket.onmessage = function(receiveMsg) (接收服务端数据返回)函数中处理收到的图片数据。
if(receivecontent.startsWith("ZM_PrintLabel_Preview:")) { //返回的标签预览图片数据
var imagebase64string=receivecontent.replace("ZM_PrintLabel_Preview:","");
document.getElementById("pvimg").src = imagebase64string;//赋值图片的Base64字符串数据
}
2、 打印一张图片(Base64编码字符串):PrintBase64Image
调用格式:
wsocket.send(' PrintBase64Image|24|24|图片的Base64编码字符串');
或
wsocket.send(' PrintBase64Image|24|24|120|60|图片的Base64编码字符串');//指定图片的宽度和高度
(1)不指定图片宽度高度的参数:
参数1为图片左上角的起始坐标X;参数2为图片左上角的起始坐标Y;参数3为图片的Base64编码字符串。
(2)指定图片宽度高度的参数:
参数1为图片左上角的起始坐标X;参数2为图片左上角的起始坐标Y;参数3为图片的宽度;参数4为图片的高度;参数5为图片的Base64编码字符串。
无返回值。
3、 读取打印机型号及序列号:ZM_GetPrinterNameAndSN
调用格式:
wsocket.send('ZM_GetPrinterNameAndSN');
无参数。
该函数调用后,将返回当前连接的打印机名称,端口号,序列号,如果有多台,则用符号“||”间隔,格式如下:
打印机型号名称,USB端口号,主板序列号(||打印机型号名称,USB端口号,主板序列号)
4、 写入NDEF格式网址:ZM_HF_RW_NDEFURL
注意:该函数仅支持RFID高频标签打印机。
调用格式:
wsocket.send('ZM_HF_RW_NDEFURL|网址');
参数1为需要写入的网址,以http://或者https://开头。
无返回值。
5、 写入NDEF格式文本:ZM_HF_RW_NDEFTEXT
注意:该函数仅支持RFID高频标签打印机。
调用格式:
wsocket.send(' ZM_HF_RW_NDEFTEXT |文本');
参数1为需要写入的文本。
无返回值。
2021-09-10