欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

CaysnPrinter开发包接口说明文档及示例程序 - CAYSN IOS SDK_20160906

程序员文章站 2022-07-01 08:38:54
CaysnPrinter开发包接口说明文档及示例程序 - CAYSN IOS SDK_20160906。 1 概述 NETPrinting 和 BLEPrinting 继承自...

CaysnPrinter开发包接口说明文档及示例程序 - CAYSN IOS SDK_20160906。

1 概述

NETPrinting 和 BLEPrinting 继承自 IO。

他们分别有自己的打开,关闭函数,有自己的回调接口。

同时也重写了IO的3个重要函数

- (bool) IsOpened;

- (int) Write:(Byte * ) buffer offset:(int) offset count:(int) count;

- (int) Read:(Byte *)buffer offset:(int)offset count:(int)count timeout:(int)timeout;

POSPrinting 和 LabelPrinting 封装了打印指令并持有一个IO接口。

POSPrinting封装了ESC/POS指令

LabelPrinting封装了标签打印指令

他们按照指令集的格式将数据组织好,然后调用IO的Write函数进行写入数据,调用Read函数读取数据。

2 使用

使用时,先实例化一个IO子类。以蓝牙打印为例:

① 先实例化一个POSPrinting(为方便描述,设变量名为pos),这个时候,直接调用POS_XXX系列函数, 会发现并不能打印,因为这时候POSPrinting并没有持有一个可读写的IO。需要进行②③步。

② 先实例化一个BLEPrinting(为方便描述,设变量名为ble),然后调用Open函数连接到蓝牙打印机。

③ 连接成功之后,调用pos的SetIO,将让pos持有ble,这样,后续的POS_XXX系列函数,就会通过 ble的Write和Read与打印机通讯。

3 各个类的区别

① BLEPrinting、NETPrinting、IO这三者的区别

A) IO是父类,提供统一的接口,供POSPrinting和LabelPrinting使用。

B) BLEPrinting是用于蓝牙通讯的,除了基本的Open Close IsOpened Read Write之外,还有

scan 扫描蓝牙打印机,扫描成功会调用回调接口BLEPrintingDiscoverDelegate

stopScan 停止扫描

BLEPrintingOpenDelegate Open成功之后会回调该接口

BLEPrintingDiscoverDelegate 扫描到打印机之后会回调该接口

BLEPrintingReceiveDelegate 收到数据之后会回调该接口

BLEPrintingDisconnectDelegate 蓝牙断开之后会回调该接口(多次调用Close不会调用)

C) NETPrinting 是用于网络通讯的,除了基本的Open Close IsOpened Read Write之外,还有

NETPrintingOpenDelegate Open成功之后会回调该接口

NETPrintingDisconnectDelegate 连接断开之后会回调该接口(多次调用Close不会调用)

② POSPrinting、LabelPrinting 这两者的区别

A) POSPrinting 封装了便携指令集,LabelPrinting 封装了标签指令集。

普通热敏打印机(只支持ESC/POS指令集)

只能使用POSPrinting控制打印机打印。

标签打印机(支持ESC/POS指令集、标签指令集)

可以使用POSPrinting控制打印机打印,也可以用LabelPrinting控制打印机打印。

两套指令不能穿插使用,意思是:

使用LabelPrinting控制打印时,PageBegin 到PagePrint之间,不能穿插POSPrinting函数。

4 接口说明

① IO

@interfaceIO : NSObject

- (instancetype)init;

/***

* 空实现,继承该类的子类需要实现这个函数

*/

- (bool) IsOpened;

/***

* 空实现,继承该类的子类需要实现这个函数

*/

- (int) Write:(Byte * ) buffer offset:(int) offset count:(int) count;

/***

* 空实现,继承该类的子类需要实现这个函数

*/

- (int) Read:(Byte *)buffer offset:(int)offset count:(int)count timeout:(int)timeout;

/***

* 不可重写,继承该类的子类,在Open成功之后,需要调用OnOpen

*/

- (void) OnOpen;

/***

* 不可重写,继承该类的子类,在Close之后,需要调用OnClose

*/

