4创建一个类,这个类处理条形码的生成。详细代码如下:using System;using System.Collections;using System.ComponentModel;using System.Drawing;using System.Data;namespace Book.Common{ /// /// Code39编码 /// public class Code39 { private Hashtable m_Code39 = new Hashtable(); private byte m_Magnify = 0; /// /// 放大倍数 /// public byte Magnify { get { return m_Magnify; } set { m_Magnify = value; } } private int m_Height = 40; /// /// 图形高 /// public int Height { get { return m_Height; } set { m_Height = value; } } private Font m_ViewFont = null; /// /// 字体大小 /// public Font ViewFont { get { return m_ViewFont; } set { m_ViewFont = value; } } public Code39() { m_Code39.Add('A', '11'); m_Code39.Add('B', '1'); m_Code39.Add('C', '11'); m_Code39.Add('D', '1'); m_Code39.Add('E', '11'); m_Code39.Add('F', '1'); m_Code39.Add('G', '1'); m_Code39.Add('H', '11'); m_Code39.Add('I', '1'); m_Code39.Add('J', '1'); m_Code39.Add('K', '11'); m_Code39.Add('L', '1'); m_Code39.Add('M', '11'); m_Code39.Add('N', '1'); m_Code39.Add('O', '11'); m_Code39.Add('P', '1'); m_Code39.Add('Q', '1'); m_Code39.Add('R', '11'); m_Code39.Add('S', '1'); m_Code39.Add('T', '1'); m_Code39.Add('U', '11'); m_Code39.Add('V', '1'); m_Code39.Add('W', '11'); m_Code39.Add('X', '1'); m_Code39.Add('Y', '11'); m_Code39.Add('Z', '1'); m_Code39.Add('0', '1'); m_Code39.Add('1', '11'); m_Code39.Add('2', '1'); m_Code39.Add('3', '11'); m_Code39.Add('4', '1'); m_Code39.Add('5', '11'); m_Code39.Add('6', '1'); m_Code39.Add('7', '1'); m_Code39.Add('8', '11'); m_Code39.Add('9', '1'); m_Code39.Add('+', '1'); m_Code39.Add('-', '1'); m_Code39.Add('*', '1'); m_Code39.Add('/', '1'); m_Code39.Add('%', '1'); m_Code39.Add('contentquot;', '1'); m_Code39.Add('.', '11'); m_Code39.Add(' ', '1'); } public enum Code39Model { /// /// 基本类别 1234567890ABC /// Code39Normal, /// /// 全ASCII方式 +A+B 来表示小写 /// Code39FullAscII } /// /// 获得条码图形 /// /// 文字信息 /// 类别 /// 是否增加前后*号 /// 图形 public Bitmap GetCodeImage(string p_Text, Code39Model p_Model, bool p_StarChar) { string _ValueText = ''; string _CodeText = ''; char[] _ValueChar = null; switch (p_Model) { case Code39Model.Code39Normal: _ValueText = p_Text.ToUpper(); break; default: _ValueChar = p_Text.ToCharArray(); for (int i = 0; i != _ValueChar.Length; i++) { if ((int)_ValueChar[i] >= 97 && (int)_ValueChar[i] <= 122) { _ValueText += '+' + _ValueChar[i].ToString().ToUpper(); } else { _ValueText += _ValueChar[i].ToString(); } } break; } _ValueChar = _ValueText.ToCharArray(); if (p_StarChar == true) _CodeText += m_Code39['*']; for (int i = 0; i != _ValueChar.Length; i++) { if (p_StarChar == true && _ValueChar[i] == '*') throw new Exception('带有起始符号不能出现*'); object _CharCode = m_Code39[_ValueChar[i].ToString()]; if (_CharCode == null) throw new Exception('不可用的字符' + _ValueChar[i].ToString()); _CodeText += _CharCode.ToString(); } if (p_StarChar == true) _CodeText += m_Code39['*']; Bitmap _CodeBmp = GetImage(_CodeText); GetViewImage(_CodeBmp, p_Text); return _CodeBmp; } /// /// 绘制编码图形 /// /// 编码 /// 图形 private Bitmap GetImage(string p_Text) { char[] _Value = p_Text.ToCharArray(); //宽 == 需要绘制的数量*放大倍数 + 两个字的宽 Bitmap _CodeImage = new Bitmap(_Value.Length * ((int)m_Magnify + 1), (int)m_Height); Graphics _Garphics = Graphics.FromImage(_CodeImage); _Garphics.FillRectangle(Brushes.White, new Rectangle(0, 0, _CodeImage.Width, _CodeImage.Height)); int _LenEx = 0; for (int i = 0; i != _Value.Length; i++) { int _DrawWidth = m_Magnify + 1; if (_Value[i] == '1') { _Garphics.FillRectangle(Brushes.Black, new Rectangle(_LenEx, 0, _DrawWidth, m_Height)); } else { _Garphics.FillRectangle(Brushes.White, new Rectangle(_LenEx, 0, _DrawWidth, m_Height)); } _LenEx += _DrawWidth; } _Garphics.Dispose(); return _CodeImage; } /// /// 绘制文字 /// /// 图形 /// 文字 private void GetViewImage(Bitmap p_CodeImage, string p_Text) { if (m_ViewFont == null) return; Graphics _Graphics = Graphics.FromImage(p_CodeImage); SizeF _FontSize = _Graphics.MeasureString(p_Text, m_ViewFont); if (_FontSize.Width > p_CodeImage.Width || _FontSize.Height > p_CodeImage.Height - 20) { _Graphics.Dispose(); return; } int _StarHeight = p_CodeImage.Height - (int)_FontSize.Height; _Graphics.FillRectangle(Brushes.White, new Rectangle(0, _StarHeight, p_CodeImage.Width, (int)_FontSize.Height)); int _StarWidth = (p_CodeImage.Width - (int)_FontSize.Width) / 2; _Graphics.DrawString(p_Text, m_ViewFont, Brushes.Black, _StarWidth, _StarHeight); _Graphics.Dispose(); } }}