ESCPOS命令用法

一、ESCPOS 命令 用法

该打印控制命令(WPSON StandardCode for Printer)是EPSO准化指令集,现在已成为针式打印机控制语言事实上的工业标准。集是ESC打印控制命令的简化版本,现在大多数票据打印都采用ESC/POS指令集。其显著特征是:其中很大一部分指令都是以ESC控制符开始的一串代码。

英文模式下的命令

代码 功能

CR 回车

ESC ! 设置打印方式

ESC % 选择或取消用户自定义字符集

ESC & 定义用置位映射方式

ESC @ 初始化打印机

ESC ~ LED ON/OFF

ESC < 返回行首

ESC 2 选择行间距为1/6英寸

ESC 3 设置行进为最小间距

ESC BEL 蜂鸣器ON/OFF

ESC C 设置单页长度

ESCPOS命令用法

ESC c0 选择打印页

ESC c1 选择行间距

ESC c3 选择纸结束信号输出

ESC c4 选择打印纸及检测器(终止打印)

ESC c5 禁止/使能面板开关

ESC c6 禁止/使能ON-LINE开进纸

ESC D 设置TAB位置

ESC e 打印病退回N行

ES

ESC F 选择或取消单页退纸区

ESC i 全切割

ESC J 以最小间距进行打印和进纸

ESC K 和退纸

ESC l 选择或取消倒过来的字符

ESC m 局部切割

ESC o 印章

q 释放纸

ESC r 选择国际字符子集

ESC SP 设置右边界

ESC U 选择或取消单向打印

ESC V 发送打印机状态

ESC z 设置或取消两页并行打印

FF 打印送出单页

HT 水平TAB

LF 换行

RS 流水TAB

二、iOS开发之蓝牙/Socket链接小票打印机(二)

上一篇 主要介绍了部分ESC/POS指令集,包括一些常用的排版指令,打印位图指令等。另外,还介绍了将图片转换成点阵图的方法。在这篇文章中,将主要介绍通过蓝牙和Socket连接打印机,发送打印指令相关知识。这里将用到 CoreBluetooth.framework 和 CocoaAsyncSocket 。

蓝牙是一种支持设备间短距离通讯的无线电技术。iOS系统中,有四个框架支持蓝牙链接:

CoreBluetooth框架有两个核心概念,central(中心)和 peripheral(外设),它们分别有自己对应的API;这里显然是手机作为central,蓝牙打印机作为peripheral;

设置代理后,会回调此方法,确认蓝牙状态,当状态为 CBCentralManagerStatePoweredOn 才能去扫描设备,蓝牙状态变化时,也会回调此方法

调用此方法开始扫描外设

注意:第一个参数指定一个 CBUUID 对象数组,每个对象表示外围设备正在通告的服务的通用唯一标识符(UUID)。此时,仅返回公布这些服务的外设。当参数为 nil ,则返回所有已发现的外设,而不管其支持的服务是什么。

当扫描到4.0外设后会回调此方法,这里包含设备的相关信息,如名称、UUID、信号强度等;

调用此方法连接外设 [self.centralManager connectPeripheral:peripheral options:nil];

注意:第一个参数是要连接的外设。第二个参数 options 是可选的 NSDictionary ,系统定义了一下三个键,它们的值都是NSNumber (Boolean);默认为NO。当设置为YES,则应用进入后台或者被挂起后,系统会用Alert通知蓝牙外设的状态变化,效果是这样

连接成功或失败,都有对应的回调方法

连接成功后设置代理 peripheral.delegate = self ,调用 [peripheral discoverServices:nil]; 寻找外设内的服务。这里的参数是一个存放 CBUUID 对象的数组,用于发现特定的服务。当传nil时,表示发现外设内所有的服务。发现服务后系统会回调下面的方法:

发现服务后,调用 [peripheral discoverCharacteristics:nil forService:service]; 去发现服务中包含的特征。和上面几个方法一样,第一个参数用于发现指定的特征。为nil时,表示发现服务的所有特征。

当扫描到写入特征时,保存,用于写入数据。

写入数据,我们只需要调用方法

这里的 self.peripheral 就是连接的外设, self.characteristicInfo 就是之前保存的写入特征;这里最好使用 CBCharacteristicPropertyWrite 特征,并且 type 选择 CBCharacteristicWriteWithResponse 。当写入数据成功后,系统会通过下面这个方法通知我们:

由于蓝牙设备每次可写入的数据量是有限制的,因此,我们需要将之前拼接的打印数据进行拆分,分批发送给打印机

这里的 MAX_CHARACTERISTIC_VALUE_SIZE 是个宏定义,表示每次发送的数据长度,经笔者测试,当 MAX_CHARACTERISTIC_VALUE_SIZE = 20 时,打印文字是正常速度。但打印图片的速度非常慢, 应该在硬件允许的范围内,每次发尽量多的数据。 不同品牌型号的打印机,这个参数是不同的,笔者的蓝牙打印机该值最多到140。超出后会出现无法打印问题。 最后笔者将该值定为 MAX_CHARACTERISTIC_VALUE_SIZE = 120 ,测试了公司几台打印机都没有问题。

另外iOS9以后增加了方法 maximumWriteValueLengthForType: 可以获取写入特诊的最大写入数据量,但经笔者测试,对于部分打印机(比如我们公司的)是不准确的,因此,不要太依赖此方法,最好还是自己取一个合适的值。

注意:每个打印机都有一个缓冲区,缓冲区的大小视品牌型号有所不同。打印机的打印速度有限,如果我们瞬间发送大量的数据给打印机,会造成打印机缓冲区满。缓冲区满后,如继续写入,可能会出现数据丢失,打印乱码。

这里使用 CocoaAsyncSocket 开源框架,与打印机进行 Socket 连接。 CocoaAsyncSocket 中主要包含两个类:

这里我们只用到 GCDAsyncSocket ,因此只需要将 GCDAsyncSocket.h 和 GCDAsyncSocket.m 两个文件导入项目。

注意:手机和打印机必须在同一局域网下,设置到打印机的host和port。

连接成功后会通过代理回调

Timeout为负,表示不设置超时时间。这里的data就是 上一篇 中拼接的打印数据。

写入完成后回调

断开连接有以下几种方法

连接断开后回调

读取到数据会回调

网口打印机一般都支持状态查询,查询指令如下:

可以通过 上一篇 介绍指令拼接方法,查询打印机的状态。

本篇只是简单介绍了,通过蓝牙和Socket连接打印机的方法。虽然可以初步完成连接和打印,但是,在真正的项目中使用还是远远不够的。这里还有很多情况需要考虑,比如连接断开、打印机异常、打印机缓冲区满、打印机缺纸等。我们可以针对自身的业务情况,进行相应的处理。

Core Bluetooth Programming Guide

Getting the pixel data from a CGImage object

Core Bluetooth Programming Guide

三、escpos指令怎么用c++

做一个触摸屏查询系统,要打开新页面后关闭父界面百度之functionopennewwindow(){window.open(”index.aspx”,“”,“left=30,top=30,toolbar=no,menubar=no,scrollbars=no,resizable=no,status=no,location=no,directories=no,copyhistory=no,height=620,width=820”);window.opener=null;window.open(“”,“_self”);window.close();}这样写的话,由于窗口拦截的原因,会使新窗口打不开,而且原来的窗口也被关闭了于是再查询找到解决去方法在新页面中onload=“window.opener。opener=null;window.opener.close();”

本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。