zoukankan      html  css  js  c++  java
  • C# asp.net 条形码 code39条码 生成 扫描枪能识别(好东西转载...) 枫

    这几天一直在弄128条码的事情,找了相关的资料,也没找到。后来没办法只能改成code39的条码。现在把它写出来,与大家分享

    1.先下载一种免费的 code39条码字体   点击这里也可下载

    2.建个类 为 code39 并写入以下代码  

    代码
    复制代码
    publicsealedclass Code39
    {
    #region private variables
    ///<summary>
    /// The Space Between each of Title, BarCode, BarCodeString
    ///</summary>
    privateconstint SPACE_HEIGHT =3;
    SizeF _sizeLabel
    = SizeF.Empty;
    SizeF _sizeBarCodeValue
    = SizeF.Empty;
    SizeF _sizeBarCodeString
    = SizeF.Empty;

    #endregion

    #region Label
    privatestring _label =null;
    private Font _labelFont =null;
    ///<summary>
    /// BarCode Title (条码标签)
    ///</summary>
    publicstring Label
    {
    set { _label = value; }
    }
    ///<summary>
    /// BarCode Title Font (条码标签使用的字体)
    ///</summary>
    public Font LabelFont
    {
    get
    {
    if (_labelFont ==null)
    returnnew Font("Arial", 10);
    return _labelFont;
    }
    set { _labelFont = value; }
    }
    #endregion

    privatestring _additionalInfo =null;
    private Font _addtionalInfoFont =null;
    ///<summary>
    /// Additional Info Font (附加信息字体)
    ///</summary>
    public Font AdditionalInfoFont
    {
    set { _addtionalInfoFont = value; }
    get
    {
    if (_addtionalInfoFont ==null) returnnew Font("Arial", 10);
    return _addtionalInfoFont;
    }
    }
    ///<summary>
    /// Additional Info Content, if "ShowBarCodeValue" is true, the info is unvisible
    /// 附加信息,如果设置ShowBarCodeValue为true,则此项不显示
    ///</summary>
    publicstring AdditionalInfo
    {
    set { _additionalInfo = value; }
    }

    #region BarCode Value and Font
    privatestring _barCodeValue =null;
    ///<summary>
    /// BarCode Value (条码值)
    ///</summary>
    publicstring BarCodeValue
    {
    get
    {
    if (string.IsNullOrEmpty(_barCodeValue))
    thrownew NullReferenceException("The BarCodeValue has not been set yet!");
    return _barCodeValue;
    }
    set { _barCodeValue = value.StartsWith("*") && value.EndsWith("*") ? value : "*"+ value +"*"; }
    }

    privatebool _showBarCodeValue =false;
    ///<summary>
    /// whether to show the original string of barcode value bellow the barcode
    /// 是否在条码下方显示条码值,默认为false
    ///</summary>
    publicbool ShowBarCodeValue
    {
    set { _showBarCodeValue = value; }
    }

    private Font _barCodeValueFont =null;
    ///<summary>
    /// the font of the codestring to show
    /// 条码下方显示的条码值的字体
    ///</summary>
    public Font BarCodeValueFont
    {
    get
    {
    if (_barCodeValueFont ==null)
    returnnew Font("Arial", 10);
    return _barCodeValueFont;
    }
    set { _barCodeValueFont = value; }
    }

    privateint _barCodeFontSize =50;
    ///<summary>
    /// the font size of the barcode value to draw
    /// 条码绘制的大小,默认50
    ///</summary>
    publicint BarCodeFontSzie
    {
    set { _barCodeFontSize = value; }
    }
    #endregion

    #region generate the barcode image
    private Bitmap BlankBackImage
    {
    get
    {
    int barCodeWidth =0, barCodeHeight =0;
    using (Bitmap bmp =new Bitmap(1, 1, PixelFormat.Format32bppArgb))
    {
    using (Graphics g = Graphics.FromImage(bmp))
    {
    if (!string.IsNullOrEmpty(_label))
    {
    _sizeLabel
    = g.MeasureString(_label, LabelFont);
    barCodeWidth
    = (int)_sizeLabel.Width;
    barCodeHeight
    = (int)_sizeLabel.Height + SPACE_HEIGHT;
    }

    _sizeBarCodeValue
    = g.MeasureString(BarCodeValue, new Font("Free 3 of 9 Extended", _barCodeFontSize));
    barCodeWidth
    = Math.Max(barCodeWidth, (int)_sizeBarCodeValue.Width);
    barCodeHeight
    += (int)_sizeBarCodeValue.Height;

    if (_showBarCodeValue)
    {
    _sizeBarCodeString
    = g.MeasureString(_barCodeValue, BarCodeValueFont);
    barCodeWidth
    = Math.Max(barCodeWidth, (int)_sizeBarCodeString.Width);
    barCodeHeight
    += (int)_sizeBarCodeString.Height + SPACE_HEIGHT;
    }
    //else
    //{
    // if (!string.IsNullOrEmpty(_additionalInfo))
    // {
    // _sizeAdditionalInfo = g.MeasureString(_additionalInfo, AdditionalInfoFont);
    // barCodeWidth = Math.Max(barCodeWidth, (int)_sizeAdditionalInfo.Width);
    // barCodeHeight += (int)_sizeAdditionalInfo.Height + SPACE_HEIGHT;
    // }
    //}
    }
    }

    returnnew Bitmap(barCodeWidth, barCodeHeight, PixelFormat.Format32bppArgb);
    }
    }

    ///<summary>
    /// Draw the barcode value to the blank back image and output it to the browser
    /// 绘制WebForm形式的条码
    ///</summary>
    ///<param name="ms">Recommand the "Response.OutputStream" 使用 Response.OutputStream</param>
    ///<param name="imageFormat">The Image format to the Browser 输出到浏览器到图片格式,建议GIF</param>
    public Bitmap CreateWebForm(Stream ms, ImageFormat imageFormat)
    {
    int barCodeWidth, barCodeHeight;
    using (Bitmap bmp =this.BlankBackImage)
    {
    barCodeHeight
    = bmp.Height;
    barCodeWidth
    = bmp.Width;
    using (Graphics g = Graphics.FromImage(bmp))
    {
    g.Clear(Color.White);
    g.TextRenderingHint
    = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
    g.SmoothingMode
    = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    int vPos =0;
    ////Draw Label String
    if (!string.IsNullOrEmpty(_label))
    {
    g.DrawString(_label, LabelFont,
    new SolidBrush(Color.Black),
    XCenter((
    int)_sizeLabel.Width, barCodeWidth), vPos);
    vPos
    += (int)_sizeLabel.Height + SPACE_HEIGHT;
    }
    else { vPos = SPACE_HEIGHT; }

    ////Draw The Bar Value
    g.DrawString(_barCodeValue, new Font("Free 3 of 9 Extended", _barCodeFontSize), new SolidBrush(Color.Black),
    XCenter((
    int)_sizeBarCodeValue.Width, barCodeWidth), vPos);
    ////Draw the BarValue String
    if (_showBarCodeValue)
    {
    g.DrawString(_barCodeValue, BarCodeValueFont,
    new SolidBrush(Color.Black),
    XCenter((
    int)_sizeBarCodeString.Width, barCodeWidth),
    vPos
    + (int)_sizeBarCodeValue.Height);
    }
    //else
    //{
    // if (!string.IsNullOrEmpty(_additionalInfo))
    // {
    // g.DrawString(_additionalInfo, AdditionalInfoFont, new SolidBrush(Color.Black),
    // XCenter((int)_sizeAdditionalInfo.Width, barCodeWidth),
    // vPos + (int)_sizeBarCodeValue.Height);
    // }
    //}
    }

    bmp.Save(ms, imageFormat);
    return bmp;
    }
    }
    ///<summary>
    /// 生成winform格式的条码
    ///</summary>
    ///<param name="imageFormat">图片格式,建议GIF</param>
    ///<returns>Stream类型</returns>
    public Stream CreateWinForm(ImageFormat imageFormat)
    {
    int barCodeWidth, barCodeHeight;
    using (Bitmap bmp =this.BlankBackImage)
    {
    barCodeHeight
    = bmp.Height;
    barCodeWidth
    = bmp.Width;
    using (Graphics g = Graphics.FromImage(bmp))
    {
    g.Clear(Color.White);
    g.TextRenderingHint
    = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
    g.SmoothingMode
    = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
    int vPos =0;
    ////Draw Label String
    if (!string.IsNullOrEmpty(_label))
    {
    g.DrawString(_label, LabelFont,
    new SolidBrush(Color.Black),
    XCenter((
    int)_sizeLabel.Width, barCodeWidth), vPos);
    vPos
    += (int)_sizeLabel.Height + SPACE_HEIGHT;
    }
    else { vPos = SPACE_HEIGHT; }

    ////Draw The Bar Value
    g.DrawString(_barCodeValue, new Font("Free 3 of 9 Extended", _barCodeFontSize), new SolidBrush(Color.Black),
    XCenter((
    int)_sizeBarCodeValue.Width, barCodeWidth), vPos);
    ////Draw the BarValue String
    if (_showBarCodeValue)
    {
    g.DrawString(_barCodeValue, BarCodeValueFont,
    new SolidBrush(Color.Black),
    XCenter((
    int)_sizeBarCodeString.Width, barCodeWidth),
    vPos
    + (int)_sizeBarCodeValue.Height);
    }
    //else
    //{
    ////if (!string.IsNullOrEmpty(_additionalInfo))
    ////{
    //// g.DrawString(_additionalInfo, AdditionalInfoFont, new SolidBrush(Color.Black),
    //////XCenter((int)_sizeAdditionalInfo.Width, barCodeWidth),
    //// vPos + (int)_sizeBarCodeValue.Height);
    ////}
    //}
    }

    Stream ms
    =new MemoryStream();
    bmp.Save(ms, imageFormat);
    return ms;
    }
    }
    #endregion

    privatestaticint XCenter(int subWidth, int globalWidth)
    {
    return (globalWidth - subWidth) /2;
    }


    }
    复制代码
      

    3.如果是web程序 请调用 CreateWebForm 如果是cs程序 则使用CreateWinForm

     4.新建一aspx文件,写入以下代码        

    复制代码
    代码
    protectedvoid Page_Load(object sender, EventArgs e)
    {
    Code39 code39
    =new Code39();
    code39.BarCodeValue
    ="LDSO-001";
    code39.BarCodeFontSzie
    =60;
    // code39.Label = "39码,底部显示码值";
    code39.ShowBarCodeValue =true;
    Response.Write(code39.CreateWebForm(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif));
    code39
    =null;
    }
    复制代码

    顺便把源代码也给奉上吧

    作者:chenhuzi   出处:http://www.cnblogs.com/chenhuzi
    本文版权归作者所有 欢迎转载 但未经作者同意必须保留此段声明 且在文章页面明显位置给出原文连接 否则保留追究法律责任的权利
    个人淘宝站:http://chenhuzi.taobao.com 个人网站:http://chenhuzi.gicp.net
  • 相关阅读:
    凤凰传奇
    信息孤岛
    别了,中珠
    吃苦要趁早
    触动——beyond歌词
    走出舒适区,迎接挑战
    创新永存
    信息时代
    变色龙时代——创新
    Java基本的数据类型
  • 原文地址:https://www.cnblogs.com/mrray/p/2628316.html
Copyright © 2011-2022 走看看