C#-利用ZPL語言完畢條形碼的生成和打印




     近期由於公司項目的須要,研究了一項對我來說算是新的技術—條形碼的生成和打印。由於之前沒有接觸過這方面的知識,所以剛開始還有點小迷茫和小興奮,只是一步一步來,問題總會解決的。如今來總結一下做條形碼這塊的收獲。

 

    條形碼的生成沒有什么難度,就是運用一些字符串處理函數自己主動生成一串字母或數字的組合。這里主要說明一下怎樣把生成的條碼值打印出來。首先我們要接觸一種新的語言ZPLZebraProgramming Language)看名字zebra就知道和斑馬有關;的確,ZPL是斑馬公司自主設計的語言(斑馬公司的業務主要是制作斑馬條形碼打印機)。如今大部分條碼打印機都是能夠識別ZPL指令的,我們能夠用ZPL指令編寫一個模板,然后將自己主動生成的條形碼值(字符串)依照一定格式格式化成新的字符串。然后將這些內容傳入打印機就可以。

以下來舉個Demo說明一下詳細的操作:

這是我編寫好的一個模板:(名稱為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語言還是非常好理解的,都是一些固定的指令,了解即可。

---------------------------------------------------------------------------------------------------------

^XA^XZ分別代表一個指令塊的開始和結束, 是固定的東西。

^PW打印寬度,假設寬度較小,則會出現打印不全的效果。

^MD設置標簽顏色的深度,取值范圍為 -30 to 30,上面的指令將顏色調到了最深。

^LH設置條碼紙的邊距,本模板未進行設置。

---------------------------------------------------------------------------------------------------------

下面以字符串abc^edf~L000001^L000002為例進行說明(abc、edf分別為漢字,L000001、L000002為條形碼值)

#CN_DATA1#為abc的占位符。

#CN_DATA2#為edf的占位符。

|宋體|20|15|指字體為宋體,字符高度為20,寬度為15

^FO設置條碼左上角的位置的坐標(70,0)。

^BY設置條形碼顯示樣式, 這是該模板最重要的一個部分, 2.0是條碼的縮放級別(可接受的數值:1-10點 ),這個數值下打出的條碼非常小, 3.0是條碼中粗細柱的比例(可接受的數值:2.0到3.0,增量0.1,對固定比例的條碼無效 ), 120是條碼高度。

^BCN是打印code128的指令。

^FD:設置要打印的內容

^FS:表示換行

#ID1#:指L000001

#ID2#:指L000002

---------------------------------------------------------------------------------------------------------

^PQ50,10,1,Y:打印總數50張標簽每一個序列號僅僅打一張。打印每組數量是10,但在每組間不暫停。

^PQ50,10,1,N:打印總數50張標簽每一個序列號僅僅打一張。打印每數量是10,每組打印后暫停。

這里能夠寫成^PQ1,0,1,Y,即每次打印一張,不暫停。由於打印總張數能夠在程序中進行控制。

---------------------------------------------------------------------------------------------------------

建議:編寫模板須要自己嘗試,能夠先編寫一個打印的demo,依據打印出來的效果,不斷的調試修改模板,以達到預期的效果。

模板說到這里應該就差點兒相同了。以下說明怎樣進行打印。

 

首先須要引入一個封裝好的DLL文件SMT.ZEBRA.dll,打印操作主要就是靠它來完畢的,在他內部封裝了一個ZebraPrinter類,包括方法PrintLabEx

        //     說明:
        //     打印條形碼、RFID等類型標簽
        //
        //   參數:
        //   n_strTemplateFilePath:
        //     標簽模版文件名,不含路徑,如:"TEMPLATE.TXT"
        //
        //   n_strLabels:
        //     標簽數據集合字符串,多個標簽行用'|'切割,單個標簽行數據內部用'^'(字段)切割或'~'(文字或條碼)切割, 如"研發部^51296829~8019^8020|11G~51296829^8001^8012"注明了例如以下打印要點:
        //     1. 打印兩行標簽(俗稱兩枚) 2. 第一行標簽打印兩個文本("研發部"、"51296829"),2個條形碼(各自是"8019"、"8020")
        //     3. 第二行標簽打印1個文本("11G"),3個條形碼("51296829"、"8001"、"8012")
        //   n_strPrinterName:
        //     打印機名稱等,比方"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
            {
                //實例化一個打印類
                ZebraPrinter printer = new ZebraPrinter();

                //定義兩個標簽值
                string str1 = "L000001";
                string str2 = "L000002";
                //依照格式,格式化成新的字符串
                str1 = string.Concat(" ", "^", " ", "~", str1, "^", str2);   //雙排條形碼
                //str = string.Concat(" ", "~", str);      //單排條形碼

                //printPath:模板名稱
                //comboBox1.Text:打印機名稱
                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)
        {
            //獲取本地計算機上安裝的全部打印機,保存到集合strCollects中
            PrinterSettings.StringCollection strCollects = PrinterSettings.InstalledPrinters;

            string strPrinterName = string.Empty;
            //遍歷集合,將全部打印機載入到下拉列表comboBox1中
            foreach (String strName in strCollects)
            {
                strPrinterName = strName.ToString();
                comboBox1.Items.Add(strPrinterName);
            }
            comboBox1.SelectedIndex = 0x00;
        }



打印效果:

                

有問題的地方歡迎指出!

 

 

  代碼下載

 

 

                                           oノo═══════════════════════╲

                                            │ヽ.編程學習ing....  歡迎交流。                             │

                                            │   http://blog.csdn.net/u010028869                  .ヽ│

                                             ╲═══════════════ヾ

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM