近日需求,有一个windows系统的设备web点餐系统,需要移植到Android 平板端, 需要考虑的交互主要就是通过 JS 传入打印数据到 WebView 之后,通过 Android 调用打印机打印小票了,这需要查找打印机品牌设备的对应 的 SDK。
接下来就是直接通过Android 封装一个WebView进行网页的展示,添加对javascript的支持 交互,还有一些细微的处理而已。
这里只讲解下如何植入使用 EPSON 品牌的打印机 SDK 。本例子使用 ESPON TM-T88IV 系列热敏打印机 进行打印小票,其它系列打印机也类似代码中通过创建打印类时指定系列。
其它打印机品牌也类似,顶多是使用的指令方式,但是一般都会进行方法封装让开发者更简单的接入。
期间对于打印机这块没啥经验,从 EPSON 官网找到的 SDK Sample 踩了一些坑,完后发现不会很难,即使是英文文档也可以通过谷歌翻译啃下来 ~
本文基于EPSON 爱普生 打印机(看起来这玩意确实很国际化,这个品牌的打印设备种类多挺厉害的)
Google查找到官网 EPSON 并没什么卵用,半天你都看不到SDK文档的下载位置。
搜索 Epson SDK
其实这个官方打印的Demo 里头的话没啥注释应该是外国淫写的,但是读起来还不算太吃力。
这里介绍几个套路:
1. 安装好Demo之后你会发现,我手机App连接着USB调试呢,待会咋通过USB连打印机设备呢。 这里就可以使用WIFI调试 进去搜索 无线连接(需要借助 USB 线)了, 记得手机连接到打印机设备需要一条转换头的线
操作步骤:
1. 将 Android 设备与要运行 adb 的电脑连接到同一个局域网,比如连到同一个 WiFi。
2. 将设备与电脑通过 USB 线连接。
应确保连接成功(可运行 `adb devices` 看是否能列出该设备)。
3. 让设备在 5555 端口监听 TCP/IP 连接:
```source-shell
adb tcpip 5555
```
4. 断开 USB 连接。
5. 找到设备的 IP 地址。
一般能在「设置」-「关于手机」-「状态信息」-「IP地址」找到,也可以使用下文里 [查看设备信息 - IP 地址](https://github.com/mzlogin/awesome-adb#ip-%E5%9C%B0%E5%9D%80) 一节里的方法用 adb 命令来查看。
6. 通过 IP 地址连接设备。
```source-shell
adb connect <device-ip-address>
```
这里的 `<device-ip-address>` 就是上一步中找到的设备 IP 地址。
7. 确认连接状态。
```source-shell
adb devices
```
如果能看到
```source-shell
<device-ip-address>:5555 device
```
说明连接成功。
2. EPOSN SDK 打印的步骤 (详细查看Demo)
(2.1) 先通过USB广播监听内,开启发现打印机设备,完后会有个回调监听获取已连接的打印机设备的 TargetId(初始化打印需要使用到它);
(2.2) 需要通过初始化 Printer打印类 ,并且设置打印监听;
(2.3) 创建打印数据添加到已创建到 Printer对象 中,设置小票字体样式都在这里进行设置;
(2.4) 连接到打印设备并且通过 sendData() 方法发送到命令缓冲区进行打印;
(2.5) 完成打印,清空命令缓冲区,关闭释放打印对象 。
3. 接下来到就是调试和再到植入自己的App了,期间可能会出现很多 ERRO 错误不要慌,基本上copy 在文档进行查询都能够解决问题。
4. 打印中文繁体的设置
通过 addTextLang(Printer.LANG_ZH_TW);//繁体,看内部参数即可查找
mPrinter.addText("取號時間取號時間 取號時間取號時間\n ");
5. 如果植入你的App时最好把开启搜索的代码 放入application中去初始化,获取到target之后记录并 停止搜索 ;不能写死打印机target直接连接,必须通过开启的方式去获取
try {
Discovery.start(this, mFilterOption, mDiscoveryListener);//开启
} catch (Exception e) {
ShowMsg.showException(e, "start", mContext);
}
Discovery.stop();//关闭方法可以写在设备连接监听 mDiscoveryListener
- 5.1 在开启打印的时候 运行MainActivity中的代码,封装整理成一个打印类传入数据就好。
6. 关于打印格式的问题,我这边的处理是根据和后台的协商定义好的一套规则,说白了就是指令和打印文本一同返回, 逐一解析指令转换成EPSON SDK封装好的方法即可。这样比较灵活些。tips:命令缓冲区中每处于一个模式的指令之后需要切换回原来的固定格式。也就是如下
mPrinter.addTextSize(2, 2);//打印下一个字符集的时候定义字体大小
method = "addText";
mPrinter.addText("TOTAL 174.81\n");
method = "addTextSize";
mPrinter.addTextSize(1, 1);//继续以默认字体继续打印以下内容
使用谷歌翻译的 Printer 打印类的所有方法,传参都复制方法进去文档中查找即可
控制打印机打印。有两种打印模式可供选择;标准和页面模式。
✔✔意思两种模式都能使用该方法
标准模式逐行打印。行间距根据字符大小、图像大小和条码高度自动调整。适合印刷收据,其印刷长度因印刷内容而异。
页面模式打印页面的页面。在一个被定义为打印区域的页面上打印字符、图像和/或条码。
要在页面模式中打印,请分别使用addPageBegin和addPageEnd来开始和结束页面模式流程。
通信路径连接到打印机。断开与打印机的断开。状态监视器startMonitor启用状态事件通知。
✔✔stopMonitor 禁用状态事件通知。
✔✔地位acquisi,getStatus 获得连接打印机的状态。
✔✔传输sendData 将命令发送到打印机
✔✔事务beginTransaction 开始一个事务。
✔✔endTransaction 结束一个事务。
✔✔打印作业requestPrintJobStatus 获得打印结果。
✔✔缓冲区清除clearCommandBuffer 清除命令缓冲区。
- ✔✔文本
addTextAlign 添加文本对齐方式设置为com缓冲区。
✔- addLineSpace 将行间距设置添加到命令缓冲区
。✔✔addTextRotate 添加文本旋转设置命令缓冲区。
✔ addText 将文本添加到打印命令缓冲区。
✔✔addTextLang 将语言设置添加到命令缓冲区。
✔✔addTextFont 添加字符的字体设置为com缓冲区。
✔✔addTextSmooth 将字符平滑设置添加到命令缓冲区。
✔✔addTextSize 添加字符比例因子设置命令缓冲区。
✔✔addTextStyle 将字体设置添加到com缓冲区。
✔✔addHPosition 添加字符打印位置设置命令缓冲区。
✔✔馈纸
addFeedUnit 添加进纸设置点com的缓冲区。
✔✔addFeedLine 添加进纸设置在com行缓冲。
✔✔图形
- addImage 将光栅图像打印命令添加到命令缓冲区。
✔✔addLogo NV 打印机内置logo 标志打印命令添加到com缓冲区。
✔✔Barcode addBarcode 向com - mand缓冲区添加条形码打印命令。
addSymbol 添加一个2 d标志打印命令的命令缓冲区。二維碼使用它詳情查看文檔
✔✔统治
addHLine 行添加一个水平统治行打印命令来命令缓冲区。
✔——addVLineBegin 添加一个垂直统治开始命令行命令缓冲区。
✔——addVLineEnd 添加一个垂直统治结束命令行命令缓冲区。
✔页模式
addPageBegin 添加一个页面模式启动命令,命令缓冲区。
✔——addPageEnd 添加一个页面模式结束命令的命令缓冲区。——
✔addPageArea 添加页面模式打印区域设置命令缓冲区。——
✔addPageDirection 添加页面模式打印方向设置命令缓冲区。——
✔addPagePosition 添加页面模式打印位置设置命令缓冲区。——
✔addPageLine 添加一个页面模式绘制命令行命令缓冲区。——
✔addPageRectangle 添加一个页面模式矩形画com命令缓冲区。——
✔削减
addCut 将一张切命令添加到com缓冲区。
✔抽屉
addPulse 将抽屉踢命令添加到com缓冲区。
✔蜂鸣器
addSound 添加一个蜂鸣器声音命令com缓冲区。
✔标签纸/污点
addFeedPosition 增加了纸饲料命令com缓冲区。
✔——addLayout 添加表布局设置命令缓冲区。
✔——命令addCommand 将命令添加到命令缓冲区。
官网代码没注释,这里奉上自己封装过的打印类并且带有注释的 GitHub地址: EpsonPrinterSample Res资源目录内涵Epson SDK开发文档 .