1、CODE128基础知识

CODE128有三个版本:

CODE128A: 标准数字和字母, 控制符, 特殊字符

CODE128B: 标准数字和字母, 小写字母, 特殊字符

CODE128C: [00]-[99]的数字对集合, 共100个

这里采用CODE128B版本,系统内需要安装Code 128字体

2、条码编码规则

条码由开始位、数据、校验位、停止位组成

条码=Convert.ToChar(204)+数据+Convert.ToChar(校验码)+Convert.ToChar(206);

需要计算的就是校验码了,下面直接给出转换函数:

 


private string Get128CodeString(string inputData)

{

    string result;

    int checksum=104;

    for(int ii=0;ii<inputData.Length;ii++)

    {

        if(inputData[ii]>=32)

        {

            checksum+=(inputData[ii]-32)*(ii+1);

        }

        else        

        {

            checksum+=(inputData[ii]+64)*(ii+1);

        }            

    }

    checksum=checksum%103;        

    if(checksum<95)

    {

        checksum+=32;

    }

    else

    {

        checksum+=100;        

    }

    result=Convert.ToChar(204)+inputData.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);

    return result;

}


 

3、打印

 


public void PrintLable()

{

    PrintDocument pd = new PrintDocument();

    StandardPrintController controler = new StandardPrintController();


    try

    {    

        pd.PrintPage+=new PrintPageEventHandler(this.PrintCustomLable);

        pd.PrintController = controler;

        pd.Print();                    

        return;

    }

    catch(Exception err)

    {

        Console.WriteLine(err.Message);

        return;

    }

    finally

    {

        pd.Dispose();

    }


}

public void PrintCustomLable(Object Sender,PrintPageEventArgs av)

{

    Font ft1 = new System.Drawing.Font("Times New Roman",18,FontStyle.Regular,GraphicsUnit.World);

    Font ft2 = new System.Drawing.Font("Code 128",64,FontStyle.Regular,GraphicsUnit.World);

    Brush br = new SolidBrush(Color.Black);

    Margins margins = new Margins(50,50,50,145);

    av.PageSettings.Margins = margins;

    

    av.Graphics.DrawString(Get128CodeString(inputString),ft2,br,50,-3);

    av.Graphics.DrawString(inputString,ft1,br,110,60);

    av.HasMorePages = false;

}


 

看到评论说是不能用,今天测试了一下,发现写错了一个地方:

 

条码=Convert.ToChar(204)+数据+Convert.ToChar(校验码)+Convert.ToChar(206);

代码:

result=Convert.ToChar(204)+checksum.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);

应该改为:

result=Convert.ToChar(204)+inputData.ToString()+Convert.ToChar(checksum)+Convert.ToChar(206);

 

 

代码用到打印的东西需要引用:

using System.Drawing.Printing;

 

定义全局变量:

string inputString;

在按钮click中测试:

inputString = "0123456789";

//查看Code128码的值:

//lblBarCode.Text = Get128CodeString(inputString);

PrintLable();