好久沒有這么專注的研究過一個東西了,當研究出來后久違的滿足感!
最近項目中需要用到標簽打印,雖然與打印機的接口由其他設備外包商承接,但打印機型號的采購還是需要我們自己選擇,且承包商也不願做復雜的通訊接口,所以才有了后來的研究, 項目為了保險起見,我們還是需要驗證一下技術實現方式和實現難度。
當然由其他家各種品牌標簽打印機,其中不乏特別簡單通訊方式的,但最終選擇了斑馬的型號,原因很簡單:便宜!
此次測試的打印機型號為GK888t(雖不是最終項目上要用的型號,但據說斑馬的通訊方式都一樣)。
現狀:一台GK888t打印機(之前出現問題就是打印的不清晰,換了紙也不行,最終找到原因電源適配器小了,原來打印機很久沒用,這次測試就隨便找了個能用的適配器插上了,結果證明還是原裝的靠譜啊)
標簽打印紙:若干;
在這之前已實現兩種打印方式:
1. html模板直接打印。
2. 另一就是程序中引用.nlbl模板,替換其中變量后發送至打印機實現帶模板的打印。
現在要實現: 將模板下載至打印機存儲(可以斷點保持),打印時直接向打印機發送模板中變量的值實現套用模板打印。
1. 首先肯定是找供應商要相關資料:
看完資料后發現兩種方式可以實現我的訴求:1- GRF或PNG格式的標簽模板(雖然zebra designer導出的是.lbl或.nlbl格式,這個目前還沒弄明白怎么轉換稱這種格式)。2-格式標簽的方式實現(本文描述該實現方式)。
2. 准備實現
首先看下文檔中的描述:
很清晰,但就是看不明白這一串串的指令是什么意思,先看圖:
接下來就現根據自己的一知半解解釋一番:
開頭:^XA ;結尾:^XZ ;這是固定格式。
^DFR:FORMAT^FS 中DF為download format 即:下載保存格式的意思,就是下載格式到打印機,下載到打印機的什么位置呢? 看下圖:
這就明白了,然后冒號后面的FORMAT為這次下載的標簽格式的名稱(調用時要用),最后的^FS為指令域的結束符。
然后下一句:^LH30,30 什么意思呢? 繼續看圖:
這就很清晰了,其中FN1、FN2為參數名(調用時會用到)。
好了,保存完模板,我們就該調用了!
^XFR:為調用模板,下載位置需要與保存位置相同,名稱等一致。
然后需要編輯參數與參數值的對應關系,其中參數FN1、FN2賦值時需加FD。
現在為止,已經完成標簽保存和調用了。但實際應用過程中發現。。。變量打印中文亂碼。。。
3. 解決標簽格式打印中文變量亂碼的問題
首先看下當前打印機中都有哪些字體?
發送命令:^XA^WD*:*.FNT*^XZ 則會打印出該打印機上保存的所有可用字體如下圖
發現,咦,有SIMSUN.FNT。據說這個可以打印中文。那就不用再下載字體了,且已經有標號1(如果沒有,可通過命令^XA^CWM,E:SIMSUN.FNT^XZ 賦值,標號可自定義子母或數字(猜的)),如果需要下載字體可以參考:http://www.chongshang.com.cn/manual/ZPL_font.shtml
那么開始打印吧,從網上查找資料時發現如下信息:頓時如獲至寶:
^XA ^CI26 //ASCII Transparency和多字節亞洲編碼 ^SEE:GB18030.DAT //碼表 ^CW1,E:SIMSUN.FNT //字體(宋體) ^FO200,200^A1N,48,48^FD中文^FS //打印文字 ^FT448,288^BQ2,2,10^A1N,48,48^FD中文^FS //打印二維碼 ^XZ
那么就有了,改造一下模板命令試試吧:
最終得到新模板命令如下
^XA ^DFE:FORMAT^FS // 下載保存模板 ^LH0,0 //原點 ^FO12,121^GB643,0,1^FS // 分割線 ^FO12,173^GB643,0,1^FS ^CI26 //ASCII Transparency和多字節亞洲編碼 ^SEE:GB18030.DAT //碼表 ^CW1,E:SIMSUN.FNT //字體(宋體) ^FO300,45^A1N,25,25^CI26^FD打印人:^FS //其中A1N 表示使用標號為1的字體,后面的25,25 代表字體大小 ^FO300,89^A1N,25,25^CI26^FD打印日期:^FS ^FO27,143^A1N,25,25^CI26^FD門店信息:^FS ^FO43,253^A1N,25,25^CI26^FD起始巷道:^FS ^FO43,199^A1N,25,25^CI26^FD訂單編號:^FS ^FO18,40^A1N,33,25^FN1^FS ^FO39,102^A1N,35,35^FN2^FS ^FO420,45^A1N,33,33^FN3^FS ^FO149,148^A1N,30,30^FN4^FS ^FO356,148^A1N,30,30^FN5^FS ^BY2,3,120^FT37,429^BCN,,Y,N,,A ^FN6^FS ^FO210,254^A1N,28,28^FN7^FS ^FO210,200^A1N,28,28^FN8^FS ^FO420,200^A1N,28,28^FN9^FS ^FO420,93^A1N,28,25^FN10^FS ^PQ1,,,Y ^XZ
調用一下試試:
^XA ^XFE:FORMAT^FS ^FN1^FD首打^FS ^FN2^FD箱揀標簽^FS ^FN3^FD呂笑笑^FS ^FN4^FD20126^FS ^FN5^FD京東2號店^FS ^FN6^FD202010291437001^FS ^FN7^FDSRM03^FS ^FN8^FD20201029001^FS ^FN9^FD2/9-36/60^FS ^FN10^FD2020-10-29 16:12^FS ^XZ
成了:
最后附上幾個常用命令:
刪除標簽模板 :^XA^IDE:FORMAT.ZPL^FS^XZ