- (void) OnClose;

@end

② BLEPrinting

// 类的声明

@interfaceBLEPrinting : IO

// 如果myOpenDelegate不为空,在Open成功之后,就会调用myOpenDelegate的didBleOpen

@property(weak, nonatomic) id myOpenDelegate;

// 如果myDiscoverDelegate不为空,在scan扫描到蓝牙设备后,就会调用myDiscoverDelegate的didDiscoverBLE

@property(weak, nonatomic) id myDiscoverDelegate;

// 如果myReceiveDelegate不为空,在收到数据之后,就会调用myReceiveDelegate的didBleReceive

@property(weak, nonatomic) id myReceiveDelegate;

// 如果myDisconnectDelegate不为空,在连接断开之后,就会调用myDisconnectDelegate的didBleDisconnect

@property(weak, nonatomic) id myDisconnectDelegate;

- (instancetype)init;

// 扫描蓝牙设备,不阻塞

- (void) scan;

// 停止扫描蓝牙设备,不阻塞

- (void) stopScan;

// 阻塞,连接ble设备

- (bool) Open:(CBPeripheral *) peripheral;

// 断开ble设备。设备正常断开或异常断开,都会调用didDisconnect

- (void) Close;

- (bool) IsOpened;

// 阻塞 写数据

- (int) Write:(Byte * ) buffer offset:(int) offset count:(int) count;

// 阻塞 读取缓冲区数据超时以ms为单位

- (int) Read:(Byte *)buffer offset:(int)offset count:(int)count timeout:(int)timeout;

@end

@protocol BLEPrintingDiscoverDelegate

@required

@optional

//- (void) didDiscoverBLE:(CBPeripheral *) peripheral;

- (void) didDiscoverBLE:(CBPeripheral *) peripheral address:(NSString *)address rssi:(int)rssi;

因为苹果官方API,无法搜索到蓝牙打印机的MAC地址。

为此,新版蓝牙打印机提供了一个功能,使得APP能搜索到蓝牙MAC地址,这有助于唯一识别一台打印机。

因而,新版开发包里面的DiscoverBLE接口发生了变化。多出了地址参数。

如果不是BT11蓝牙,那么address会传入nil。

如果是BT11蓝牙,那么address会传入具体的打印机mac地址。

@end

@protocol BLEPrintingOpenDelegate

@required

@optional

// Open成功会调用

- (void) didBleOpen:(CBPeripheral *) peripheral;

@end

@protocol BLEPrintingReceiveDelegate

@required

@optional

// 注意:收到数据之后,会将数据放到缓冲区。并调用didReceive。

- (void) didBleReceive:(unsignedchar* ) buffer length:(unsignedlong) length;

@end

@protocol BLEPrintingDisconnectDelegate

@required

@optional

- (void) didBleDisconnect;

@end

③ NETPrinting

@interfaceNETPrinting : IO

// 如果myOpenDelegate不为空,在Open成功之后会调用myOpenDelegate的didNetOpen

@property(weak, nonatomic) id myOpenDelegate;

// 如果myDisconnectDelegate不为空,在连接断开之后会调用myDisconnectDelegate的didNetDisconnect

@property(weak, nonatomic) id myDisconnectDelegate;

- (instancetype) init;

// 打开指定IP和端口(可以在打印机自检页上查看打印机的IP地址和端口号)

- (bool) Open:(NSString *)ipAddress portNumber:(UInt16)portNumber;

// 关闭连接

- (void) Close;

- (bool) IsOpened;

// 阻塞 写数据

- (int) Write:(Byte * ) buffer offset:(int) offset count:(int) count;

// 阻塞 读取缓冲区数据

- (int) Read:(Byte *)buffer offset:(int)offset count:(int)count timeout:(int)timeout;

@end

@protocol NETPrintingOpenDelegate

@required

@optional

// Open成功会调用

- (void) didNetOpen:(NSString *)ipAddress portNumber:(UInt32)portNumber;

@end

@protocol NETPrintingDisconnectDelegate

@required

@optional

