【打印機】斑馬打印機指令簡介

斑馬打印機指令簡介

0、打印方法

打印機使用RS232通信,直接通過串口將指令發送字符串即可。

1、Hello World!

指令:

^XA

^JMA^LL200^PW680^MD10^PR2^PON^LRN^LH0,0

^FO10,30
^A0N,72,72
^FD Hello World!^FS

^XZ

實現效果:
這裏寫圖片描述
說明:
打印機的指令用“^”作爲開頭,任何打印指令都是從^XA開始,到^XZ結束。指令的參數直接放在指令後面,如指令
^FDstring^FS
^FD是一段字符串的開頭,^FS是一段字符串的結尾,string就是代表要打印的字符串

上述
^FD Hello World!^FS
就是以表示指定要打印的字符串爲“ Hello World!”(沒錯,包含前面的空格)
同時,要打印該字符,還必須先指定它所在的座標(如^FO10,30)和字體參數(如^A0N,72,72)

^FOx,y
x代表橫座標,y代表縱座標,如果你將x的值改爲20,那麼“ Hello World!”將會右移一段距離。

^Aab,c,d
^A有a,b,c,d四個參數
a,字體類型,的取值範圍從【0-9,A-Z】,0是默認的內置字體,若需要其他字體則需要設置,在打印中文這一節將會說明。
b,旋轉角度,注意參數a和b之間並沒有逗號,有【N,R,I,B】四個選項,分別代表正常,順時針旋轉90°,180°、270°。
c,字符高度
d,字符寬度

^JMA^LL200^PW680^MD10^PR2^PON^LRN^LH0,0
這條指令設置打印機的參數,可以拆分如下:
^JMA ——每毫米設定點,可選參數【A,B】,A表示【24 dots/mm, 12 dots/mm, 8 dots/mm or 6 dots/mm】,B表示【12 dots/mm, 6 dots/mm, 4 dots/mm or 3 dots/mm】,默認A
^LL200 ——標籤高度,這裏是20mm
^PW680 ——標籤寬度,這裏是68mm
^MD10 ——標籤深度,可選值【-30~30】,值越高標籤濃度越高
^PR2 ——打印速度,實際這是一個多參數的指令,^PRa,b,c,b和c不設置則爲默認值。其中a是打印速度,可選值【1-14,A-E】,值越大速度越快,其中字母【2=A,3=B,4=C,6=D,8=E】,即設置A與設置2無異。b和c的參數用於設置推出和回捲速度,默認即可。
^PON ——打印方向,有【N,I】兩個值可選,N是正常,I是倒置(標籤底部先出)
^LRN ——打印反轉,有【Y,N】兩個值可選,N是正常,Y表示將產生黑底白字(需要先繪製黑色填充方框)
如以下指令:

^XA

^JMA^LL200^PW680^MD30^PR2^PON^LRY^LH0,0

^FO8,28
^GB400,50,100^FS

^FO10,30
^A0N,72,72
^FD Hello World!^FS

^XZ

將打印:
這裏寫圖片描述
^LH0,0 ——標籤起點

2、打印中文字符

指令:

^XA
^SEE:GB18030.DAT^FS
^CWZ,E:SIMSUN.FNT
^CI26
^JMA^LL200^PW680^MD10^RP2^PON^LRN^LH0,0

^FO20,100
^AZN,72,72
^FD中123文ABC測試^FS

^PQ1
^XZ

效果:
這裏寫圖片描述
說明:
中文字符的打印需要預先設置字體庫,而且在傳輸的時候需要用GB2312的編碼方式傳輸,否則會出現亂碼。

^AZN,72,72
注意第一個參數Z,它代表使用我們自己設置的Z字體,72代表字體的大小,由於使用了點陣字體,這裏的大小必須是24的整數倍。

^SEE:GB18030.DAT^FS
該指令共有三個參數
^SEa:b.c
參數a代表本地編碼表的選擇,可選值有【R,E,B,A】這四個參數的值定義暫時沒有詳細的資料,目前知道它用於區分ZPL指令和ZPL II指令,默認爲R,這裏使用E。
參數b代表編碼的名稱,目前網上找到的資料都是使用GB18030,暫時沒有發現其他編碼。
參數c代表編碼的後綴名,一般是DAT。

