Zebra 條碼印表機應用開發實踐
這次做了個專案 其中有一個需求是控制條碼機
要求一是能列印條碼 二是能列印中文的經銷商名稱 還有列印一個點陣圖徽標
測試環境是 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
相關文章
- 最佳實踐(3):Windows應用開發Windows
- 聊天室應用開發實踐(一)
- 用 OSGi 應用程式開發和工作的最佳實踐
- Java 反射機制應用實踐Java反射
- Java反射機制應用實踐Java反射
- 後臺開發 -- 核心技術與應用實踐
- TypeScript 在開發應用中的實踐總結TypeScript
- DevOps最佳實踐之應用開發和部署dev
- XPages 開發實踐:開發基於 XPages 的複合應用程式
- 虛擬印表機開發報告
- 用JS開發跨平臺桌面應用,從原理到實踐JS
- 《ASP.NET開發與應用實踐》例題複習用ASP.NET
- 軟體開發實踐的24條軍規
- Flutter與Native混合開發-FlutterBoost整合應用和開發實踐(iOS)FlutteriOS
- Egret應用開發實踐(03) MVC 模組化具體實現MVC
- 印表機列印出現橫條紋怎麼處理 印表機出現一條一條的橫紋
- 印表機打出來有條紋怎麼處理 印表機打出來有間隔白條
- 《機器學習實踐應用》書中原始碼機器學習原始碼
- Serverless 工程實踐 | Serverless 應用開發觀念的轉變Server
- 後臺開發:核心技術與應用實踐 -- C++C++
- H5開發在QQ錢包的應用實踐H5
- 後臺開發-核心技術與應用實踐--TCP協議TCP協議
- 文件驅動開發模式在 AIMS 中的應用與實踐模式AI
- iOS 應用開發中的斷點續傳實踐總結iOS斷點
- Android應用開發必備的20條技能Android
- 用低程式碼開發平臺開發應用可靠嗎
- 《深入實踐Spring Boot》閱讀筆記:分散式應用開發Spring Boot筆記分散式
- 移動Web單頁應用開發實踐——頁面結構化Web
- 3D GIS 應用開發 —— 基於 Mapbox GL 的實踐3D
- 敏捷開發實踐之Scrum方法運用敏捷Scrum
- 用typescript開發爬蟲過程實踐TypeScript爬蟲
- TiDB應用實踐TiDB
- Oracle Audit 應用實踐Oracle
- 手機APP應用軟體開發APP
- 開發實踐丨用小熊派STM32開發板模擬自動售貨機
- 螞蟻實時低程式碼研發和流批一體的應用實踐
- 應用實踐——新東方實時數倉實踐
- C# 程式開發中經常遇到的10條實用的程式碼C#