iOS蓝牙打印商品价格标签的模板及打印交易小票的模版

简介: iOS蓝牙打印商品价格标签的模板及打印交易小票的模版

前言

1、应用场景:打印商品价格标签、打印交易小票 2、特色功能:实现自动连接最近使用的打印机、统一处理蓝牙状态 3、原理文章:https://kunnan.blog.csdn.net/article/details/85684014 4、解决的问题:人民币¥符号乱码的问题 private

  • 效果图

价格标签打印(品名支持多行显示)

image.png

  • 票据打印(自动实现%ns 自动补齐空格的功能)
image.png
  • 切换佳博打印机的打印模式方法

按住FEED键 和Pause键,再打开开机键开机,

I 、获取标签打印命令

-(NSData *)price_tscCommand{
    TscCommand *command = [[TscCommand alloc]init];
    [command addSize:40 :60];
    [command addGapWithM:2 withN:0];
    [command addReference:0 :0];
    [command addTear:@"ON"];
    [command addQueryPrinterStatus:ON];
    [command addCls];
    CGFloat marg = 10;
    CGFloat topY = 5;
    [command addTextwithX:200 withY:0+topY withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:@"商品名称"];// 字的高度30
    // 间距10
    //0、Barcode
    [command addTextwithX:30 withY:30+marg+topY withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:@"2017.01.31"];
    [command add1DBarcode:30 :70 :@"CODE128" :100 :1 :0 :2 :2 :@"1kn23456984"];
    [command addTextwithX:47 withY:200+marg+topY withFont:@"TSS24.BF2"
             withRotation:0 withXscal:1 withYscal:1 withText:@"6666.81/件"];// ¥
    //1、¥
    UIImage *image = [CtrlViewController imageFromText:@"¥" withFont:[UIFont systemFontOfSize:15] withColor:[UIColor blackColor]];
    [command addBitmapwithX:30 withY:200+marg withMode:0 withWidth:15 withImage:image];
    [command addPrint:1 :1];// M 行 n :列 打印两份
    return [command getCommand];
}

1.1 解决人民币¥符号乱码的问题

/**
 将文字转为UIImage,用于打印¥,来避免乱码
 */
