一维条码打印的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();