C#-利用ZPL语言完毕条形码的生成和打印
???? 近期由于公司項(xiàng)目的須要,研究了一項(xiàng)對(duì)我來(lái)說算是新的技術(shù)—條形碼的生成和打印。由于之前沒有接觸過這方面的知識(shí),所以剛開始還有點(diǎn)小迷茫和小興奮,只是一步一步來(lái),問題總會(huì)解決的。如今來(lái)總結(jié)一下做條形碼這塊的收獲。
?
??? 條形碼的生成沒有什么難度,就是運(yùn)用一些字符串處理函數(shù)自己主動(dòng)生成一串字母或數(shù)字的組合。這里主要說明一下怎樣把生成的條碼值打印出來(lái)。首先我們要接觸一種新的語(yǔ)言ZPL(ZebraProgramming Language)看名字zebra就知道和斑馬有關(guān);的確,ZPL是斑馬公司自主設(shè)計(jì)的語(yǔ)言(斑馬公司的業(yè)務(wù)主要是制作斑馬條形碼打印機(jī))。如今大部分條碼打印機(jī)都是能夠識(shí)別ZPL指令的,我們能夠用ZPL指令編寫一個(gè)模板,然后將自己主動(dòng)生成的條形碼值(字符串)依照一定格式格式化成新的字符串。然后將這些內(nèi)容傳入打印機(jī)就可以。
以下來(lái)舉個(gè)Demo說明一下詳細(xì)的操作:
這是我編寫好的一個(gè)模板:(名稱為BarcodePath,保存格式為.TXT或者.PRN格式,并且一定要注意是大寫!!)
---------------------------------------------------------------------------------------------------------
^XA
^PW1000
^MD30
^LH0,0
#CN_DATA1#;|宋體|20|15|^FO150,0
#CN_DATA2#;|宋體|20|15|^FO650,0
^FO70,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID1#^FS
^FO570,0^BY2.0,3.0^BCN,120,Y,N,N,A^FD#ID2#^FS
^PQ1,0,1,Y
^XZ
ZPL語(yǔ)言還是非常好理解的,都是一些固定的指令,了解即可。
---------------------------------------------------------------------------------------------------------
^XA和^XZ:分別代表一個(gè)指令塊的開始和結(jié)束, 是固定的東西。
^PW:打印寬度,假設(shè)寬度較小,則會(huì)出現(xiàn)打印不全的效果。
^MD:設(shè)置標(biāo)簽顏色的深度,取值范圍為 -30 to 30,上面的指令將顏色調(diào)到了最深。
^LH:設(shè)置條碼紙的邊距,本模板未進(jìn)行設(shè)置。
---------------------------------------------------------------------------------------------------------
下面以字符串a(chǎn)bc^edf~L000001^L000002為例進(jìn)行說明(abc、edf分別為漢字,L000001、L000002為條形碼值)
#CN_DATA1#:為abc的占位符。
#CN_DATA2#:為edf的占位符。
|宋體|20|15|:指字體為宋體,字符高度為20,寬度為15
^FO:設(shè)置條碼左上角的位置的坐標(biāo)(70,0)。
^BY:設(shè)置條形碼顯示樣式, 這是該模板最重要的一個(gè)部分, 2.0是條碼的縮放級(jí)別(可接受的數(shù)值:1-10點(diǎn) ),這個(gè)數(shù)值下打出的條碼非常小, 3.0是條碼中粗細(xì)柱的比例(可接受的數(shù)值:2.0到3.0,增量0.1,對(duì)固定比例的條碼無(wú)效 ), 120是條碼高度。
^BCN:是打印code128的指令。
^FD:設(shè)置要打印的內(nèi)容
^FS:表示換行
#ID1#:指L000001
#ID2#:指L000002
---------------------------------------------------------------------------------------------------------
^PQ50,10,1,Y:打印總數(shù)50張標(biāo)簽每一個(gè)序列號(hào)僅僅打一張。打印每組數(shù)量是10,但在每組間不暫停。
^PQ50,10,1,N:打印總數(shù)50張標(biāo)簽每一個(gè)序列號(hào)僅僅打一張。打印每數(shù)量是10,每組打印后暫停。
這里能夠?qū)懗?span style="background:#00FFFF;">^PQ1,0,1,Y,即每次打印一張,不暫停。由于打印總張數(shù)能夠在程序中進(jìn)行控制。
---------------------------------------------------------------------------------------------------------
建議:編寫模板須要自己嘗試,能夠先編寫一個(gè)打印的demo,依據(jù)打印出來(lái)的效果,不斷的調(diào)試修改模板,以達(dá)到預(yù)期的效果。
模板說到這里應(yīng)該就差點(diǎn)兒相同了。以下說明怎樣進(jìn)行打印。
?
首先須要引入一個(gè)封裝好的DLL文件SMT.ZEBRA.dll,打印操作主要就是靠它來(lái)完畢的,在他內(nèi)部封裝了一個(gè)ZebraPrinter類,包括方法PrintLabEx
// 說明:// 打印條形碼、RFID等類型標(biāo)簽//// 參數(shù):// n_strTemplateFilePath:// 標(biāo)簽?zāi)0嫖募?#xff0c;不含路徑,如:"TEMPLATE.TXT"//// n_strLabels:// 標(biāo)簽數(shù)據(jù)集合字符串,多個(gè)標(biāo)簽行用'|'切割,單個(gè)標(biāo)簽行數(shù)據(jù)內(nèi)部用'^'(字段)切割或'~'(文字或條碼)切割, 如"研發(fā)部^51296829~8019^8020|11G~51296829^8001^8012"注明了例如以下打印要點(diǎn):// 1. 打印兩行標(biāo)簽(俗稱兩枚) 2. 第一行標(biāo)簽打印兩個(gè)文本("研發(fā)部"、"51296829"),2個(gè)條形碼(各自是"8019"、"8020")// 3. 第二行標(biāo)簽打印1個(gè)文本("11G"),3個(gè)條形碼("51296829"、"8001"、"8012")// n_strPrinterName:// 打印機(jī)名稱等,比方"ZDesigner 888-TT" public bool PrintLabEx(string n_strTemplateFilePath, string n_strLabels, string n_strPrinterName);client代碼:
private void button1_Click(object sender, EventArgs e){try{//實(shí)例化一個(gè)打印類ZebraPrinter printer = new ZebraPrinter();//定義兩個(gè)標(biāo)簽值string str1 = "L000001";string str2 = "L000002";//依照格式,格式化成新的字符串str1 = string.Concat(" ", "^", " ", "~", str1, "^", str2); //雙排條形碼//str = string.Concat(" ", "~", str); //單排條形碼//printPath:模板名稱//comboBox1.Text:打印機(jī)名稱string printPath = "BarcodePath.TXT";printer.PrintLabEx(printPath, str1, comboBox1.Text);}catch (Exception ex){MessageBox.Show(ex.Message);}}private void SmtZebraWinFormZPL_Load(object sender, EventArgs e){//獲取本地計(jì)算機(jī)上安裝的全部打印機(jī),保存到集合strCollects中PrinterSettings.StringCollection strCollects = PrinterSettings.InstalledPrinters;string strPrinterName = string.Empty;//遍歷集合,將全部打印機(jī)載入到下拉列表comboBox1中foreach (String strName in strCollects){strPrinterName = strName.ToString();comboBox1.Items.Add(strPrinterName);}comboBox1.SelectedIndex = 0x00;}
打印效果:
????????????????
有問題的地方歡迎指出!
?
?
??代碼下載
?
?
?????????????????????????????????????????? oノo════════════════════════════╲
??????????????????????????????????????????? │ヽ.編程學(xué)習(xí)ing....? 歡迎交流。???????????????????????????? │
??????????????????????????????????????????? │?? http://blog.csdn.net/u010028869????????????????? .ヽ│
???????????????????????????????????????????? ╲═════════════════════════════ヾ
?
轉(zhuǎn)載于:https://www.cnblogs.com/mengfanrong/p/4360692.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C#-利用ZPL语言完毕条形码的生成和打印的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Objective-C之category
- 下一篇: Android自动化测试(UiAutom