网上关于通过android来操作打印机的例子太少了,为了方便更多的开发同仁,将近日所学分享一下。
我这边是通过android设备通过无线来对打印机(佳博58mm热敏式-58130iC)操作,实现餐厅小票的打印。写了一个简单的小demo,分享下。
前提:
1、android设备一个(coolPad8085N)
2、小票打印机(佳博 58mm热敏式打印机-58130IC)
这里将打印机IP设置为固定IP(这里略微复杂,是前辈设置过的,我没有具体操作,问了一下:打印机自检出的条子可以显示IP、通过自带或者官网的window管理软件设置)
3、无线路由器一个(从局域网口引出一根网线接到小票打印机网口)
4、android设备连接wifi到同一网络
(这样就保证了android和打印机在同一网络内,并且打印机的IP是固定的,开发人员是知道的,很变态)
流程:
1、android运行app,根据打印机的IP地址和端口号创建套接字socket,得到可写流outputStream
2、根据订单号,获取订单信息(demo是模拟的)
3、套入模板,打印小票
难点在于小票的排版的实现,我做了个工具库,如下:
1 packagecom;2
3
4
5 public classprinterCmdUtils {6
7 public static final byte ESC = 27;//换码
8 public static final byte FS = 28;//文本分隔符
9 public static final byte GS = 29;//组分隔符
10 public static final byte DLE = 16;//数据连接换码
11 public static final byte EOT = 4;//传输结束
12 public static final byte ENQ = 5;//询问字符
13 public static final byte SP = 32;//空格
14 public static final byte HT = 9;//横向列表
15 public static final byte LF = 10;//打印并换行(水平定位)
16 public static final byte CR = 13;//归位键
17 public static final byte FF = 12;//走纸控制(打印并回到标准模式(在页模式下) )
18 public static final byte CAN = 24;//作废(页模式下取消打印数据 )19
20
21
22 //------------------------打印机初始化-----------------------------
23
24
25 /**
26 * 打印机初始化27 *@return
28 */
29 public static byte[] init_printer()30 {31 byte[] result = new byte[