前段时间做了一个收银的项目,里面要用到链接小票打印机打印小票的功能,牵涉到ios的蓝牙链接,打印指令等方面内容,这里总结一些使用心得。
关于ios系统的蓝牙,现在的ios支持的是蓝牙4.0,一般意义的蓝牙教程也都是关于蓝牙4.0的了。常规的操作这里不进行介绍,给大家推荐一个开源的iOS蓝牙项目,BabyBluetooth ,BabyBluetooth极好的封装了CoreBluetooth,可以使你更简单的使用CoreBluetooth的API,另外BabyBluetooth采用链式编程,是代码更加简洁优雅。有兴趣的同学可以研究下。
至于打印这块是采用的ESC/POS指令来控制打印机的行为。当然如果你就是使用的EPSON打印机,那么肯定会有相应的SDK的,就省去了使用最原始ESC/POS指令打印的繁琐。ESC/POS指令集网上有很多,自己搜索一些就好了。不过可能有的朋友看了指令集之后仍然不会使用,这里贴一下常用的控制指令:
/**
* 重置打印机
*/
- (void)resetPrinter
{
Byte reset[] = {0x1B,0X40};
[self writeData:[NSData dataWithBytes:reset length:2]];
}
/**
* 唤醒打印机
*/
- (void)wakeUpPrinter
{
Byte wake[] = {0x00};
[self writeData:[NSData dataWithBytes:wake length:1]];
}
/**
* 打印并换行
*/
- (void)printAndGoToNextLine
{
Byte next[] = {0x0A};
[self writeData:[NSData dataWithBytes:next length:1]];
}
- (void)printAndEnter
{
Byte enter[] = {0x0D};
[self writeData:[NSData dataWithBytes:enter length:1]];
}
/**
* 加大字体
*
* @param n 位宽,位高
*/
- (void)enlargeFont:(int )n
{
Byte font[] = {0x1D,0X21,n};
[self writeData:[NSData dataWithBytes:font length:3]];
}
/**
* 设置对齐方式
*
* @param n 0左对齐,1中对齐,2右对齐
*/
- (void)setAlignment:(int)n
{
Byte align[] = {0x1B,0x61,n};
[self writeData:[NSData dataWithBytes:align length:3]];
}
/**
* 打印缓冲区数据并进纸n个垂直点距,0<= n <= 255,一个垂直点距为0.125mm
*
* @param n
*/
- (void)printAndGoNLine:(int)n
{
Byte line[] = {0x1B,0X64,n};
[self writeData:[NSData dataWithBytes:line length:3]];
}
/**
* 结束打印
*/
- (void)printEnd
{
Byte end[] = {0x1d, 0x4c, 0x1f, 0x00};
[self writeData:[NSData dataWithBytes:end length:4]];
}
/**
* 写入数据
*
* @param param 可以是NSData,也可以是NSString
*/
- (void)writeData:(id )param
{
NSData *data = nil;
if ([param isKindOfClass:[NSString class]]) {
NSString *str = (NSString *)param;
data = [str dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)];
}else if