- (void) didNetDisconnect;

@end

④ POSPrinting

// 类的声明

@interfacePOSPrinting : NSObject

- (instancetype) init;

/**

* 读写方式和打印指令分离,给该类设置一个io即可实现打印。

*/

- (void) SetIO:(IO *) io;

/**

* 打印图片,mImage是原始图片,nMethod代表压缩算法(0-抖动算法 1-平均阀值)

* 图片高度无要求,图片宽度要求像素是8的倍数,图片宽度不能超过打印纸宽。(2寸纸384点宽,3寸纸576点宽)

*/

- (void) POS_PrintPicture:(UIImage *)mImage nMethod:(int)nMethod;

/**

* 打印图片,mImage是原始图片,nWidth、nHeight是打印宽高。nMethod代表压缩算法(0-抖动算法 1-平均阀值)

* 图片高度无要求,图片宽度要求不能超过打印纸宽。(2寸纸384点宽,3寸纸576点宽)

*/

- (void) POS_PrintPicture:(UIImage *)mImage nWidth:(int)nWidth nHeight:(int)nHeight nAlign:(int)nAlign nMethod:(int)nMethod;

/**

* 按照一定的格式打印字符串

*

* @param pszString

* 需要打印的字符串

* @param nOrgx

* 指定 X 方向(水平)的起始点位置离左边界的点数。 一般为0。2寸打印机一行384点,3寸打印机一行576点。

* @param nWidthTimes

* 指定字符的宽度方向上的放大倍数。可以为 0到 1。

* @param nHeightTimes

* 指定字符高度方向上的放大倍数。可以为 0 到 1。

* @param nFontType

* 指定字符的字体类型。 (0x00 标准 ASCII 12x24) (0x01 压缩ASCII 9x17)

* @param nFontStyle

* 指定字符的字体风格。可以为以下列表中的一个或若干个。 (0x00 正常) (0x08 加粗) (0x80 1点粗的下划线)

* (0x100 2点粗的下划线) (0x200 倒置、只在行首有效) (0x400 反显、黑底白字) (0x1000

* 每个字符顺时针旋转 90 度)

*/

- (void) POS_S_TextOut:(char *)pszString nOrgx:(int)nOrgx nWidthTimes:(int)nWidthTimes nHeightTimes:(int)nHeightTimes nFontType:(int)nFontType nFontStyle:(int)nFontStyle;

- (void) POS_S_SetBarcode:(char *)strCodedata nOrgx:(int)nOrgx nType:(int)nType nUnitWidth:(int)nUnitWidth nHeight:(int)nHeight nHriFontType:(int)nHriFontType nHriFontPosition:(int)nHriFontPosition;

描述:设置并打印条码。

参数:

strCodedata [in] 条码的字符串。

nOrgx [in] 指定将要打印的条码的水平起始点与左边界的距离点数。可以为 0 到65535。

nType [in] 指定条码的类型。可以为以下列表中所列值之一。

ValueMeaning

0x41UPC-A

0x42UPC-C

0x43JAN13(EAN13)

0x44JAN8(EAN8)

0x45CODE39

0x46ITF

0x47CODEBAR

0x48CODE93

0x49CODE 128

nUnitWidth [in] 指定条码的基本元素宽度。可以为以下列表中所列值(n)之一。

n单基本模块宽度

(连续型)双基本模块宽度(离散型)

窄元素宽度宽元素宽度

20.25mm0.25mm0.625mm

30.375mm0.375mm1.0mm

40.5mm0.5mm1.25mm

50.625mm0.625mm1.625mm

60.75mm0.75mm1.875mm

nHeight [in] 指定条码的高度点数。可以为 1 到 255 。默认值为162 点。

nHriFontType [in] 指定HRI(Human Readable Interpretation)字符的字体类型。可以为下列表中所列值之一。

ValueMeaning

0x00标准ASCII

0x01压缩ASCII

nHriFontPosition[in] 指定HRI(Human Readable Interpretation)字符的位置。可以为下列表中所列值之一。

ValueMeaning

0x00不打印

0x01只在条码上方打印

