Objective-C

1-OC Framework下载地址:

Framework


2-导入 framework

  • 必须导入:adapter.framework、father.framework

  • 按需导入:cpcl.framework、esc.framework、tspl.framework。


3-根据打印机选择指令:

  • ESC 指令 导入 IbridgeBleApi;
  • CPCL 指令 导入 FscBleApi;
  • TSPL 指令 导入 applebleApi.

4.Demo 下载地址

demo


5.How to use

5.1-TSPL

#import <tspl/tspl.h>
#import <tspl/GenericTSPL.h>
@interface TSPLVC ()

@property (nonatomic , strong) CBPeripheral *currentConnectedPeripheral;
@property (nonatomic , strong) BasicTSPL *basicTspl;
@property (nonatomic , strong) Lifecycle *lifeCycle;

@end

@implementation TSPLVC

- (void)viewDidLoad {
    [super viewDidLoad];
    // 初始化
    _lifeCycle = [[Lifecycle alloc]init];
    _lifeCycle.connectedDevice(self.device);
    _basicTspl = [[BasicTSPL alloc]init];
    _basicTspl.BasicTSPL(_lifeCycle, TSPLPrinter_GENERIC);
    __weak typeof (self) weakSelf = self;
    // 接收打印机回传
    _basicTspl.read = ^(NSData * _Nonnull revData, NSError * _Nullable error) {
        NSLog(@"----:%@",revData);
    };
    // 连接成功
    _basicTspl.bleDidConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral) {};
    // 连接断开
    _basicTspl.bleDidDisconnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
    // 连接失败
    _basicTspl.bleDidFailToConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
}

// 打印
-(void)printModelAction{
  //使用指令对象tspl来拼接指令
  //一个完整的打印指令一定要有page()开头和print()结尾
    _basicTspl.page([[TPage alloc]init].width(100).height(180))
        .direction([[TDirection alloc]init].direction(UP_OUT).mirror(NO_MIRROR))
        .gap(true)
        .cut(true)
        .speed(6)
        .density(6)
        .cls()
        .bar([[TBar alloc]init].x(300).y(10).width(4).height(90))
        .bar([[TBar alloc]init].x(30).y(100).width(740).height(4))
        .bar([[TBar alloc]init].x(30).y(880).width(740).height(4))
        .bar([[TBar alloc]init].x(30).y(1300).width(740).height(4))
        .text([[TText alloc]init].x(400).y(25).font(TSS24).xmulti(3).ymulti(3).content(@"上海浦东"))
        .text([[TText alloc]init].x(30).y(120).font(TSS24).xmulti(1).ymulti(1).content(@"发  件  人:张三 (电话 874236021)"))
        .text([[TText alloc]init].x(30).y(150).font(TSS24).xmulti(1).ymulti(1).content(@"发件人地址:广州省 深圳市 福田区 思创路123号\"工业园\"1栋2楼"))
        .text([[TText alloc]init].x(30).y(200).font(TSS24).xmulti(1).ymulti(1).content(@"收  件  人:李四 (电话 13899658435)"))
        .text([[TText alloc]init].x(30).y(230).font(TSS24).xmulti(1).ymulti(1).content(@"收件人地址:上海市 浦东区 太仓路司务小区9栋1105室"))
        .text([[TText alloc]init].x(30).y(700).font(TSS16).xmulti(1).ymulti(1).content(@"各類郵件禁寄、限寄的範圍,除上述規定外,還應參閱「中華人民共和國海關對"))
        .text([[TText alloc]init].x(30).y(720).font(TSS16).xmulti(1).ymulti(1).content(@"进出口邮递物品监管办法”和国家法令有关禁止和限制邮寄物品的规定,以及邮"))
        .text([[TText alloc]init].x(30).y(740).font(TSS16).xmulti(1).ymulti(1).content(@"寄物品的规定,以及邮电部转发的各国(地区)邮 政禁止和限制。"))
        .text([[TText alloc]init].x(30).y(760).font(TSS16).xmulti(1).ymulti(1).content(@"寄件人承诺不含有法律规定的违禁物品。"))
        .barcode([[TBarCode alloc]init].x(80).y(300).codeType(CODE_128).height(90).showType(SHOW_CENTER).cellwidth(4).content(@"873456093465"))
        .barcode([[TBarCode alloc]init].x(550).y(910).codeType(CODE_128).height(50).showType(SHOW_CENTER).cellwidth(2).content(@"873456093465"))
        .box([[TBox alloc]init].startX(40).startY(500).endX(340).endY(650).width(4).radius(20))
        .text([[TText alloc]init].x(60).y(520).font(TSS24).xmulti(1).ymulti(1).content(@"寄件人签字:"))
        .text([[TText alloc]init].x(130).y(625).font(TSS32).xmulti(1).ymulti(1).content(@"2015-10-30 09:09"))
        .text([[TText alloc]init].x(50).y(1000).font(TSS32).xmulti(2).ymulti(3).content(@"广东 ---- 上海浦东"))
        .circle([[TCircle alloc]init].startX(670).startY(1170).width(6).radius(100))
        .text([[TText alloc]init].x(670).y(1170).font(TSS24).xmulti(3).ymulti(3).content(@"碎"))
        .qrcode([[TQRCode alloc]init].x(620).y(620).correctLevel(H).cellWidth(4).content(@"www.qrprt.com   www.qrprt.com   www.qrprt.com"))
        .print();
        
        //最后使用write()方法把指令写入打印机
        _basicTspl.write();
}

