ASP.net(c#)生成条形码 code39条码生成方法

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

  1.先下载一种免费的 code39条码字体

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

  

复制代码 代码如下:

  public sealed class Code39

  {

  #region private variables

  /// <summary>

  /// The Space Between each of Title, BarCode, BarCodeString

  /// </summary>

  private const int SPACE_HEIGHT = 3;

  SizeF _sizeLabel = SizeF.Empty;

  SizeF _sizeBarCodeValue = SizeF.Empty;

  SizeF _sizeBarCodeString = SizeF.Empty;

  #endregion

  #region Label

  private string _label = null;

  private Font _labelFont = null;

  /// <summary>

  /// BarCode Title (条码标签)

  /// </summary>

  public string Label

  {

  set { _label = value; }

  }

  /// <summary>

  /// BarCode Title Font (条码标签使用的字体)

  /// </summary>

  public Font LabelFont

  {

  get

  {

  if (_labelFont == null)

  return new Font("Arial", 10);

  return _labelFont;

  }

  set { _labelFont = value; }

  }

  #endregion

  private string _additionalInfo = null;

  private Font _addtionalInfoFont = null;

  /// <summary>

  /// Additional Info Font (附加信息字体)

  /// </summary>

  public Font AdditionalInfoFont

  {

  set { _addtionalInfoFont = value; }

  get

  {

  if (_addtionalInfoFont == null) return new Font("Arial", 10);

  return _addtionalInfoFont;

  }

  }

  /// <summary>

  /// Additional Info Content, if "ShowBarCodeValue" is true, the info is unvisible

  /// 附加信息,如果设置ShowBarCodeValue为true,则此项不显示

  /// </summary>

  public string AdditionalInfo

  {

  set { _additionalInfo = value; }

  }

  #region BarCode Value and Font

  private string _barCodeValue = null;

  /// <summary>

  /// BarCode Value (条码值)

  /// </summary>

  public string BarCodeValue

  {

  get

  {

  if (string.IsNullOrEmpty(_barCodeValue))

  throw new NullReferenceException("The BarCodeValue has not been set yet!");

  return _barCodeValue;

  }

  set { _barCodeValue = value.StartsWith("*") && value.EndsWith("*") ? value : "*" + value + "*"; }

  }

  private bool _showBarCodeValue = false;

  /// <summary>

  /// whether to show the original string of barcode value bellow the barcode

  /// 是否在条码下方显示条码值,默认为false

  /// </summary>

  public bool ShowBarCodeValue

  {

  set { _showBarCodeValue = value; }

  }

  private Font _barCodeValueFont = null;

  /// <summary>

  /// the font of the codestring to show

  /// 条码下方显示的条码值的字体

  /// </summary>

  public Font BarCodeValueFont

  {

  get

  {

  if (_barCodeValueFont == null)

  return new Font("Arial", 10);

  return _barCodeValueFont;

  }

  set { _barCodeValueFont = value; }

  }

  private int _barCodeFontSize = 50;

  /// <summary>

  /// the font size of the barcode value to draw

  /// 条码绘制的大小,默认50

  /// </summary>

  public int 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;

  // }

  //}

  }

  }

  return new 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

  private static int XCenter(int subWidth, int globalWidth)

  {

  return (globalWidth - subWidth) / 2;

  }

  }

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

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

  

复制代码 代码如下:

  protected void 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;

  }