多语言展示
当前在线:1581今日阅读:60今日分享:41

在asp.net 程序中生成条形码的应用

条形码现在是应用在各种场合,比如商品需要条形码进行识别,固定资产。而生成条形码有各种算法,在这里介绍Code39码的处理。
工具/原料

vs开发工具

方法/步骤
1

打开vs新建一个项目,在项目中添加一个网站并增加一个aspx为扩展名的文件。

2

在文件中拖动动件,如下吐

3

                                                                                       
                图书管理-条码打印预览           
                           
               
                                   
           

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

5

引入图形处理命名空间

6

上面完成后,让我们回到aspx后台程序里面,在里增加处理方法生成条形码。 private void Prin(string No)    {        Code39 _Code39 = new Code39();        _Code39.Height = 100;        _Code39.Magnify = 1;        _Code39.ViewFont = new Font('宋体', 20);        System.Drawing.Image _CodeImage = _Code39.GetCodeImage(No, Code39.Code39Model.Code39Normal, true);        System.IO.MemoryStream _Stream = new System.IO.MemoryStream();        _CodeImage.Save(_Stream, System.Drawing.Imaging.ImageFormat.Jpeg);        string path = Server.HtmlEncode(Request.PhysicalApplicationPath) + '\\Print\\' + No + '.jpeg';        _CodeImage.Save(path.Replace('\\\\', '\\'));        imgNo.ImageUrl = string.Format(@'~/Print/{0}.jpeg', No);    }上面的方法是根据传入的参数调用Code39进行条码生成

7

最后一步,运行程序,在程序中看最后效果。

8

到这里基本上已经完了,可以用微信或其它设备扫描就能识别出条形码的内容来。

推荐信息