最近在公司使用票據打印機編程手冊指令對成品進行測試檢測,對打印命令需要深入理解,才能更好掌握它的原理和使用。
一、票據打印編程手冊
相關打印機的打印指令/編程手冊可以在網絡上找到茫茫多的資源。
像類似LF ESC開頭的,並不是代表字符串,他們都是ASCII碼表里排名靠前的控制字符,通過套接字傳送的數據是流,而流的本質是一個個的字節,所以這些命令中,一個符號代表一個字節,而字節的值在每條命令的詳解里面有參考值。
可以對照ASCII碼表對照,比如LF在第10位,十六進制是0x0A,是換行鍵的意思;ESC在27位,十六進制0x1B,是換碼(溢出)的意思。
比如ESC ! 選擇打印模式;ESC和!都是ASCII碼的值。
ASCII碼 ESC ! n
十六進制碼 1B 21 n
十進制碼 27 33 n
主要變化是n,n是一個數字,在0-255之間取得變化,它這里有8個位(剛好一個字節)可以設置,每個位的1/0代表開關的開啟和關閉,比如要設置加粗,那么n的第三位應該是1也就是2^3=8,十六進制是0x08,所以整個命令下來就是0x1B,0x21,0x08。
知道了原理,可以把整個編程手冊的指令融會理解。
把指令發送給打印機,打印機通過socket來提供服務,可以直接用socket發送指令。(相關socket網絡編程會在另外文章更新)
通過socket的流來發送指令,所以只能把字符串轉換為字節流,再傳送給打印機。不同字符,比如中文,在轉換字節流的時候需要設置不同的編碼。
以上的命令格式在小票熱敏打印機一般是通用的,不同的是提供打印服務的方式,有的通過網絡來提供套接字服務,有些通過COM串口來提供服務,不同的服務都可以轉化為流來處理,所以本質上是差不多的。
除此之外,企業可根據自身需求設計windows動態鏈接庫測試界面,可以在打印機連接USB后直接通過電腦操作打印測試,高效便捷。
以下整理打印機常用的ASCII碼對照
0X04:EOT:傳輸結束
0x05:ENQ:請求
0x09:HT:水平制表符
0x0A:LF:換行鍵
0x10:DLE:數據鏈路轉義
0x11-14:DC1-4:設備控制1-4
0x1B:ESC:換碼(溢出);在打印機中以該字符為起始的指令將立即響應,即使在錯誤狀態也實時回應。
0x1C:FS:文件分隔符
0x1D:GS:分組符
0x1E:RS:記錄分隔符
0x20:SP :空格
0x7E:~:起始的指令用於查詢打印機狀態
在網上看到有相關的C#打印機ESC指令,可以用作學習借鑒。
https://www.cnblogs.com/rinack/p/5227133.html
二、標簽打印編程手冊
原理上與上文大致相同,不同的是打印方式和指令不同,可以相互學習理解。
一個標簽通常包含三個部分,即系統設定(藍)、打印內容設定(綠)和執行打印指令(紅)。
系統設定:包括標簽尺寸SIZE、GAP和清除緩存區數據指令CLS等。
打印內容設定:打印文本或設計指令內容。
執行打印指令:用於打印設計好的標簽,此指令發送后才執行打印動作。
每一條指令結尾都 需要加入換行符,即字符串“\r\n”或16進制0x0D 0x0A
舉例說明:PRINT指令:用於打印出存儲影像緩沖區內的數據
其他不同的指令有不同的參數,實際需要參考編程手冊具體更改x,y,height,rotation(條碼旋轉角度),narrow/wide(窄寬比),code type等等。
轉:https://blog.csdn.net/zxh1592000/article/details/78840372
https://gitee.com/smslit/EmbeddedPrinter
https://www.docin.com/p-1913052817.html