广告招募

当前位置:全球工厂网 > 技术中心 > 所有分类

ZMPrintService使用说明

2025年09月06日 09:37:33      来源:深圳致明兴科技有限公司 >> 进入该公司展台      阅读量:6

分享:

概述

在条码打印机的系统应用上,B/S模式,即Browser/Server(浏览器/服务器)架构,是常用的一种方式。

以前通常的方法是使用ActiveX控件,即ocx控件,可以使IE浏览器像调用dll一样调用打印控制函数,控制打印机的输出和得到打印机的返回数据。但使用ocx有个很明显的弊端,它只支持IE,不支持FirefoxChrome、甚至Edge等浏览器,在安卓或苹果终端,也没办法使用。

为此我们推出这个网页端打印服务端:ZMPrintService,它使用HTML5WebSocket API,可以替换ocx。而且即使您已经使用ocx开发了系统,也只需要修改少量的代码即可转换过来。

ZMPrintService支持ZMPCL.dll的函数,使得您在网页上可以轻松控制打印机,支持一维条码、二维条码、文字、图片等的打印,支持RFID标签的读写,还可实现打印预览,功能很强大也很实用。

它小巧精干,界面简洁,设置方便,处理效率高,适合网页上快速预览或打印输出标签。

系统需求:

1、运行ZMPrintService需要.Net 4.5执行环境;

2、网页浏览器必须支持HTML5

3WinXP不支持.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属性”窗口,即可正常连接打印后台。


函数说明:

因为浏览器安全机制的限制,网页上不能直接操作条码打印机设备,需要通过开发浏览器对应的插件。但浏览器众多,针对每一个浏览器都开发插件不太现实,工作量巨大且维护困难。

WebSocketAPI是下一代客户端-服务器的异步通信方法。该通信取代了单个的TCP套接字,使用wswss协议,可用于任意的客户端和服务器程序。WebSocket目前由W3C进行标准化。WebSocket已经受到Firefox 4Chrome 4Opera 10.70以及Safari 5等浏览器及他们更新版本的支持。

WebSocketAPI最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。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:")){ //返回的标签预览图片数据

varimagebase64string=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

版权与免责声明:
1.凡本网注明"来源:全球工厂网"的所有作品,版权均属于全球工厂网,转载请必须注明全球工厂网。违反者本网将追究相关法律责任。
2.企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
3.本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。 4.如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系。