@end

5.2-CPCL


// 状态回调
{
   _basicCPCL.read = ^(NSData * _Nonnull revData, NSError * _Nullable error) {};
   
   // 连接成功
    _basicCPCL.bleDidConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral) {};
    // 连接断开
    _basicCPCL.bleDidDisconnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
    // 连接失败
    _basicCPCL.bleDidFailToConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
}

// 打印
{
  //使用指令对象cpcl来拼接指令
  //一个完整的打印指令一定要有page()开头和print()结尾
  _basicCPCL.page([[CPage alloc]init].width(608).height(1040).num(sampleNumber))
            .box([[CBox alloc]init].topLeftX(0).topLeftY(1).bottomRightX(598).bottomRightY(664).width(2))
            .line([[CLine alloc]init].startX(0).startY(88).endX(598).endY(88).lineWidth(2))
            .line([[CLine alloc]init].startX(0).startY(88+128).endX(598).endY(88+128).lineWidth(2) )
            .line([[CLine alloc]init].startX(0).startY(88+128+80).endX(598).endY(88+128+80).lineWidth(2) )
            .line([[CLine alloc]init].startX(0).startY(88+128+80+144).endX(598-56-16).endY(88+128+80+144).lineWidth(2) )
            .line([[CLine alloc]init].startX(0).startY(88+128+80+144+128).endX(598-56-16).endY(88+128+80+144+128).lineWidth(2) )
            .line([[CLine alloc]init].startX(52).startY(88+128+80).endX(52).endY(88+128+80+144+128).lineWidth(2) )
            .line([[CLine alloc]init].startX(598-56-16).startY(88+128+80).endX(598-56-16).endY(664).lineWidth(2) )
            .bar([[CBar alloc]init].x(120).y(100).lineWidth(1).height(80).content(@"1234567890").codeType(CODE128).codeRotation(CCODEROTATION_0))
            .text([[CText alloc]init].textX(120+12).textY(88+20+76).font(TSS24).content(@"1234567890") )
            .text([[CText alloc]init].textX(12).textY(88 +128 + 80 +32).font(TSS24).content(@"收") )
            .text([[CText alloc]init].textX(12).textY(88 +128 + 80 +96).font(TSS24).content(@"件") )
            .text([[CText alloc]init].textX(12).textY(88+128+80+144+32).font(TSS24).content(@"发") )
            .text([[CText alloc]init].textX(12).textY(88+128+80+144+80).font(TSS24).content(@"件") )
            .text([[CText alloc]init].textX(52+20).textY(88+128+80+144+128+16).font(TSS24).content(@"签收人/签收时间") )
            .text([[CText alloc]init].textX(430).textY(88+128+80+144+128+36).font(TSS24).content(@"月") )
            .text([[CText alloc]init].textX(490).textY(88+128+80+144+128+36).font(TSS24).content(@"日") )
            .text([[CText alloc]init].textX(52+20).textY(88+128+80+24).font(TSS24).content(@"收姓名 13777777777") )
            .text([[CText alloc]init].textX(52+20).textY(88 +128+80+24+32).font(TSS24).content(@"南京市浦口区威尼斯水城七街区七街区") )
            .text([[CText alloc]init].textX(52+20).textY(88+128+80+144+24).font(TSS24).content(@"名字 13777777777") )
            .text([[CText  alloc]init].textX(52+20).textY(88+128+80+144+24+32).font(TSS24).content(@"南京市浦口区威尼斯水城七街区七街区") )
            .text([[CText alloc]init].textX(598-56-5).textY(88 +128+80+104).font(TSS24).content(@"派") )
            .text([[CText alloc]init].textX(598-56-5).textY(88 +128+80+160).font(TSS24).content(@"件") )
            .text([[CText alloc]init].textX(598-56-5).textY(88 +128+80+208).font(TSS24).content(@"联") )
            .box([[CBox alloc]init].topLeftX(0).topLeftY(1).bottomRightX(598).bottomRightY(968).width(2) )
            .line([[CLine alloc]init].startX(0).startY(696+80).endX(598).endY(696+80).lineWidth(2) )
            .line([[CLine alloc]init].startX(0).startY(696+80+136).endX(598-56-16).endY(696+80+136).lineWidth(2) )
            .line([[CLine alloc]init].startX(52).startY(80).endX(52).endY(696+80+136).lineWidth(2) )
            .line([[CLine alloc]init].startX(598-56-16).startY(80).endX(598-56-16).endY(968).lineWidth(2) )
            .bar([[CBar alloc]init].x(320).y(696-4).lineWidth(1).height(56).content(@"1234567890").codeType(CODE128).codeRotation(CCODEROTATION_0) )
            .text([[CText alloc]init].textX(320+8).textY(696+54).font(TSS16).content(@"1234567890") )
            .text([[CText alloc]init].textX(12).textY(696+80+35).font(TSS24).content(@"发") )
            .text([[CText alloc]init].textX(12).textY(696+80+84).font(TSS24).content(@"件") )
            .text([[CText alloc]init].textX(52+20).textY(696+80+28).font(TSS24).content(@"名字 13777777777") )
            .text([[CText alloc]init].textX(52+20).textY(696+80+28+32).font(TSS24).content(@"南京市浦口区威尼斯水城七街区七街区") )
            .text([[CText alloc]init].textX(598-56-5).textY(696+80+50).font(TSS24).content(@"客") )
            .text([[CText alloc]init].textX(598-56-5).textY(696+80+82).font(TSS24).content(@"户") )
            .text([[CText alloc]init].textX(598-56-5).textY(696+80+106).font(TSS24).content(@"联") )
            .text([[CText  alloc]init].textX(12+8).textY(696+80+136+22-5).font(TSS24).content(@"物品:几个快递 12kg") )
            .box([[CBox alloc]init].topLeftX(598-56-16-120).topLeftY(696+80+136+11).bottomRightX(598-56-16-16).bottomRightY(968-11).width(2) )
            .text([[CText alloc]init].textX(598-56-16-120+17).textY(696+80+136+11+6).font(TSS24).content(@"已验视") )
            .print([[CPrint alloc]init] ).feed();

            //最后使用write()方法把指令写入打印机
            _basicCPCL.write();
}

5.3-ESC

// 状态回调
{
  //  连接成功
  _basicESC.bleDidConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral) {};
  // 连接断开
  _basicESC.bleDidDisconnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
  // 连接失败
  _basicESC.bleDidFailToConnectPeripheral = ^(CBPeripheral * _Nonnull peripheral, NSError * _Nonnull error) {};
}

// 写入数据
{
  //使用指令对象esc来拼接指令
  //最后使用write()方法把指令写入打印机
  _basicESC.batteryVolume().write();
    ReadOptions *options = [[ReadOptions alloc]init].timeout(1000);
    options.callBack = ^(NSData * _Nonnull revData, NSError * _Nullable error) {
        if(error) return;
        [self readData:revData];
    };
    [_basicESC read:options];
}