code128条码生成与显示
Code128类库
using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication5
{
class BarCode
{
public class Code128
{
private DataTable m_Code128 = new DataTable();
private uint m_Height = 140;
/// <summary>
/// 高度
/// </summary>
public uint Height { get { return m_Height; } set { m_Height = value; } }
private Font m_ValueFont = null;
/// <summary>
/// 是否显示可见号码 如果为NULL不显示号码
/// </summary>
public Font ValueFont { get { return m_ValueFont; } set { m_ValueFont = value; } }
private byte m_Magnify = 2;
/// <summary>
/// 放大倍数
/// </summary>
public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } }
/// <summary>
/// 条码类别
/// </summary>
public enum Encode
{
Code128A,
Code128B,
Code128C,
EAN128
}
public Code128()
{
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>
public Bitmap GetCodeImage(string p_Text, Encode p_Code)
{
string _ViewText = p_Text;
string _Text = "";
IList<int> _TextNumb = new List<int>();
int _Examine = 0; //首位
switch (p_Code)
{
case Encode.Code128C:
_Examine = 105;
if (!((p_Text.Length & 1) == 0)) throw new Exception("128C长度必须是偶数");
while (p_Text.Length != 0)
{
int _Temp = 0;
try
{
int _CodeNumb128 = Int32.Parse(p_Text.Substring(0, 2));
}
catch
{
throw new Exception("128C必须是数字!");
}
_Text += GetValue(p_Code, p_Text.Substring(0, 2), ref _Temp);
_TextNumb.Add(_Temp);
p_Text = p_Text.Remove(0, 2);
}
break;
case Encode.EAN128:
_Examine = 105;
if (!((p_Text.Length & 1) == 0)) throw new 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
{
throw new 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) throw new Exception("无效的字符集!" + p_Text.Substring(0, 1).ToString());
_Text += _ValueCode;
_TextNumb.Add(_Temp);
p_Text = p_Text.Remove(0, 1);
}
break;
}
if (_TextNumb.Count == 0) throw new 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>
private string GetValue(Encode p_Code, string p_Value, ref int p_SetID)
{
if (m_Code128 == null) return "";
DataRow[] _Row = m_Code128.Select(p_Code.ToString() + "='" + p_Value + "'");
if (_Row.Length != 1) throw new 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>
private string GetValue(int p_CodeId)
{
DataRow[] _Row = m_Code128.Select("ID='" + p_CodeId.ToString() + "'");
if (_Row.Length != 1) throw new Exception("验效位的编码错误" + p_CodeId.ToString());
return _Row[0]["BandCode"].ToString();
}
/// <summary>
/// 获得条码图形
/// </summary>
/// <param name="p_Text">文字</param>
/// <returns>图形</returns>
private Bitmap GetImage(string p_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>
private void 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
internal Image GetCodeImage(string p)
{
throw new NotImplementedException();
}
}
}
}
//调用一
Code128 _Code = new Code128();
_Code.ValueFont = new Font("宋体", 12);
System.Drawing.Bitmap imgTemp = _Code.GetCodeImage("SF-1702-0005", Code128.Encode.Code128A);
GetBase64FromImage(imgTemp);
imgTemp.Save(System.AppDomain.CurrentDomain.BaseDirectory + "\\" + "BarCode.gif", System.Drawing.Imaging.ImageFormat.Gif);
//调用二
Graphics GraPinCode;
MemoryStream ms = new MemoryStream();;
GraPinCode = Graphics.FromImage(imgTemp);
//在矩形内绘制字串(字串,字体,画笔颜色,左上x.左上y)
imgTemp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
//需要输出图象信息 要修改HTTP头
Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
GraPinCode.Dispose();
imgTemp.Dispose();
Response.End();
//返回base64
public static string GetBase64FromImage(Bitmap imgTemp)
{
string strbaser64 = "";
try
{
MemoryStream ms = new MemoryStream();
imgTemp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
strbaser64 = Convert.ToBase64String(arr);
}
catch (Exception)
{
throw new Exception("Something wrong during convert!");
}
return strbaser64;
}
图片显示
<img src="data:image/png;base64,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"/>