前言
效果
商品名称支持换行显示,商品条码的高度根据商品名称长度自动调整
关键方法
[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,copy) NSString *ProductNameAndSkuName; /** "售价:" + AmountUtils.getCommaAmount(productSkusBean.getSysPrice()) + context.getString(R.string.yuan) + "/" + productSkusBean.getUnitName() + "\n"); */ @property (nonatomic,copy) NSString *SysPrice; /** BarCode */ @property (nonatomic,copy) NSString *BarCode; @property (nonatomic,copy) NSString *unitName; /** 默认不发出,只有最后一个菜发出声音 */ @property (nonatomic,assign) BOOL 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; }