干货:安卓PDA驱动打印机实现攻略

摘要:通过蓝牙连接打印机(打印机需选配蓝牙模块,以BLE方式传输数据,不需要配对)

通过蓝牙连接打印机(打印机需选配蓝牙模块,以BLE方式传输数据,不需要配对)

蓝牙需要引用相关包,这里不写详细代码,只给出流程。

(1)搜索蓝牙设备,并得到选定的蓝牙设备GUID(如果已经得到GUID,则跳过此步)

(2)通过已知的GUID连接蓝牙设备

(3)得到连接的设备,设置数据包大小,连接时间等

(4)获取服务

(5)从服务中获取写特性

(6)通过写特性写入数据

编程建议:

1、将需要打印在标签表面的内容,画在一张图片里,如PageBitmap

图片的像素大小需要根据打印机分辨率换算,如标签的宽70mm,高30mm,标签之间间隔5mm,

打印机的分辨率是300dpi,则换算出如下数据(四舍五入):

图片的像素宽度是:70*(300/25.4)=827

图片的像素高度是:30*(300/25.4)=354

间隔的像素高度是:5*(300/25.4)=59

2、将画好的图片转为GW指令的数据

int imagebytes = 0;//每行数据的字节数(1Byte=8bits)

int imageheight = 0;//图形的高度;以点(dots)为单位.

byte imagedata;//二进制图形数据

GetGWDataFromBitmap(PageBitmap, out imagebytes, out imageheight, out imagedata);//图片转换为GW数据

//该函数代码详见后附页

3、如果需要写入RFID数据,则增加RF指令

4、将所有控制指令及数据发送给打印机

生成发送给打印机的数据:

List

//设置打印速度黑度及标签尺寸

string commandstring = "";//发送给打印机的控制指令字符串

commandstring += "I8,1,001 ";

commandstring += "S40 ";//打印速度

commandstring += "H10 ";//打印黑度

commandstring += "q827 ";//设置标签宽度

commandstring += "Q354,59 ";//设置标签高度及间隙

commandstring += "N "//清除缓存

byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(commandstring));//将字符串转为字节数据,并添加进列表

//打印整个页面内容

int imagebytes = 0;//每行数据的字节数(1Byte=8bits)

int imageheight = 0;//图形的高度;以点(dots)为单位.

byte imagedata;//二进制图形数据

GetGWDataFromBitmap(PageBitmap, out imagebytes, out imageheight, out imagedata);//页面图片转换为GW数据

byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes("GW0,0," + imagebytes + "," + imageheight));//GW打印图片

byteSource.AddRange(imagedata);

byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(" "));

//如果需要写入RFID数据,则使用下面代码

string rfidcommandstring += "RS0,0,0,2,0 ";//设置出错重试次数为2,即连续两次出错提示

string RfidData=”2021011100020001”;//需要写入芯片的16进制格式数据,建议字符串长度为8的倍数

int RfidDataLength= RfidData/2;//写入的字节数

rfidcommandstring += "RF1,0,0," + RfidDataLength + ",1,"" + RfidData + "" ";//写入RFID标签芯片

byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes(rfidcommandstring));//将RFID字符串转为字节数据,并添加进列表

//开始打印

byteSource.AddRange(System.Text.Encoding.UTF8.GetBytes("W1,1 "));//将打印指令添加进列表

byte data= byteSource.ToArray;//将字节列表中的所有数据转为byte数组,然后发给打印机即可。

来源:RFID从业者

相关推荐