0x02只在条码下方打印

0x03条码上、下方都打印

返回值:无

备注:如果条码太宽超出打印机最大打印宽度,则条码不会被打印。

- (void) POS_S_SetQRCode:(char *)strCodedata nUnitWidth:(int)nUnitWidth nVersion:(int)nVersion nErrorCorrectionLevel:(int)nErrorCorrectionLevel;

描述:打印二维码

参数:

strCodedata二维码数据

nUnitWidth二维码每单元宽度,范围从2-6

nVersion二维码版本,版本越大条码越大。一般填0,表示打印机自动计算版本。

nErrorCorrectionLevel纠错等级,范围从1-4

备注:

纠错为1,版本为10的时候,二维码大小基本打满2寸纸宽。

- (void) POS_EPSON_SetQRCode:(char *)strCodedata nUnitWidth:(int)nUnitWidth nVersion:(int)nVersion nErrorCorrectionLevel:(int)nErrorCorrectionLevel;

描述:命令说明同POS_S_SetQRCode。

备注:便携打印机一般使用POS_S_SetQRCode。桌面打印机一般使用POS_EPSON_SetQRCode。

// 打印机进纸一行

- (void) POS_FeedLine;

// 设置打印对齐方式。 0 左对齐 1 居中对齐 2 右对齐

- (void) POS_SetAlign:(int)align;

// 设置行高。默认行高是32点

- (void) POS_SetLineHeight:(int)nHeight;

// 软件复位(恢复之前的设置到默认设置,包括但不限于行高,对齐等设置。)

- (void) POS_Reset;

// 设置秘钥

- (void) POS_SetKey:(Byte[8])key;

// 检查秘钥设置秘钥和检查秘钥,暂时仅作内部使用

- (bool) POS_CheckKey:(Byte[8])key nPara:(int)nPara;

// 设置打印机水平和垂直运动单位,该项一般不用设置

- (void) POS_SetMotionUnit:(int)nHorizontalMU nVerticalMU:(int)nVerticalMU;

// 设置字符集和代码页

- (void) POS_SetCharSetAndCodePage:(int)nCharSet nCodePage:(int)nCodePage;

描述:

选择国际字符集和代码页。

参数:

nCharSet[in] 指定国际字符集。不同的国际字符集对0x23到0x7E的ASCII码值对应的符号定义不同。

可以为以下列表中所列值之一。

ValueMeaning

0x00U.S.A

0x01France

0x02Germany

0x03U.K.

0x04Denmark I

0x05Sweden

0x06Italy

0x07Spain I

0x08Japan

0x09Nonway

0x0ADenmark II

0x0BSpain II

0x0CLatin America

0x0DKorea

nCodePage[in] 指定字符的代码页。不同的代码页对0x80到0xFF的ASCII码值对应的符号定义不的。

可以为以下列表中所列值之一。

ValueMeaning

