Zebra 條碼印表機應用開發實踐

來源:互聯網
上載者:User

這次做了個項目 其中有一個需求是控制條碼機
要求一是能列印條碼 二是能列印中文的經銷商名稱 還有列印一個位元影像徽標
測試環境是 Windows 2000/XP/2003 條碼機是 Zebra 的 Z4M Plus
因為以前沒有做過條碼機 所以一開始想得比較簡單 覺得通過列印驅動應該就搞定了
開始編碼測試時發現 控制 Zebra 的列印驅動的確是可以按常規的印表機處理 但有兩個缺陷
一是對列印內容的位置和效果控制不精確 二是列印速度不行
而且客戶方有若干種不同型號的機器 要一一安裝對應的驅動 這也的確是個麻煩事
所以就試著通過串口直接控制條碼機

Zebra 系列內建了其自訂的 ZPL 通訊命令集
這其實也幾乎是目前主流品牌機型都支援的標準規範
ZPL 的具體命令內容很多 提供了對條碼機方方面面巨細不遺的控制
網上很多文章提到了指令的用法 不再贅述
更多詳細的指令說明可以查閱 Zebra 的命令手冊

一、條碼的列印
條碼機列印條碼非常簡單
發送的指令通常包括了對標籤尺寸、條碼位置、條碼尺寸、條碼類型的設定和具體的條碼內容。

例:
 ^XA^LH0,0^FO130,44^FO20,25^BY4^FO100,100^BCN,104,Y,N,N^FD>;0123456789^FS^PQ1^XZ

注:
 該指令序列將列印 CODE 128 規範的 0-9 的一維數字條碼

二、中文的列印
網上有文章提到 可以用一個名為 fnthex32.dll 的庫 裡面匯出了一個 GetFontHex 函數
功能是將傳入的中文字串轉換為十六進位編碼並返回 這個庫在網上不太好找 在我做完項目之後數天 有幸找到了一個
想來用起來應該是比較方便 不過項目做完 沒有條碼機測試了 需要的朋友可以試一下

三、圖形的列印
上面提到的 GetFontHex 函數 不知道是不是也是把漢字轉換成圖形編碼的 個人猜想應該是
所以其實條碼機列印非標準字元和列印圖形應該是同樣的方法
對圖形的處理 重點在於要將圖形進行編碼 再加上指令發送就行了
編碼的方法比較簡單 非常類似於 DOS 下中文平台中點陣漢字型檔的編碼
即一個點用一個位(bit)表示 每個位元組描述 8 個點 先行後列 從上到下
也就是說 條碼機能列印的只能是二值映像
編碼的時候需要注意的是 如果每行結束時位元組未填滿 應向上擴充至整位元組(用 0 填位)

瞭解了編碼方式 就比較容易處理了
網上有方案提出 直接從點陣漢字型檔裡取點陣資料 這個方法個人覺得不太靈活
一是點陣字型檔較大 發布麻煩 二是文字大小受限
我的實現方法是 直接使用 API 向記憶體 Bitmap 畫出漢字 這樣漢字的字型和大小可以很方便地控制
然後掃描出點陣資訊 經過編碼 產生最終資料
比如確定好畫成白底黑色 編碼時白字當作 0 黑點當作 1
最終產生的資料 需要按圖形方式下載到條碼機緩衝內
輸出的時候指定使用該圖形即可
另外需要注意的是 下載圖形指令 ^DG 需要帶上幾個參數 分別指出圖形緩衝名稱和圖形的總位元組數及每行位元組數
這兩個數字需要計算好 再拼接到命令串中

總位元組數計算方法:
 ( 圖形寬度 * dpm / 8 ) * ( 圖形高度 / 8 )
 dpm 是解析度 即每毫米點數(Dots Per mm)

每行位元組數計算方法:
 ( 圖形寬度 / 8 )

比形為 664 x 40  dpm 為 8(通常取這個值)
 則總位元組數 = ( 664 * 8 / 8 ) * ( 40 / 8 ) = 3320 位元組
 每行位元組數 = ( 664 / 8 ) = 83 位元組

例:
 ^XA^LH0,0^IDR:*.*^XZ~DGIMG0,3320,83,...(編碼後的資料)...^PQ1^XZ
注:
 該指令將編碼後的圖形資料下載至條碼機 並指定儲存到別名為 IMG0 的快取區域中
 之後 用 ^XG 指令即可引用該圖形

//*******************
// 需要注意的問題:
//*******************
一、解析度
如果解析度不是標準的 8dpm 經測試 Zebra Z4M Plus 對資料的處理有時候會有 Error 狀態發生
在 S 系列上則完全正常
但願是我的方法或代碼有問題

二、處理速度
串口發送資料速度較慢 經測試 3320 位元組大小的資料從發送到列印完成平均需要 0.5 秒左右
好在這次項目標籤尺寸並不大 速度尚在可接受範圍內
若對速度有更高要求 可以考慮使用並口
USB 口也許更快 但未經測試 不知道方法是否通用

這裡只記錄了我涉及到的應用 記性太差 以後再有類似開發時有案可查 不至於從頭再弄
也但願能給剛開始接觸且需要處理條碼機應用的朋友一些拙劣的啟發

歡迎同好研究探討: scumyang@163.com

scum
2006-08-07
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.