+(UIImage *)imageFromText:(NSString*)text withFont: (UIFont *)font withColor:(UIColor *)color
{
    CGSize size = [text sizeWithFont:font constrainedToSize:CGSizeMake(MAXFLOAT, MAXFLOAT)];
    CGRect rect = CGRectMake(0, 0, size.width, size.height);
    UIGraphicsBeginImageContextWithOptions(size,YES,0.0);
    NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    paragraphStyle.lineBreakMode = NSLineBreakByClipping;
    NSDictionary*attribute = @{NSFontAttributeName:font,
                               NSParagraphStyleAttributeName:paragraphStyle,
                               NSForegroundColorAttributeName:color
                               };
    //1、针对打印机的特性:字体为黑色,因此设置背景颜色为b白色
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
    CGContextFillRect(context, CGRectMake(0, 0, 200, 200));
    //2、将文字绘画进上下文
    [text drawWithRect:rect options:NSStringDrawingUsesLineFragmentOrigin attributes:attribute context:nil];
    //3、从上下文获取图片
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

II、获取票据打印命令

2.1  门店票据:使用字符串格式化进行排版

完整代码请查看原文

2.2 避免乱码问题,推荐使用%n@ 进行格式化,而非%ns

NSString *text = [NSString stringWithFormat:@"%8@\t%8@\n",column1str,column2str];
  • 不推荐的格式化方式
NSString *text = [NSString stringWithFormat:@"%8s\t%8s\n",column1str.UTF8String,column2str.UTF8String];

2.3 自动实现%ns 自动补齐空格的功能

完整代码请查看原文

III、 实现自动连接最近使用的打印机

- (void)connectLastPrint{
    __weak __typeof__(self) weakSelf = self;
    [KNConnecterManagerTool listenBluetoothpoweredState:^(CBPeripheral * _Nullable peripheral) {
        return [weakSelf setupConnectPeripheral:peripheral];
    }];
}
-(void) setupConnectPeripheral:(CBPeripheral *_Nullable)peripheral{
    if ([peripheral.identifier.UUIDString isEqualToString:KBLUETOOTH]) {
        NSLog(@"相同则开始连接此蓝牙");
        [Manager connectPeripheral:peripheral options:nil timeout:50 connectBlack:^(ConnectState state) {
            if (state == CONNECT_STATE_CONNECTED) {
                [Manager stopScan];
                // 修改状态
                [self setupCONNECT_STATE_CONNECTED:peripheral];
            }else if (state == CONNECT_STATE_TIMEOUT || state == CONNECT_STATE_FAILT || state == CONNECT_STATE_DISCONNECT){
                if (state == CONNECT_STATE_DISCONNECT) {
                    [self setupCONNECT_STATE_DISCONNECT];
                    return ;
                }
                [SVProgressHUD showInfoWithStatus:@"请尝试重启蓝牙printer"];
                [self connectLastPrint];
            }
        }
         ];
    }
    else{
        NSLog(@"未找到该设备");
    }
}
/**
 *  断开连接
 */
- (IBAction)disconnectAction:(id)sender {
    [Manager close];
}
#pragma mark - ******** 连接成功之后的处理,以便connectLastPrint
完整代码请查看原文

#define kUserDefaults       [NSUserDefaults standardUserDefaults]
#define KBLUETOOTH         [kUserDefaults valueForKey:@"blueTooth"]//商户连接过的打印

IV、常见问题

4.1 iOS蓝牙状态的处理【蓝牙关闭及未授权的处理】

4.2  CBCentralManagerStateUnsupported

如果使用timeout 时间太长容易导致这个问题,修改为时间小些就可以,例如2。

[Manager connectPeripheral:peripheral options:nil timeout:50 connectBlack:^(ConnectState state) {

V、 see also

目录
相关文章
|
5月前
|
存储 Android开发 iOS开发
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
iOS不支持HEIC格式的图片显示和标签函数显示问题及解决方案
138 0
|
5月前
|
iOS开发
iOS中如何显示后台返回的带有html标签的富文本字符串
iOS中如何显示后台返回的带有html标签的富文本字符串
52 0
|
5月前
|
移动开发 小程序 API
uniapp通过蓝牙传输数据 (ios)
uniapp通过蓝牙传输数据 (ios)
256 1
|
小程序 JavaScript API
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
支付宝微信小程序连接蓝牙兼容IOS和安卓(开源)
163 0
|
数据可视化 数据挖掘 iOS开发
iOS MachineLearning 系列(21)——CoreML模型的更多训练模板
前面文章中,有介绍如何训练生成定制化需求的 CoreML 模型,以图像分类为例做了演示.
196 0
|
小程序 Android开发 iOS开发
微信小程序连接蓝牙工具类支持IOS和安卓
微信小程序连接蓝牙工具类支持IOS和安卓
218 0
|
移动开发 前端开发 JavaScript
IOS开发:UniAPP实现BLE低功耗蓝牙开发1
1、Uni-app介绍 2、Uni-app优点 3、BLE开发流程
IOS开发:UniAPP实现BLE低功耗蓝牙开发1
|
开发工具 iOS开发 git
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
207 0
iOS开发 - 类似美团选商品页,从按钮上往上滑动,tableview依然响应,点击按钮,按钮也可响应
|
移动开发 JavaScript weex
week-iOS的扩展之内置模块,将原生模块做成标签在weex中使用
week-iOS的扩展之内置模块,将原生模块做成标签在weex中使用
115 0
week-iOS的扩展之内置模块,将原生模块做成标签在weex中使用
|
Android开发 iOS开发
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。
402 0
iOS开发 - 商品详情页两种分页模式,只提供思路和实现方式。