前言
效果
商品名称支持换行显示,商品条码的高度根据商品名称长度自动调整
关键方法
[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;
}
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版权协议,转载请附上原文出处链接及本声明。
-
iOS TscCommand 【打印价格标签的模板及打印小票的模版、 实现自动连接最近使用的打印机】 (针对佳博GP-2120TU型号)
https://kunnan.blog.csdn.net/article/details/85684014
本文分享自微信公众号 - iOS逆向(code4ios)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。