iOS 藍(lán)牙打印小票命令匯總

在SaaS App中有很多地方需要通過(guò)連接藍(lán)牙打印機(jī)打印結(jié)算及訂單小票滞项,而且在結(jié)算的時(shí)候使用打印機(jī)的的頻率比較高轰异,這就需要保證藍(lán)牙的鏈接敦迄,同時(shí)支持各種類型的排版斧散,這篇文章主要是通過(guò)藍(lán)牙鏈接打印機(jī)通過(guò)排版和組合各種指令來(lái)進(jìn)行打印,過(guò)程比較繁瑣悼凑,所以做了一個(gè)匯總偿枕,以備后續(xù)查詢。

藍(lán)牙打印機(jī)命令

在藍(lán)牙打印過(guò)程中户辫,首先要保證藍(lán)牙鏈接的及時(shí)和穩(wěn)定性渐夸,其次比較麻煩的不是搜索、連接藍(lán)牙設(shè)備渔欢,而是小票的排版墓塌。要做出樣式整齊好看的小票排版,就得先熟知藍(lán)牙打印機(jī)的各種命令奥额。在查找資料后苫幢,收集到藍(lán)牙打印的命令表,每個(gè)品牌的打印機(jī)垫挨,一般在官網(wǎng)或者技術(shù)支持哪里可以找到打印機(jī)的操作和指令文檔态坦。

打印機(jī)分了很多型號(hào),不同的打印機(jī)所使用的指令集可能不同棒拂,比如Star打印機(jī)和Epson打印機(jī),他們的所使用的指令集就不太一樣。我們常用的一般是佳博熱敏打印機(jī)使用的是:ESC/POS打印命令集帚屉。而一般的打印機(jī)支持三種格式:ASCII谜诫、十進(jìn)制、十六進(jìn)制(一般使用十六進(jìn)制格式較多)攻旦。
這份PDF文件說(shuō)明了各個(gè)命令的作用和對(duì)應(yīng)的三種格式:打印命令集

打印命令一覽表

下表中都是用ASCII碼格式

727768-ed26a9ae574b08d3.png

命令詳解

下面會(huì)詳細(xì)的介紹每個(gè)每一個(gè)命令對(duì)應(yīng)的ASCII碼喻旷、十進(jìn)制和十六進(jìn)制格式

1、初始化命令

初始化或者重置

初始化.png

2牢屋、打印命令

打印命令有兩種

打印命令.png

3且预、行間距設(shè)置

行間距設(shè)置.png

4、對(duì)齊設(shè)置

對(duì)齊設(shè)置.png

5烙无、對(duì)齊設(shè)置

5.png
6.png
7.png

8.png

6锋谐、錢(qián)箱控制命令

9.png

7、按鍵控制命令

10.png

8截酷、圖形打印命令

727768-44b62ecabba7c7e9.png
11.png

9涮拗、圖形打印命令

12.png
13.png

10、條碼打印命令

14.png
101.png

11迂苛、位置和頁(yè)模式命令

16.png
18.png

12三热、切紙模式

102.png

換行和制表符:

直接輸出對(duì)應(yīng)的字符:這兩個(gè)指令在打印訂單詳情的時(shí)候使用最多。尤其是制表符三幻,可以讓每一列的文字對(duì)齊就漾。