^CWZ,E:SIMSUN.FNT
該指令共有4個參數
^CWa,b:c.d
參數a代表設置的這個字體編號,可選值【A-Z和0-9】,當這裏設置了以後,^A的第一個參數才能引用到這個字體。
參數b同^SE的參數a。
參數c代表字體名稱,這裏的SIMSUN是宋體,可參考
https://blog.csdn.net/amy_king_0/article/details/54141460
嘗試設置更多字體類型,但是打印出來沒啥區別。
參數d代表字體後綴名,一般是FNT。

在使用python發送打印指令時,由於使用讀取txt的方式發送打印指令,需要檢查文本文檔編碼是否爲UTF-8,方法是點擊文件-另存爲時查看編碼
這裏寫圖片描述
同時在開頭添加編碼說明
這裏寫圖片描述
如果不是UTF-8,可能會出現亂碼。

python代碼:
https://download.csdn.net/download/bfz_50/10650435
運行前需先導入pyserial。
PS:由於早期用py2.7無法指定發送的編碼模式,建議用py3.7,並指定發送時的編碼模式爲gb18030
serial.write(printCommand.encode(‘gb18030’))

3、打印中文二維碼

^XA

^JMA^LL450^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26
^FO200,30
^BQN,2,10
^FDHM,B0200 中文測試!123#測試¥ABC%測試^FS

^XZ

這裏寫圖片描述
這裏寫圖片描述
說明:
該二維碼有時掃不到,需要拿遠一點才掃得到,而且打印機在打印了中文字符以後,需重新開關打印機清除緩存,才能打印。

python2.7無法通過txt的方式打印該二維碼,必須通過字符串的方式,代碼如下:

#!/usr/bin/env python
# -*- coding: cp936 -*- 
# -*- coding: utf-8 -*-

#打印機需重新開關,可能是清緩存

import serial

#打開串口
serialPort="COM3"   #串口
baudRate=9600       #波特率
ser=serial.Serial(serialPort,baudRate,timeout=0.5)

print "參數設置:串口=%s  \n波特率=%d"%(serialPort,baudRate) 
printCommand='''
^XA

^JMA^LL450^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26
^FO200,30
^BQN,2,10
^FDHM,B0200 中文測試!123#測試¥ABC%測試^FS

^XZ
          '''
        
print printCommand
ser.write(printCommand)
ser.close() 

其中^BQN,2,10是指定二維碼,指令格式如下:
^BQa,b,c
a代表二維碼方向,默認是N
b代表二維碼的版本,可選值有【1,2】,1是原始版本,2是增強版本,推薦用2,因爲1掃不出來。
c代表二維碼的放大程度,可選值【1-10】

注意二維碼的打印還需要與^FD配合,當我們使用^BQ這個函數時,^FD必須設置相關的參數
^FDab,cd^FS
a:錯誤糾正率,【H,Q,M,L】H是超高可靠度,L是高密度,建議使用H
b:數據輸入模式,【A,M】A是自動模式(參數c可省略),M是手動模式(需要指定參數c的字符類型)
c:字符模式,【N】數字,【A】字符,【B】字節,【K】Kanji(日文漢字)
d:二維碼的內容

4、模板

由於編碼問題,花了很長時間沒有辦法將中文二維碼和中文字符同時保留在一個頁面上,所以考慮只保留中文字符,不使用中文二維碼。
指令:

^XA
^SEE:GB18030.DAT^FS
^CWZ,E:SIMSUN.FNT
^JMA^LL800^PW700^MD0^PR3^PON^LRN^LH0,0
^CI26

^FO180,50^A0N,130,130
^FD1234^FS

^FO600,50^AZN,96,96
^FD補^FS

^FO600,50^GB95,95,1^FS

^FO0,200^A0N,80,80
^FD20001234^FS

^FO500,220^A0N,70,70
^FDAB123^FS

^FO0,300^A0N,80,80
^FD20171234ABCD^FS

^FO550,300^A0N,70,70
^FDNo.1^FS

^FO0,450^AZN,48,48
^FD毛重:478.03 g^FS

^FO0,500^AZN,48,48
^FD皮重:178.03 g^FS

^FO0,550^AZN,48,48
^FD淨重:300.00 g^FS

^FO380,400
^BQN,2,6
^FDHM,B0200 1234#20001234#AB123#20171234ABCD#No.1#pi478.03g#mao178.03g#jing300.00g^FS

^PQ1
^XZ

效果:
這裏寫圖片描述

說實話markdown升級了以後很不習慣,每個^前面都要加轉義字符\,不然會變成上標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章