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

时间:2021-07-10 23:52:03

这几天一直在弄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;