常用的打印機(jī)命令方法

  /** 文字對(duì)齊方式 */
  typedef NS_ENUM(NSInteger, LLTextAlignment) {
      LLTextAlignmentLeft = 0x00,
      LLTextAlignmentCenter = 0x01,
      LLTextAlignmentRight = 0x02
  };

  /** 字號(hào) */
  typedef NS_ENUM(NSInteger, LLFontSize) {
      LLFontSizeTitleSmalle = 0x00,
      LLFontSizeTitleMiddle = 0x11,
      LLFontSizeTitleBig = 0x22
  };


   /** * 換行 */
  - (void)appendNewLine
  {
        Byte nextRowBytes[] = {0x0A};
        [_printerData appendBytes:nextRowBytes length:sizeof(nextRowBytes)];
  }

  /** * 回車(chē) */
  - (void)appendReturn
  {
        Byte returnBytes[] = {0x0D};
        [_printerData appendBytes:returnBytes length:sizeof(returnBytes)];
  }

   /** * 設(shè)置對(duì)齊方式 * @param alignment 對(duì)齊方式:居左、居中念搬、居右 */
  - (void)setAlignment:(LLTextAlignment)alignment
  {
        Byte alignBytes[] = {0x1B,0x61,alignment};
        [_printerData appendBytes:alignBytes length:sizeof(alignBytes)];
  }

   /** * 設(shè)置字體大小 * 
  @param fontSize 字號(hào)
  */
  - (void)setFontSize:(LLFontSize)fontSize
  {
        Byte fontSizeBytes[] = {0x1D,0x21,fontSize};
        [_printerData appendBytes:fontSizeBytes length:sizeof(fontSizeBytes)];
  }

  /** * 添加文字抑堡,不換行
  * @param text 文字內(nèi)容
  */
  - (void)setText:(NSString *)text
  {
        NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
        NSData *data = [text dataUsingEncoding:enc];
        [_printerData appendData:data];
  }

  * 添加文字,不換行
  * * @param text 文字內(nèi)容
  * @param maxChar 最多可以允許多少個(gè)字節(jié),后面加...
  */
  - (void)setText:(NSString *)text maxChar:(int)maxChar
  {
  NSStringEncoding enc = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
  NSData *data = [text dataUsingEncoding:enc];
  if (data.length > maxChar) {
        data = [data subdataWithRange:NSMakeRange(0, maxChar)];
        text = [[NSString alloc] initWithData:data encoding:enc];
        if (!text) {
              data = [data subdataWithRange:NSMakeRange(0, maxChar - 1)];
              text = [[NSString alloc] initWithData:data encoding:enc];
        }
        text = [text stringByAppendingString:@"..."];
  }
        [self setText:text];
  }

   /** * 設(shè)置偏移文字
  * @param text 文字 偏移設(shè)置必須在文字設(shè)置之前
  */
  - (void)setOffsetText:(NSString *)text
  {
        // 1.計(jì)算偏移量,因字體和字號(hào)不同锁蠕,所以計(jì)算出來(lái)的寬度與實(shí)際寬度有誤差(小字體與22字體計(jì)算值接近)
        NSDictionary *dict = @{NSFontAttributeName:[UIFont systemFontOfSize:22.0]};
        NSAttributedString *valueAttr = [[NSAttributedString alloc] initWithString:text attributes:dict];
        int valueWidth = valueAttr.size.width;
        // 2.設(shè)置偏移量
        [self setOffset:368 - valueWidth];
        // 3.設(shè)置文字
        [self setText:text];
  }

   /** * 設(shè)置偏移量
  * @param offset 偏移量
  */
  - (void)setOffset:(NSInteger)offset
  {
        NSInteger remainder = offset % 256;
        NSInteger consult = offset / 256;
        Byte spaceBytes2[] = {0x1B, 0x24, remainder, consult};
        [_printerData appendBytes:spaceBytes2 length:sizeof(spaceBytes2)];
  }

  /** 設(shè)置行間距
  * @param points 多少個(gè)點(diǎn)
  */
  - (void)setLineSpace:(NSInteger)points
  {
        //最后一位夷野,可選 0~255
        Byte lineSpace[] = {0x1B,0x33,points};
        [_printerData appendBytes:lineSpace length:sizeof(lineSpace)];
  }

  /** 設(shè)置行默認(rèn)間距 2 
  * 設(shè)置行間距為1/6英寸,約34個(gè)點(diǎn)
  */ 同一個(gè)打印流程中如果設(shè)置多個(gè)行間距荣倾,后面的設(shè)置會(huì)覆蓋掉前面的間距設(shè)置
  - (void)seDefaultLineSpace
  {
      Byte lineSpace[] = {0x1B,0x32};
      [_printerData appendBytes:lineSpace length:sizeof(lineSpace)];
  }

 /***  設(shè)置尾部換行間距
  *  @param points 多少個(gè)點(diǎn)
  */
 - (void)setFooterSpace:(NSInteger)points
 {
     //最后一位悯搔,可選 0~255
     Byte footerSpace[] = {0x1B,0x4A,points};
     [_printerData appendBytes:footerSpace length:sizeof(footerSpace)];
 }

文檔備注

ESC(POS)打印控制命令

ESC&POS打印控制指令

佳博GP-2120TU標(biāo)簽打印機(jī)使用教程-小票篇
佳博打印機(jī)技術(shù)支持

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舌仍,隨后出現(xiàn)的幾起案子妒貌,更是在濱河造成了極大的恐慌,老刑警劉巖铸豁,帶你破解...
    沈念sama閱讀 216,692評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灌曙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡节芥,警方通過(guò)查閱死者的電腦和手機(jī)在刺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)逆害,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人蚣驼,你說(shuō)我怎么就攤上這事魄幕。” “怎么了颖杏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,995評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵纯陨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我留储,道長(zhǎng)翼抠,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,223評(píng)論 1 292
  • 正文 為了忘掉前任获讳,我火速辦了婚禮阴颖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赔嚎。我一直安慰自己膘盖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,245評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布尤误。 她就那樣靜靜地躺著侠畔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪损晤。 梳的紋絲不亂的頭發(fā)上软棺,一...
    開(kāi)封第一講書(shū)人閱讀 51,208評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音尤勋,去河邊找鬼喘落。 笑死,一個(gè)胖子當(dāng)著我的面吹牛最冰,可吹牛的內(nèi)容都是我干的瘦棋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼暖哨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赌朋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起篇裁,我...
    開(kāi)封第一講書(shū)人閱讀 38,929評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沛慢,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后达布,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體团甲,經(jīng)...
    沈念sama閱讀 45,346評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,570評(píng)論 2 333
  • 正文 我和宋清朗相戀三年黍聂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了躺苦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片身腻。...
    茶點(diǎn)故事閱讀 39,739評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖圾另,靈堂內(nèi)的尸體忽然破棺而出霸株,到底是詐尸還是另有隱情,我是刑警寧澤集乔,帶...
    沈念sama閱讀 35,437評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站坡椒,受9級(jí)特大地震影響扰路,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜倔叼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,037評(píng)論 3 326
  • 文/蒙蒙 一汗唱、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丈攒,春花似錦哩罪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,677評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至显设,卻和暖如春框弛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捕捂。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,833評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工瑟枫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留允趟,地道東北人捅僵。 一個(gè)月前我還...
    沈念sama閱讀 47,760評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像芹枷,于是被迫代替她去往敵國(guó)和親允悦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膝擂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,647評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容