0x00PC437 [U.S.A. Standard Europe

0x01Reserved

0x02PC850 [Multilingual]

0x03PC860 [Portuguese]

0x04PC863 [Canadian-French]

0x05PC865 [Nordic]

0x12PC852

0x13PC858

// 0-GBK 1-UTF8 3-BIG5 4-SHIFT-JIS 5-EUC-KR

- (void) POS_SetLanguage:(int)nLanguage;

描述:设置打印机的语言

例如:当设置了打印机语言为1-UTF8时,后面打印字符串的时候,传入的char*可以由NSString使用

cStringUsingEncoding UTF8Encoding来生成

- (void) POS_SetRightSpacing:(int)nDistance;

描述

设置字符的右间距(相邻两个字符的间隙距离)。

参数

nDistance[in] 指定右间距的点数。可以为 0 到 255。每点的距离与打印头分辨率相关。

- (void) POS_S_SetAreaWidth:(int)nWidth;

描述:

设置标准模式下的打印区域宽度。

参数:nWidth[in] 指定打印区域的宽度。可以为 0 到 65535点。

备注:2寸纸不超过384,3寸纸不超过576.

// 查询状态(打印机忙,缺纸,错误,正在打印等情况下,该命令会阻塞。直到超时或没有打印任务。)

- (bool) POS_QueryStatus:(Byte[1])precbuf timeout:(int)timeout;

// 实时状态查询(任何情况下,打印机收到该命令都会立刻回应。该命令可以明确用来判断打印机是否可以正常工作)

- (bool) POS_RTQueryStatus:(Byte[1])precbuf timeout:(int)timeout;

// 查询打印机是否连接,因为各个打印机支持的查询状态的命令可能有差别,此处是发了多个查询状态的命令,只要有一 // 个有回复,就认为是连接的。

- (bool) POS_QueryOnline:(int)timeout;

@end

⑤ LabelPrinting

@interfaceLabelPrinting : NSObject

- (instancetype) init;

/**

* 读写方式和打印指令分离,给该类设置一个io即可实现打印。

*/

- (void) SetIO:(IO *) io;

/**

* 描述: 指示一个 Page 页面的开始,并设置 Page 页的大小,参考点坐标和页面旋转角度。

*

* @param startx

* 页面起始点x坐标

* @param starty

* 页面起始点y坐标

* @param width

* 页面页宽 startx + width

* 的范围为[1,384]。编写SDK的时候,该打印机一行的打印点数为384点。如果你不确定每行打印点数

* ,请参考打印机规格书。一般来说有384,576,832这三种规格。

* @param height

* 页面页高 starty + height

* 的范围[1,936]。编写SDK的时候,限制是936,但是这个值并不确定,这和打印机的资源有关

* 。即便如此,也不建议把页宽设置过大。建议页宽和页高设置和标签纸匹配即可。

* @param rotate

* 页面旋转。 rotate的取值范围为{0,1}。为0,页面不旋转打印,为1,页面旋转90度打印。

*/

- (void) PageBegin:(int)startx starty:(int)starty width:(int)width height:(int)height rotate:(int)rotate;

/**

* 描述: 只是一个Page页面的结束。

*/

- (void) PageEnd;

/**

* 描述: 将 Page 页上的内容打印到标签纸上。

*

* @param num

* 打印的次数,1-255。

*/

- (void) PagePrint:(int)num;

/**

* 描述: 在 Page 页面上指定位置绘制文本。只在一行展开,打印机返回占用的区域的坐标值。

*

* @param startx

* 定义文本起始位置 x 坐标,取值范围:[0, Page_Width-1]

* @param starty

* 定义文本起始位置 y 坐标,取值范围:[0, Page_Height-1]

* @param font

* 选择字体,有效值范围为{16, 24, 32, 48, 64, 80, 96}

* @param style

* 字符风格。 数据位 定义 0 加粗标志位:置 1 字体加粗,清零则字体不加粗。 1 下划线标志位:置 1

* 文本带下划线,清零则无下划线。 2 反白标志位:置 1 文本反白(黑底白字),清零不反白。 3 删除线标志位:置 1

* 文本带删除线,清零则无删除线。 [5,4] 旋转标志位:00 旋转 0° ; 01 旋转 90°; 10 旋转 180°;

* 11 旋转 270°; [11,8] 字体宽度放大倍数; [15,12] 字体高度放大倍数;

* @param str

* 字符串数据流

*/

- (void) DrawPlainText:(int)startx starty:(int)starty font:(int)font style:(int)style str:(char *)str;

/**

* 描述: 在 Page 页指定两点间绘制一条直线段。

*

* @param startx

* 直线段起始点 x 坐标值,取值范围:[0, Page_Width-1]。

* @param starty

* 直线段起始点 y 坐标值,取值范围:[0,Page_Height-1]。

* @param endx

* 直线段终止点 x 坐标值,取值范围:[0, Page_Width-1]。

* @param endy

* 直线段终止点 y 坐标值,取值范围:[0,Page_Height-1]。

* @param width

* 直线段线宽,取值范围:[1,Page_Height-1]。

* @param color

* 直线段颜色,取值范围:{0, 1}。当 Color 为 1 时,线段为黑色。当 Color 为 0 时,线段为白色。

*/

- (void) DrawLine:(int)startx starty:(int)starty endx:(int)endx endy:(int)endy width:(int)width color:(int)color;

/**

* 描述: 在 Page 页指定位置绘制指定大小的矩形框。

*

* @param left

* 矩形框左上角 x 坐标值,取值范围:[0, Page_Width-1]。

* @param top

* 矩形框左上角 y 坐标值。取值范围:[0, Page_Height-1]。

* @param right

* 矩形框右下角 x 坐标值。取值范围:[0, Page_Width-1]。

* @param bottom

* 矩形框右下角 y 坐标值。取值范围:[0, Page_Height-1]。

* @param borderwidth

* 矩形框线宽。

* @param bordercolor

* 矩形框线颜色,曲直范围{0,1}。当 Color = 1 时,绘制黑色矩形宽,Color = 0 时,绘制白色矩形框。

*/

- (void) DrawBox:(int)left top:(int)top right:(int)right bottom:(int)bottom borderwidth:(int)borderwidth bordercolor:(int)bordercolor;

/**

* 描述: 在 Page 页指定位置绘制矩形块。

*

* @param left

* 矩形块左上角 x 坐标值,取值范围:[0, Page_Width-1]。

* @param top

* 矩形块左上角 y 坐标值。取值范围:[0, Page_Height-1]。

* @param right

* 矩形块右下角 x 坐标值。取值范围:[0, Page_Width-1]。

* @param bottom

* 矩形块右下角 y 坐标值。取值范围:[0, Page_Height-1]。

* @param color

* 矩形块颜色,取值范围:{0, 1}。当 Color 为 1 时,矩形块为黑色。当 Color 为 0时,矩形块为白色。

*/

- (void) DrawRectangel:(int)left top:(int)top right:(int)right bottom:(int)bottom color:(int)color;

/**

* 描述: 在 Page 页指定位置绘制一维条码。

*

* @param startx

* 条码左上角 x 坐标值,取值范围:[0, Page_Width-1]。

* @param starty

* 条码左上角 y 坐标值,取值范围:[0, Page_Height-1]。

* @param type

* 标识条码类型,取值范围:[0, 29]。 各值定义如下: type 类型 长度 条码值范围(十进制) 0 UPC-A 11

* 48-57 1 UPC-E 6 48-57 2 EAN13 12 48-57 3 EAN8 7 48-57 4 CODE39

* 1- 48-57,65-90,32,36,37,43,45,46,47 5 I25 1-偶数 48-57 6 CODABAR

* 1- 48-57,65-68,36,43,45,46,47,58 7 CODE93 1-255 0-127 8

* CODE128 2-255 0-127 9 CODE11 10 MSI 11 "128M", //

* 可以根据数据切换编码模式-> !096 - !105 12 "EAN128", // 自动切换编码模式 13 "25C",

* // 25C Check use mod 10-> 奇数先在前面补0,

* 10的倍数-[(奇数位的数字之和<从左至右)+(偶数位数字之和)*3] 14 "39C", //

* 39碼的檢查碼必須搭配「檢查碼相對值對照表

* 」,如表所示,將查出的相對值累加後再除以43,得到的餘數再查出相對的編碼字元,即為檢查碼字元。 15 "39", //

* Full ASCII 39 Code, 特殊字符用两个可表示的字来表示, 39C 同样是包含Full ASCII,

* 注意宽窄比处理 16 "EAN13+2", // 附加码与主码间隔 7-12 单位,起始为 1011 间隔为 01

* ,(_0*10+_1) Mod 4-> 0--AA 1--AB 2--BA 3--BB 17 "EAN13+5", //

* 附加码部分同上,模式((_0+_2+_4)*3+(_1+_3)*9) mod 10 ->"bbaaa", "babaa",

* "baaba", "baaab", "abbaa", "aabba", "aaabb", "ababa", "abaab",

* "aabab 18 "EAN8+2", // 同 EAN13+2 19 "EAN8+5", // 同 EAN13+5 20

* "POST", // 详见规格说明,是高低条码,不是宽窄条码 21 "UPCA+2", // 附加码见 EAN 22

* "UPCA+5", // 附加码见 EAN 23 "UPCE+2", // 附加码见 EAN 24 "UPCE+5", //

* 附加码见 EAN 25 "CPOST", // 测试不打印。。。 26 "MSIC", //

* 将检查码作为数据再计算一次检查码 27 "PLESSEY", // 测试不打印。。。 28 "ITF14", // 25C

* 变种, 第一个数前补0,检查码计算时需扣除最后一个数,但仍填充为最尾端 29 "EAN14"

* @param height

* 定义条码高度。

* @param unitwidth

* 定义条码码宽。取值范围:[1, 4]。各值定义如下: Width取值 多级条码单位宽度(mm) 二进制条码窄线条宽度

* 二进制条码宽线条宽度 1 0.125 0.125 0.25 2 0.25 0.25 0.50 3 0.375 0.375

* 0.75 4 0.50 0.50 1.0

* @param rotate

* 表示条码旋转角度。取值范围:[0, 3]。各值定义如下: Rotate取值 定义 0 条码不旋转绘制。 1 条码旋转

* 90°绘制。 2 条码旋转 180°绘制。 3 条码旋转 270°绘制。

* @param str

* 文本字符数据流

*/

- (void) DrawBarcode:(int)startx starty:(int)starty type:(int)type height:(int)height unitwidth:(int)unitwidth rotate:(int)rotate str:(char *)str;

描述: 在 Page 页指定位置绘制一维条码。

参数:

startx- 条码左上角 x 坐标值,取值范围:[0, Page_Width-1]。

starty- 条码左上角 y 坐标值,取值范围:[0, Page_Height-1]。

type- 标识条码类型,取值范围:[0, 29]。各值定义如下:

值类型长度条码值范围备注

0UPC-A1148-57

1UPC-E648-57

2EAN131248-57

3EAN8748-57

4CODE391-48-57,65-90,32,36,37,43,45,46,47

5I251-偶数 48-57

6CODABAR1-48-57,65-68,36,43,45,46,47,58

7CODE931-2550-127

8CODE1282-2550-127

9CODE11

10MSI

11128M

可以根据数据切换编码模式-> !096 - !105

12EAN128

自动切换编码模式

1325C

25C Check use mod 10-> 奇数先在前面补0, 10的倍数-[(奇数位的数字之和<从左至右)+(偶数位数字之和)*3]

1439C

39碼的檢查碼必須搭配「檢查碼相對值對照表」,如表所示,將查出的相對值累加後再除以43,得到的餘數再查出相對的編碼字元,即為檢查碼字元。

1539

Full ASCII 39 Code, 特殊字符用两个可表示的字来表示, 39C 同样是包含Full ASCII, 注意宽窄比处理

16EAN13+2

附加码与主码间隔 7-12 单位,起始为 1011 间隔为 01 ,(_0*10+_1) Mod 4-> 0--AA 1--AB 2--BA 3--BB

17EAN13+5

附加码部分同上,模式((_0+_2+_4)*3+(_1+_3)*9) mod 10 ->"bbaaa", "babaa", "baaba", "baaab", "abbaa", "aabba", "aaabb", "ababa", "abaab", "aabab

18EAN8+2

同 EAN13+2

19EAN8+5

同 EAN13+5

20POST

详见规格说明,是高低条码,不是宽窄条码

21UPCA+2

附加码见 EAN

22UPCA+5

附加码见 EAN

23UPCE+2

附加码见 EAN

24UPCE+5

附加码见 EAN

25CPOST

26MSIC

将检查码作为数据再计算一次检查码

27PLESSEY

28ITF14

25C 变种, 第一个数前补0,检查码计算时需扣除最后一个数,但仍填充为最尾端

29EAN14

height- 定义条码高度。

unitwidth- 定义条码码宽。取值范围:[1, 4]。各值定义如下:

Width取值多级条码单位宽度(mm)二进制条码窄线条宽度二进制条码宽线条宽度

10.1250.1250.25

20.250.250.50

30.3750.3750.75

40.500.501.0

rotate- 表示条码旋转角度。取值范围:[0, 3]。各值定义如下:

Rotate取值 定义

0 条码不旋转绘制。

1 条码旋转 90°绘制。

2 条码旋转 180°绘制。

3 条码旋转 270°绘制。

str- 文本字符数据流

/**

* 描述: 在 Page 页指定位置绘制 QRCode 码。

*

* @param startx

* QRCode 码左上角 x 坐标值,取值范围:[0,Page_Width-1]。

* @param starty

* QRCode 码左上角 y 坐标值,取值范围:[0, Page_Height-1]。

* @param version

* 指定字符版本。取值范围:[0,20]。当 version 为 0 时,打印机根据字符串长度自动计算版本号。

* @param ecc

* 指定纠错等级。取值范围:[1, 4]。各值定义如下: ECC 纠错等级 1 L:7%,低纠错,数据多。 2

* M:15%,中纠错 3 Q:优化纠错 4 H:30%,最高纠错,数据少。

* @param unitwidth

* QRCode 码码块,取值范围:[1, 4]。各值定义与一维条码指令输入参数UniWidth相同。

* @param rotate

* QRCode 码旋转角度,取值范围:[0, 3]。各值定义与一维条码指令输入参数Rotate 相同。

* @param str

* QRCode 文本字符数据流

*/

- (void) DrawQRCode:(int)startx starty:(int)starty version:(int)version ecc:(int)ecc unitwidth:(int)unitwidth rotate:(int)rotate str:(char *)str;

/**

* 描述: 在 Page 页指定位置绘制 PDF417 条码 。

*

* @param startx

* PDF417 码左上角 x 坐标值,取值范围:[0,Page_Width-1]。

* @param starty

* PDF417 码左上角 y 坐标值,取值范围:[0, Page_Height-1]。

* @param colnum

* ColNum 为列数,表述每行容纳多少码字。一个码字为 17*UnitWidth 个点。行数由打印机自动产生,行数范围限定为

* 3~90。ColNum 的取值范围:[1,30]。

* @param lwratio

* 宽高比。取值范围:[3,5]。

* @param ecc

* 纠错等级,取值范围:[0. 8]。 ecc取值 纠错码数 可存资料量(字节) 0 2 1108 1 4 1106 2 8

* 1101 3 16 1092 4 32 1072 5 64 1024 6 128 957 7 256 804 8 512

* 496

* @param unitwidth

* PDF417 码码块,取值范围:[1, 3]。各值定义与一维条码指令输入参数 UniWidth 相同。

* @param rotate

* PDF417 码旋转角度,取值范围:[0, 3]。各值定义与一维条码指令输入参数 Rotate 相同。

* @param str

* PDF417 文本字符数据流。

*/

- (void) DrawPDF417:(int)startx starty:(int)starty colnum:(int)colnum lwratio:(int)lwratio ecc:(int)ecc unitwidth:(int)unitwidth rotate:(int)rotate str:(char *)str;

/**

* 描述: 在 Page 页指定位置绘制位图。

*

* @param startx

* 位图左上角 x 坐标值,取值范围:[0, Page_Width]。

* @param starty

* 位图左上角 y 坐标值,取值范围:[0, Page_Height]。

* @param width

* 位图的像素宽度。

* @param height

* 位图的像素高度。

* @param style

* 位图打印特效,各位定义如下: 位 定义 0 反白标志位,置 1 位图反白打印,清零正常打印。 [2:1] 旋转标志位: 00

* 旋转 0° ; 01 旋转 90°; 10 旋转 180°; 11 旋转 270° [7:3] 保留。 [11:8]

* 位图宽度放大倍数。 [12:15] 位图高度放大倍数。

* @param pdata

* 位图的点阵数据。

*/

- (void) DrawBitmap:(int)startx starty:(int)starty width:(int)width height:(int)height style:(int)style pdata:(Byte *)pdata;

- (void) DrawBitmap:(int)startx starty:(int)starty width:(int)width height:(int)height style:(int)style img:(UIImage *)img;

@end