C#生成code128条形码

来源:互联网 发布:种子填充算法例子 编辑:程序博客网 时间:2024/06/10 16:24

最近在做物流条形码的打印,下面分享一下用C#打印code128条码,以备后用。

?
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
namespaceCode
{
classBarCode
{
publicclass Code128
{
privateDataTable m_Code128 = newDataTable();
privateuint m_Height = 40;
/// <summary>
/// 高度
/// </summary>
publicuint Height { get { returnm_Height; } set{ m_Height = value; } }
privateFont m_ValueFont = null;
/// <summary>
/// 是否显示可见号码 如果为NULL不显示号码
/// </summary>
publicFont ValueFont { get{ return m_ValueFont; } set { m_ValueFont = value; } }
privatebyte m_Magnify = 0;
/// <summary>
/// 放大倍数
/// </summary>
publicbyte Magnify { get { returnm_Magnify; } set{ m_Magnify = value; } }
/// <summary>
/// 条码类别
/// </summary>
publicenum Encode
{
Code128A,
Code128B,
Code128C,
EAN128
}
publicCode128()
{
m_Code128.Columns.Add("ID");
m_Code128.Columns.Add("Code128A");
m_Code128.Columns.Add("Code128B");
m_Code128.Columns.Add("Code128C");
m_Code128.Columns.Add("BandCode");
m_Code128.CaseSensitive =true;
#region 数据表
m_Code128.Rows.Add("0"," ", " ", "00","212222");
m_Code128.Rows.Add("1","!", "!", "01","222122");
m_Code128.Rows.Add("2","\"", "\"", "02","222221");
m_Code128.Rows.Add("3","#", "#", "03","121223");
m_Code128.Rows.Add("4","$", "$", "04","121322");
m_Code128.Rows.Add("5","%", "%", "05","131222");
m_Code128.Rows.Add("6","&", "&", "06","122213");
m_Code128.Rows.Add("7","'", "'", "07","122312");
m_Code128.Rows.Add("8","(", "(", "08","132212");
m_Code128.Rows.Add("9",")", ")", "09","221213");
m_Code128.Rows.Add("10","*", "*", "10","221312");
m_Code128.Rows.Add("11","+", "+", "11","231212");
m_Code128.Rows.Add("12",",", ",", "12","112232");
m_Code128.Rows.Add("13","-", "-", "13","122132");
m_Code128.Rows.Add("14",".", ".", "14","122231");
m_Code128.Rows.Add("15","/", "/", "15","113222");
m_Code128.Rows.Add("16","0", "0", "16","123122");
m_Code128.Rows.Add("17","1", "1", "17","123221");
m_Code128.Rows.Add("18","2", "2", "18","223211");
m_Code128.Rows.Add("19","3", "3", "19","221132");
m_Code128.Rows.Add("20","4", "4", "20","221231");
m_Code128.Rows.Add("21","5", "5", "21","213212");
m_Code128.Rows.Add("22","6", "6", "22","223112");
m_Code128.Rows.Add("23","7", "7", "23","312131");
m_Code128.Rows.Add("24","8", "8", "24","311222");
m_Code128.Rows.Add("25","9", "9", "25","321122");
m_Code128.Rows.Add("26",":", ":", "26","321221");
m_Code128.Rows.Add("27",";", ";", "27","312212");
m_Code128.Rows.Add("28","<", "<", "28","322112");
m_Code128.Rows.Add("29","=", "=", "29","322211");
m_Code128.Rows.Add("30",">", ">", "30","212123");
m_Code128.Rows.Add("31","?", "?", "31","212321");
m_Code128.Rows.Add("32","@", "@", "32","232121");
m_Code128.Rows.Add("33","A", "A", "33","111323");
m_Code128.Rows.Add("34","B", "B", "34","131123");
m_Code128.Rows.Add("35","C", "C", "35","131321");
m_Code128.Rows.Add("36","D", "D", "36","112313");
m_Code128.Rows.Add("37","E", "E", "37","132113");
m_Code128.Rows.Add("38","F", "F", "38","132311");
m_Code128.Rows.Add("39","G", "G", "39","211313");
m_Code128.Rows.Add("40","H", "H", "40","231113");
m_Code128.Rows.Add("41","I", "I", "41","231311");
m_Code128.Rows.Add("42","J", "J", "42","112133");
m_Code128.Rows.Add("43","K", "K", "43","112331");
m_Code128.Rows.Add("44","L", "L", "44","132131");
m_Code128.Rows.Add("45","M", "M", "45","113123");
m_Code128.Rows.Add("46","N", "N", "46","113321");
m_Code128.Rows.Add("47","O", "O", "47","133121");
m_Code128.Rows.Add("48","P", "P", "48","313121");
m_Code128.Rows.Add("49","Q", "Q", "49","211331");
m_Code128.Rows.Add("50","R", "R", "50","231131");
m_Code128.Rows.Add("51","S", "S", "51","213113");
m_Code128.Rows.Add("52","T", "T", "52","213311");
m_Code128.Rows.Add("53","U", "U", "53","213131");
m_Code128.Rows.Add("54","V", "V", "54","311123");
m_Code128.Rows.Add("55","W", "W", "55","311321");
m_Code128.Rows.Add("56","X", "X", "56","331121");
m_Code128.Rows.Add("57","Y", "Y", "57","312113");
m_Code128.Rows.Add("58","Z", "Z", "58","312311");
m_Code128.Rows.Add("59","[", "[", "59","332111");
m_Code128.Rows.Add("60","\\", "\\", "60","314111");
m_Code128.Rows.Add("61","]", "]", "61","221411");
m_Code128.Rows.Add("62","^", "^", "62","431111");
m_Code128.Rows.Add("63","_", "_", "63","111224");
m_Code128.Rows.Add("64","NUL", "`", "64","111422");
m_Code128.Rows.Add("65","SOH", "a", "65","121124");
m_Code128.Rows.Add("66","STX", "b", "66","121421");
m_Code128.Rows.Add("67","ETX", "c", "67","141122");
m_Code128.Rows.Add("68","EOT", "d", "68","141221");
m_Code128.Rows.Add("69","ENQ", "e", "69","112214");
m_Code128.Rows.Add("70","ACK", "f", "70","112412");
m_Code128.Rows.Add("71","BEL", "g", "71","122114");
m_Code128.Rows.Add("72","BS", "h", "72","122411");
m_Code128.Rows.Add("73","HT", "i", "73","142112");
m_Code128.Rows.Add("74","LF", "j", "74","142211");
m_Code128.Rows.Add("75","VT", "k", "75","241211");
m_Code128.Rows.Add("76","FF", "I", "76","221114");
m_Code128.Rows.Add("77","CR", "m", "77","413111");
m_Code128.Rows.Add("78","SO", "n", "78","241112");
m_Code128.Rows.Add("79","SI", "o", "79","134111");
m_Code128.Rows.Add("80","DLE", "p", "80","111242");
m_Code128.Rows.Add("81","DC1", "q", "81","121142");
m_Code128.Rows.Add("82","DC2", "r", "82","121241");
m_Code128.Rows.Add("83","DC3", "s", "83","114212");
m_Code128.Rows.Add("84","DC4", "t", "84","124112");
m_Code128.Rows.Add("85","NAK", "u", "85","124211");
m_Code128.Rows.Add("86","SYN", "v", "86","411212");
m_Code128.Rows.Add("87","ETB", "w", "87","421112");
m_Code128.Rows.Add("88","CAN", "x", "88","421211");
m_Code128.Rows.Add("89","EM", "y", "89","212141");
m_Code128.Rows.Add("90","SUB", "z", "90","214121");
m_Code128.Rows.Add("91","ESC", "{", "91","412121");
m_Code128.Rows.Add("92","FS", "|", "92","111143");
m_Code128.Rows.Add("93","GS", "}", "93","111341");
m_Code128.Rows.Add("94","RS", "~", "94","131141");
m_Code128.Rows.Add("95","US", "DEL", "95","114113");
m_Code128.Rows.Add("96","FNC3", "FNC3", "96","114311");
m_Code128.Rows.Add("97","FNC2", "FNC2", "97","411113");
m_Code128.Rows.Add("98","SHIFT", "SHIFT", "98","411311");
m_Code128.Rows.Add("99","CODEC", "CODEC", "99","113141");
m_Code128.Rows.Add("100","CODEB", "FNC4", "CODEB","114131");
m_Code128.Rows.Add("101","FNC4", "CODEA", "CODEA","311141");
m_Code128.Rows.Add("102","FNC1", "FNC1", "FNC1","411131");
m_Code128.Rows.Add("103","StartA", "StartA", "StartA","211412");
m_Code128.Rows.Add("104","StartB", "StartB", "StartB","211214");
m_Code128.Rows.Add("105","StartC", "StartC", "StartC","211232");
m_Code128.Rows.Add("106","Stop", "Stop", "Stop","2331112");
#endregion
}
/// <summary>
/// 获取128图形
/// </summary>
/// <param name="p_Text">文字</param>
/// <param name="p_Code">编码</param>
/// <returns>图形</returns>
publicBitmap GetCodeImage(stringp_Text, Encode p_Code)
{
string_ViewText = p_Text;
string_Text = "";
IList<int> _TextNumb =new List<int>();
int_Examine = 0; //首位
switch(p_Code)
{
caseEncode.Code128C:
_Examine = 105;
if(!((p_Text.Length & 1) == 0)) thrownew Exception("128C长度必须是偶数");
while(p_Text.Length != 0)
{
int_Temp = 0;
try
{
int_CodeNumb128 = Int32.Parse(p_Text.Substring(0, 2));
}
catch
{
thrownew Exception("128C必须是数字!");
}
_Text += GetValue(p_Code, p_Text.Substring(0, 2),ref _Temp);
_TextNumb.Add(_Temp);
p_Text = p_Text.Remove(0, 2);
}
break;
caseEncode.EAN128:
_Examine = 105;
if(!((p_Text.Length & 1) == 0)) thrownew Exception("EAN128长度必须是偶数");
_TextNumb.Add(102);
_Text +="411131";
while(p_Text.Length != 0)
{
int_Temp = 0;
try
{
int_CodeNumb128 = Int32.Parse(p_Text.Substring(0, 2));
}
catch
{
thrownew Exception("128C必须是数字!");
}
_Text += GetValue(Encode.Code128C, p_Text.Substring(0, 2),ref _Temp);
_TextNumb.Add(_Temp);
p_Text = p_Text.Remove(0, 2);
}
break;
default:
if(p_Code == Encode.Code128A)
{
_Examine = 103;
}
else
{
_Examine = 104;
}
while(p_Text.Length != 0)
{
int_Temp = 0;
string_ValueCode = GetValue(p_Code, p_Text.Substring(0, 1), ref _Temp);
if(_ValueCode.Length == 0) thrownew Exception("无效的字符集!"+ p_Text.Substring(0, 1).ToString());
_Text += _ValueCode;
_TextNumb.Add(_Temp);
p_Text = p_Text.Remove(0, 1);
}
break;
}
if(_TextNumb.Count == 0) thrownew Exception("错误的编码,无数据");
_Text = _Text.Insert(0, GetValue(_Examine));//获取开始位
for(int i = 0; i != _TextNumb.Count; i++)
{
_Examine += _TextNumb[i] * (i + 1);
}
_Examine = _Examine % 103;//获得严效位
_Text += GetValue(_Examine);//获取严效位
_Text +="2331112"; //结束位
Bitmap _CodeImage = GetImage(_Text);
GetViewText(_CodeImage, _ViewText);
return_CodeImage;
}
/// <summary>
/// 获取目标对应的数据
/// </summary>
/// <param name="p_Code">编码</param>
/// <param name="p_Value">数值 A b 30</param>
/// <param name="p_SetID">返回编号</param>
/// <returns>编码</returns>
privatestring GetValue(Encode p_Code,string p_Value,ref intp_SetID)
{
if(m_Code128 == null)return "";
DataRow[] _Row = m_Code128.Select(p_Code.ToString() +"='" + p_Value +"'");
if(_Row.Length != 1) thrownew Exception("错误的编码"+ p_Value.ToString());
p_SetID = Int32.Parse(_Row[0]["ID"].ToString());
return_Row[0]["BandCode"].ToString();
}
/// <summary>
/// 根据编号获得条纹
/// </summary>
/// <param name="p_CodeId"></param>
/// <returns></returns>
privatestring GetValue(intp_CodeId)
{
DataRow[] _Row = m_Code128.Select("ID='"+ p_CodeId.ToString() + "'");
if(_Row.Length != 1) thrownew Exception("验效位的编码错误"+ p_CodeId.ToString());
return_Row[0]["BandCode"].ToString();
}
/// <summary>
/// 获得条码图形
/// </summary>
/// <param name="p_Text">文字</param>
/// <returns>图形</returns>
privateBitmap GetImage(stringp_Text)
{
char[] _Value = p_Text.ToCharArray();
int_Width = 0;
for(int i = 0; i != _Value.Length; i++)
{
_Width += Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1);
}
Bitmap _CodeImage =new Bitmap(_Width, (int)m_Height);
Graphics _Garphics = Graphics.FromImage(_CodeImage);
//Pen _Pen;
int_LenEx = 0;
for(int i = 0; i != _Value.Length; i++)
{
int_ValueNumb = Int32.Parse(_Value[i].ToString()) * (m_Magnify + 1);//获取宽和放大系数
if(!((i & 1) == 0))
{
//_Pen = new Pen(Brushes.White, _ValueNumb);
_Garphics.FillRectangle(Brushes.White,new Rectangle(_LenEx, 0, _ValueNumb, (int)m_Height));
}
else
{
//_Pen = new Pen(Brushes.Black, _ValueNumb);
_Garphics.FillRectangle(Brushes.Black,new Rectangle(_LenEx, 0, _ValueNumb, (int)m_Height));
}
//_Garphics.(_Pen, new Point(_LenEx, 0), new Point(_LenEx, m_Height));
_LenEx += _ValueNumb;
}
_Garphics.Dispose();
return_CodeImage;
}
/// <summary>
/// 显示可见条码文字 如果小于40 不显示文字
/// </summary>
/// <param name="p_Bitmap">图形</param>
privatevoid GetViewText(Bitmap p_Bitmap,string p_ViewText)
{
if(m_ValueFont == null)return;
Graphics _Graphics = Graphics.FromImage(p_Bitmap);
SizeF _DrawSize = _Graphics.MeasureString(p_ViewText, m_ValueFont);
if(_DrawSize.Height > p_Bitmap.Height - 10 || _DrawSize.Width > p_Bitmap.Width)
{
_Graphics.Dispose();
return;
}
int_StarY = p_Bitmap.Height - (int)_DrawSize.Height;
_Graphics.FillRectangle(Brushes.White,new Rectangle(0, _StarY, p_Bitmap.Width, (int)_DrawSize.Height));
_Graphics.DrawString(p_ViewText, m_ValueFont, Brushes.Black, 0, _StarY);
}
//12345678
//(105 + (1 * 12 + 2 * 34 + 3 * 56 + 4 *78)) % 103 = 47
//结果为starc +12 +34 +56 +78 +47 +end
internalImage GetCodeImage(stringp)
{
thrownew NotImplementedException();
}
}
}
}

  

  调用代码为:

            Code128 _Code = new Code128();            _Code.ValueFont = new Font("宋体", 20);            System.Drawing.Bitmap imgTemp = _Code.GetCodeImage("T26200-1900-123-1-0900",Code128.Encode.Code128A);            imgTemp.Save(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + "BarCode.gif", System.Drawing.Imaging.ImageFormat.Gif);
 
 
原文地址:http://www.cnblogs.com/rophie/archive/2012/03/02/2376946.html
原创粉丝点击