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 设置单页长度

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();”