编辑
2025-09-17
C#
00

目录

BarcodeLib 特点
准备工作
Barcode 类的基本属性
条码类型枚举 (Type)
在 WinForm 中生成条形码
步骤一:设计界面
示例代码一
示例二
总结

BarcodeLib 是一个开源的 C# 库,用于生成多种类型的条形码。它功能强大,易于使用,适合在 WinForm 应用程序中集成。BarcodeLib 支持生成以下几种常见的条形码格式:

  • Code 128
  • UPC-A
  • EAN-13
  • Code 39
  • Postnet
  • 其他多种格式

本文将介绍如何在 WinForm 项目中使用 BarcodeLib 简单生成条码,并展示一个完整的示例。

BarcodeLib 特点

  • 易用性:简单的 API 接口,易于集成。
  • 多样性:支持多种主流的条形码格式。
  • 自由:开源库,可自由定制和扩展。
  • 高效:生成条形码的速度快,性能高。

准备工作

创建一个新的 WinForm 应用程序项目。

使用 NuGet 安装 BarcodeLib 库。打开“包管理控制台”并输入以下命令:

PowerShell
Install-Package BarcodeLib

image.png

Barcode 类的基本属性

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 }

条码类型枚举 (Type)

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码 }

在 WinForm 中生成条形码

步骤一:设计界面

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

image.png

示例二

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

image.png

此库提供了丰富的条形码生成功能,支持多种条形码类型和自定义选项。使用时需要注意:

  1. 选择适合的条形码类型
  2. 正确处理输入数据验证
  3. 适当设置尺寸和样式
  4. 正确处理图像转换和存储
  5. 实现适当的错误处理
  6. 注意内存管理和资源释放

总结

本文介绍了如何在 WinForm 应用程序中使用 BarcodeLib 生成条码。通过简单的界面设计和编码,可以轻松实现条码的生成和显示。BarcodeLib 提供了丰富的功能和定制选项,可以根据需要进行扩展和改进。希望这篇文章对你有所帮助!

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!