BarcodeLib 是一个开源的 C# 库,用于生成多种类型的条形码。它功能强大,易于使用,适合在 WinForm 应用程序中集成。BarcodeLib 支持生成以下几种常见的条形码格式:
本文将介绍如何在 WinForm 项目中使用 BarcodeLib 简单生成条码,并展示一个完整的示例。
创建一个新的 WinForm 应用程序项目。
使用 NuGet 安装 BarcodeLib 库。打开“包管理控制台”并输入以下命令:
PowerShellInstall-Package BarcodeLib
C#public class Barcode
{
#region 基本数据属性
/// <summary>
/// 要编码的原始数据
/// </summary>
public string RawData { get; set; } = "";
/// <summary>
/// 编码后的值(只读)
/// </summary>
public string EncodedValue { get; private set; } = "";
/// <summary>
/// 制造商代码的分配国家(只读)
/// </summary>
public string CountryAssigningManufacturerCode { get; private set; } = "N/A";
/// <summary>
/// 条码类型(如 UPC-A, EAN-13 等)
/// </summary>
public Type EncodedType { set; get; } = Type.Unspecified;
/// <summary>
/// 生成的条码图像(只读)
/// </summary>
public SKImage EncodedImage { get; private set; }
#endregion
#region 样式属性
/// <summary>
/// 条码线条颜色(默认黑色)
/// </summary>
public SKColorF ForeColor { get; set; } = SKColors.Black;
/// <summary>
/// 背景颜色(默认白色)
/// </summary>
public SKColorF BackColor { get; set; } = SKColors.White;
/// <summary>
/// 标签字体(默认 Arial, 28pt, 粗体)
/// </summary>
public SKFont LabelFont { get; set; } = new SKFont
{
Typeface = SKTypeface.FromFamilyName("Arial", SKFontStyle.Bold),
Size = 28,
};
#endregion
#region 尺寸属性
/// <summary>
/// 图像宽度(默认300像素)
/// </summary>
public int Width { get; set; } = 300;
/// <summary>
/// 图像高度(默认150像素)
/// </summary>
public int Height { get; set; } = 150;
/// <summary>
/// 条码线宽度(设置后会忽略Width属性)
/// </summary>
public int? BarWidth { get; set; }
/// <summary>
/// 宽高比(设置后会根据宽度自动计算高度)
/// </summary>
public double? AspectRatio { get; set; }
#endregion
#region 标签属性
/// <summary>
/// 是否显示标签
/// </summary>
public bool IncludeLabel { get; set; }
/// <summary>
/// 自定义标签文本
/// </summary>
public String AlternateLabel { get; set; }
#endregion
#region 性能和格式属性
/// <summary>
/// 编码和绘制条码所需时间(毫秒)
/// </summary>
public double EncodingTime { get; set; }
/// <summary>
/// 图像格式(默认JPEG)
/// </summary>
public SKEncodedImageFormat ImageFormat { get; set; } = SKEncodedImageFormat.Jpeg;
#endregion
#region 错误和对齐属性
/// <summary>
/// 错误列表
/// </summary>
public List<string> Errors => _iBarcode.Errors;
/// <summary>
/// 条码在图像中的对齐方式
/// </summary>
public AlignmentPositions Alignment { get; set; }
#endregion
#region 其他属性
/// <summary>
/// 获取编码图像的字节数组(用于Crystal Reports)
/// </summary>
public byte[] EncodedImageBytes
{
get
{
if (EncodedImage == null)
return null;
using var ms = new MemoryStream();
EncodedImage.Encode(ImageFormat, 100).SaveTo(ms);
return ms.ToArray();
}
}
/// <summary>
/// 获取程序集版本信息
/// </summary>
public static Version Version =>
System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
/// <summary>
/// 禁用EAN13无效国家代码异常
/// </summary>
public bool DisableEan13CountryException { get; set; } = false;
#endregion
}
C#public enum Type
{
Unspecified, // 未指定
UpcA, // 通用产品代码 A,12位数字,用于零售商品
UpcE, // 通用产品代码 E,8位数字,UPC-A的压缩版
UpcSupplemental2Digit, // UPC 2位补充码,用于杂志期数
UpcSupplemental5Digit, // UPC 5位补充码,用于书籍价格
Ean13, // 欧洲商品编码,13位数字,国际通用
Ean8, // 欧洲商品编码,8位数字,EAN-13的缩短版
Interleaved2Of5, // 交错2/5码,用于工业包装
Interleaved2Of5Mod10, // 带校验位的交错2/5码
Standard2Of5, // 标准2/5码,工业应用
Standard2Of5Mod10, // 带校验位的标准2/5码
Industrial2Of5, // 工业2/5码,工业应用
Industrial2Of5Mod10, // 带校验位的工业2/5码
Code39, // Code 39码,支持数字和大写字母
Code39Extended, // 扩展Code 39码,支持ASCII全字符
Code39Mod43, // 带Mod43校验的Code 39码
Codabar, // Codabar码,用于医疗和图书馆
PostNet, // 邮政编码,美国邮政使用
Bookland, // 图书条码,基于EAN-13
Isbn, // 国际标准书号
Jan13, // 日本商品编码,13位
MsiMod10, // MSI码带Mod10校验
Msi2Mod10, // MSI码带双Mod10校验
MsiMod11, // MSI码带Mod11校验
MsiMod11Mod10, // MSI码带Mod11和Mod10校验
ModifiedPlessey, // 改良的Plessey码
Code11, // Code 11码,用于电信
Usd8, // 8位美元代码
Ucc12, // 12位统一商品代码
Ucc13, // 13位统一商品代码
Logmars, // 军事物流应用
Code128, // Code 128码,高密度字母数字码
Code128A, // Code 128 A集,控制字符和大写字母
Code128B, // Code 128 B集,所有可打印字符
Code128C, // Code 128 C集,00-99的数字对
Itf14, // 14位交错2/5码,物流包装
Code93, // Code 93码,比Code 39更紧凑
Telepen, // Telepen码,支持ASCII完整字符集
Fim, // 面向邮件的识别标记
Pharmacode, // 制药码,用于医药包装
IATA2of5 // 国际航空运输协会2/5码
}
在 Form1
上添加以下控件:
TextBox
控件用于输入条码内容。Button
控件用于生成条码。PictureBox
控件用于显示生成的条码图像。布局可以根据个人习惯进行调整,下面是基本的设计:
TextBox
控件命名为 txtCode
Button
控件命名为 btnGenerate
,文本内容设为 "生成条码"PictureBox
控件命名为 picBarcode
C#using BarcodeStandard;
using SkiaSharp;
namespace AppBarcodeLib
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnGenerate_Click(object sender, EventArgs e)
{
string input = txtCode.Text;
if (string.IsNullOrWhiteSpace(input))
{
MessageBox.Show("请输入条码内容", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
Barcode b = new Barcode();
// 设置条码格式
b.IncludeLabel = true;
// 生成条码
SKImage skImage = b.Encode(BarcodeStandard.Type.Code128, input, SKColors.Black, SKColors.White, 300, 100);
// 将 SKImage 转换为 Bitmap
using (SKData data = skImage.Encode())
{
using (MemoryStream stream = new MemoryStream(data.ToArray()))
{
// 将图像数据转换为 System.Drawing.Image
picBarcode.Image = Image.FromStream(stream);
}
}
}
catch (Exception ex)
{
MessageBox.Show($"生成条码时发生错误: {ex.Message}", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
C#using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using BarcodeStandard;
using SkiaSharp;
using Type = BarcodeStandard.Type;
namespace AppBarcodeLib
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public void GenerateBarcode()
{
// 1. 基本条码生成
Barcode barcode = new Barcode
{
RawData = txtCode.Text,
EncodedType = Type.Ean13,
Width = 300,
Height = 150
};
// 2. 自定义样式
barcode.ForeColor = SKColors.Blue;
barcode.BackColor = SKColors.LightGray;
barcode.IncludeLabel = true;
barcode.AlternateLabel = "Custom Text";
// 3. 设置字体
barcode.LabelFont = new SKFont
{
Typeface = SKTypeface.FromFamilyName("Times New Roman", SKFontStyle.Bold),
Size = 32
};
SKImage skImage = barcode.Encode(txtCode.Text);
// 转换为Windows Forms可用的图像格式
using (SKData data = skImage.Encode())
{
using (MemoryStream stream = new MemoryStream(data.ToArray()))
{
System.Drawing.Image windowsImage = System.Drawing.Image.FromStream(stream);
// 现在可以在 PictureBox 中使用这个图像
picBarcode.Image = windowsImage;
}
}
}
private void btnGenerate_Click(object sender, EventArgs e)
{
GenerateBarcode();
}
}
}
此库提供了丰富的条形码生成功能,支持多种条形码类型和自定义选项。使用时需要注意:
本文介绍了如何在 WinForm 应用程序中使用 BarcodeLib 生成条码。通过简单的界面设计和编码,可以轻松实现条码的生成和显示。BarcodeLib 提供了丰富的功能和定制选项,可以根据需要进行扩展和改进。希望这篇文章对你有所帮助!
本文作者:技术老小子
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!