iOS蓝牙打印价签:商品条码、品名、零售价、规格信息等

原创
2021/09/07 00:00
阅读数 302
AI总结

前言

效果

商品名称支持换行显示,商品条码的高度根据商品名称长度自动调整

关键方法

            [command addTextwithX:30 withY:y withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:[NSString stringWithFormat:@"品名:%@",name]];

    // 打印条码
    [command add1DBarcode:30 :y :@"CODE128" :h4add1DBarcode :1 :0 :2 :2 :model.BarCode];
    
    // 设置打印的份数
        
    [command addPrint:1 :1];// M 行 n :列 打印两份
    // 打印标签后 蜂鸣器响
    
    if(model.isaddSound){
        
        [command addSound:2 :100];

    }

I 、 封装的打印方法

/**
是否发出 蜂鸣器响 saddSound
 
 新增一个参数设置打印份数
 [command addPrint:1 :1];// M 行 n :列 打印两份
 */

+ (NSData *)price_tscCommand4GoodInfo:(ERPgoodsManListModel4Print*)model{
    
    TscCommand *command = [[TscCommand alloc]init];
    
    [command addSize:60 :40];
    
    [command addGapWithM:2 withN:0];
    [command addReference:0 :0];
    [command addTear:@"ON"];
    [command addQueryPrinterStatus:ON];
    [command addCls];
    
    CGFloat marg = 10;// 行间距
    CGFloat topY = 15;// 顶部距离

    
    [command addTextwithX:150 withY:0+topY withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:[UserInfoModel.shareUserInfoModel store].storeName4Printer];// 字的高度30

    
    
//    每行显示的中文最大数
    NSInteger lineCharNomaxclos = 14;//列数
    // 允许商品名称显示的最大行数
    NSInteger maxrown = 3;
    
    
    //将字符串按按照指定的个数(14)进行分组



    

    NSMutableArray *parr = [ERPTscCommandTool getStrsSeparatedBylineCharNomaxclos:lineCharNomaxclos maxrown:maxrown ProductNameAndSkuName:model.ProductNameAndSkuName];
        
    
    
    // 设置初始Y
    CGFloat y = 30+marg*2+topY+25*0;
        
    
    // 遍历商品名称分割之后的数组进行布局

    
    for (int i =0; i<parr.count; i++) {
        
        
        NSString* name = parr[i];
         y = 30+marg*(i+1)+topY+25*i;
        
        


        if(i==0){// 打印商品名称的第一行
            
            [command addTextwithX:30 withY:y withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:[NSString stringWithFormat:@"品名:%@",name]];
            

            continue;
        }
        
        // 打印商品名称的其他行
        [command addTextwithX:30 withY:y withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:[NSString stringWithFormat:@"      %@",name]];
        
         
        
    }
    // 每行显示的内容高度25 + 行间距marg 10
    CGFloat lineH = 25+marg;
    
    
    y =  y+lineH;// 设置零售价的Y
    
    [command addTextwithX:30 withY:y withFont:@"TSS24.BF2" withRotation:0 withXscal:1 withYscal:1 withText:[NSString stringWithFormat:@"售价:%@元/%@",[QCT_Common getAmountStr:model.SysPrice],model.unitName]];
    
    

    
    

    y =  y+lineH;// 设置条码的Y

    
    CGFloat h4add1DBarcode = 170 - parr.count*35;
    // 打印条码
    [command add1DBarcode:30 :y :@"CODE128" :h4add1DBarcode :1 :0 :2 :2 :model.BarCode];
    
    // 设置打印的份数
        
    [command addPrint:1 :1];// M 行 n :列 打印两份
    // 打印标签后 蜂鸣器响
    
    if(model.isaddSound){
        
        [command addSound:2 :100];

    }

    
    return [command getCommand];
}

II、打印的数据模型定义

@interface ERPgoodsManListModel4Print : NSObject
/**
 getProductName第一层,getProductSkuName数组里的
 */

@property (nonatomic,copyNSString *ProductNameAndSkuName;
/**
 "售价:" + AmountUtils.getCommaAmount(productSkusBean.getSysPrice()) + context.getString(R.string.yuan) + "/" + productSkusBean.getUnitName() + "\n");
 */

@property (nonatomic,copyNSString *SysPrice;
/**
 BarCode
 
 */

@property (nonatomic,copyNSString *BarCode;

@property (nonatomic,copyNSString *unitName;

/**
 默认不发出,只有最后一个菜发出声音
 */

@property (nonatomic,assignBOOL  isaddSound;


+(NSMutableArray*)getERPgoodsManListModel4PrintWithQCTgoodsManListModel:(id)goodsManListModel;



III、工具方法(将字符串按按照指定的个数(14)进行分组

  • 声明
/**
 
 lineCharNomaxclos : 每行显示最大中文个数
 maxrown: 控制显示的最大行数量
 
 ProductNameAndSkuName: 显示的内容
 */

+ (NSMutableArray*) getStrsSeparatedBylineCharNomaxclos:(NSInteger)lineCharNomaxclos maxrown:(NSInteger)maxrown ProductNameAndSkuName:(NSString*)ProductNameAndSkuName;

  • 使用
    //将字符串按按照指定的个数(14)进行分组

    NSMutableArray *parr = [ERPTscCommandTool getStrsSeparatedBylineCharNomaxclos:lineCharNomaxclos maxrown:maxrown ProductNameAndSkuName:model.ProductNameAndSkuName];

  • 实现
/**
 
 lineCharNomaxclos : 每行显示最大中文个数
 maxrown: 控制显示的最大行数量
 
 ProductNameAndSkuName: 显示的内容
 */

+ (NSMutableArray*) getStrsSeparatedBylineCharNomaxclos:(NSInteger)lineCharNomaxclos maxrown:(NSInteger)maxrown ProductNameAndSkuName:(NSString*)ProductNameAndSkuName{
    
    
       //计算商品名称字符串的需要显示的总行数
       NSInteger rown = (ProductNameAndSkuName.length-1)/lineCharNomaxclos ;//
    


       NSMutableArray *parr =[NSMutableArray array];
    
       for (int i =0; i<=rown; i++) {
           
           
           
           
           if(i>=maxrown){// 控制显示的最大行数量
               
               break ;
           }
           
           
           
           
           CGFloat len = lineCharNomaxclos;
           
           if((lineCharNomaxclos*i+len) >ProductNameAndSkuName.length){
               
               
               len = ProductNameAndSkuName.length-lineCharNomaxclos*i;
               
               
    
           }else{
               
               
           }
           
           
           
           
           NSString *tmp =  [ProductNameAndSkuName substringWithRange:NSMakeRange(lineCharNomaxclos*i, len)];
           
           
           
           
           
           
           [parr addObject:tmp];
           
       }
       
    return parr;
    

}


see also



从CSDN资源下载demo 源码:https://download.csdn.net/download/u011018979/14920529

1、应用场景:打印商品价格标签、打印交易小票

2、特色功能: 实现自动连接最近使用的打印机、统一处理蓝牙状态

3、原理文章:https://kunnan.blog.csdn.net/article/details/85684014

4、解决的问题:人民币¥符号乱码的问题

————————————————

版权声明:本文为CSDN博主「#公众号:iOS逆向」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。


https://kunnan.blog.csdn.net/article/details/85684014

本文分享自微信公众号 - iOS逆向(code4ios)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
ios
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
AI总结
返回顶部
顶部