一维条码打印的C#实现(Code128)

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;
} 

 

 

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

using System.Drawing.Printing;

 定义全局变量:

string inputString;


在按钮click中测试:

inputString = "0123456789";

//查看Code128码的值:

//lblBarCode.Text = Get128CodeString(inputString);

PrintLable();

 

posted @ 2015-04-09 09:41  clown  阅读(4699)  评论(0编辑  收藏  举报