C# 数据矩阵生成器——包含代码示例的完整教程
数据矩阵条形码将大量的编码数据压缩到一个很小的物理区域内,因此成为药品标签、电子元件标记以及在空间有限的库存管理系统中跟踪物品的首选。 本教程将引导您了解如何使用IronBarcode在 C# 中生成 Data Matrix 条形码,自定义其外观,编码不同的数据类型,并将其导出为各种文件格式——所有这些都使用简单易懂、可用于生产的代码完成。
数据矩阵条形码有何特别之处?
数据矩阵条形码是二维符号,它将数据编码到排列成行和列的黑白点阵网格中。 与传统的线性条形码(如 UPC 或 EAN)不同,它们可以在 10 x 10 个模块大小的空间内存储多达 2,335 个字母数字字符或 3,116 个数字。 由于内置的里德-所罗门纠错功能,即使符号损坏高达 30%,现代条形码扫描器也能准确读取它们。
这些特性使得 Data Matrix 成为标记小型零件、邮政条形码和电子元件的理想选择,也适用于医疗保健和物流中心的标签制作。 医疗保健行业依赖GS1数据矩阵标准进行药品追踪,而制造商则将其嵌入生产线,用于在全球范围内识别产品。由于单个条形码可以存储大量数据,因此如今已被国际上各个行业广泛采用,以实现完整的应用追溯。
ISO/IEC 16022 标准规范了数据矩阵编码,定义了IronBarcode默认使用的 ECC200 变体。 ECC200 提供所有 Data Matrix 版本中最有效的纠错能力和最大的数据容量,使其成为新部署的正确选择。
| 翻译格式 | 翻译类型 | 最大字符数 | 错误纠正 | 典型用例 |
|---|---|---|---|---|
| 数据矩阵(ECC200) | 二维 | 2,335 个字母数字 | 里德-所罗门(约30%) | 医药、电子、物流 |
| 二维码 | 二维 | 4,296 个字母数字 | 里德-所罗门(高达 30%) | 网址、营销、支付 |
| UPC-A | 1D | 12位数字 | 无 | 零售产品标识 |
| Code 128 | 1D | 约50个字符 | 仅校验和 | 航运、一般物流 |
如何在 C# 项目中安装条形码库?
使用NuGet包管理器安装IronBarcode只需不到一分钟。 在 Visual Studio 中打开软件包管理器控制台并运行:
Install-Package BarCode
C# 数据矩阵生成器:IronBarcode 完整指南:图 1 - 与 C# 数据矩阵生成器:IronBarcode 完整指南相关的 5 张图片中的第 1 张
或者,在NuGet包管理器 GUI 中搜索Iron Software的BarCode 。 安装完成后,将命名空间添加到您的 C# 文件中:
using IronBarCode;
using IronBarCode;
Imports IronBarCode
这就是全部的准备工作了。 IronBarcode按照 ISO/IEC 16022 标准在内部处理所有复杂的 Data Matrix 编码,因此您可以专注于应用程序逻辑。 有关离线安装或自定义包源等其他设置选项,请参阅IronBarcode安装指南和高级NuGet安装页面。
支持的目标框架
IronBarcode 的目标平台为.NET 10、 .NET 8、 .NET 6、 .NET 5、 .NET Standard 2.0 和.NET Framework 4.6.2 及更高版本。 如果您的项目面向这些框架中的任何一个,则NuGet包无需额外配置即可安装。
如何创建您的第一个数据矩阵条形码?
生成 Data Matrix 条形码只需要一行代码:
// Create a Data Matrix barcode with product information
var myBarcode = BarcodeWriter.CreateBarcode("PROD-12345-2024", BarcodeWriterEncoding.DataMatrix);
// Save as a high-quality PNG image
myBarcode.SaveAsImage("product-label.png");
// Create a Data Matrix barcode with product information
var myBarcode = BarcodeWriter.CreateBarcode("PROD-12345-2024", BarcodeWriterEncoding.DataMatrix);
// Save as a high-quality PNG image
myBarcode.SaveAsImage("product-label.png");
' Create a Data Matrix barcode with product information
Dim myBarcode = BarcodeWriter.CreateBarcode("PROD-12345-2024", BarcodeWriterEncoding.DataMatrix)
' Save as a high-quality PNG image
myBarcode.SaveAsImage("product-label.png")
这段代码会创建一个数据矩阵条形码,编码文本为 PROD-12345-2024,并将其保存为 PNG 文件。参数 BarcodeWriterEncoding.DataMatrix 指示 IronBarcode 使用数据矩阵格式。 生成的条形码会自动应用 ECC200 规范,该规范包含内置纠错功能,可确保在实际条件下可靠扫描。
条形码输出
C# 数据矩阵生成器:IronBarcode 完整指南:图 2 - 第一个条形码输出
如需立即在应用程序中使用,请将条形码检索为位图或直接导出为 PDF:
// Get barcode as a bitmap for direct display in a UI control
var barcodeBitmap = myBarcode.ToBitmap();
// Save as PDF for document integration
myBarcode.SaveAsPdf("barcode-document.pdf");
// Get barcode as a bitmap for direct display in a UI control
var barcodeBitmap = myBarcode.ToBitmap();
// Save as PDF for document integration
myBarcode.SaveAsPdf("barcode-document.pdf");
' Get barcode as a bitmap for direct display in a UI control
Dim barcodeBitmap = myBarcode.ToBitmap()
' Save as PDF for document integration
myBarcode.SaveAsPdf("barcode-document.pdf")
IronBarcode支持导出为 PNG、JPEG、BMP、GIF、TIFF、SVG 和 PDF 格式。 您还可以创建条形码并将其添加到现有的 PDF 文档中,以便将其嵌入到采购订单、发票或发货清单中。
数据矩阵条形码可以编码哪些数据类型?
Data Matrix 支持多种编码模式,每种模式都针对不同的字符集进行了优化。 IronBarcode会根据您提供的内容自动选择最高效的模式:
// Encode alphanumeric product codes
var productCode = BarcodeWriter.CreateBarcode("ABC-123-XYZ", BarcodeWriterEncoding.DataMatrix);
productCode.SaveAsImage("product-code.png");
// Encode numeric serial numbers (numeric mode uses less space)
var serialNumber = BarcodeWriter.CreateBarcode("987654321098765", BarcodeWriterEncoding.DataMatrix);
serialNumber.SaveAsImage("serial-number.png");
// Encode URLs for product landing pages or support portals
var urlCode = BarcodeWriter.CreateBarcode("https://example.com/product/12345", BarcodeWriterEncoding.DataMatrix);
urlCode.SaveAsImage("url-datamatrix.png");
// Encode Unicode text for international applications
var unicodeBarcode = BarcodeWriter.CreateBarcode("製品-2024-東京", BarcodeWriterEncoding.DataMatrix);
unicodeBarcode.SaveAsImage("unicode-datamatrix.png");
// Encode alphanumeric product codes
var productCode = BarcodeWriter.CreateBarcode("ABC-123-XYZ", BarcodeWriterEncoding.DataMatrix);
productCode.SaveAsImage("product-code.png");
// Encode numeric serial numbers (numeric mode uses less space)
var serialNumber = BarcodeWriter.CreateBarcode("987654321098765", BarcodeWriterEncoding.DataMatrix);
serialNumber.SaveAsImage("serial-number.png");
// Encode URLs for product landing pages or support portals
var urlCode = BarcodeWriter.CreateBarcode("https://example.com/product/12345", BarcodeWriterEncoding.DataMatrix);
urlCode.SaveAsImage("url-datamatrix.png");
// Encode Unicode text for international applications
var unicodeBarcode = BarcodeWriter.CreateBarcode("製品-2024-東京", BarcodeWriterEncoding.DataMatrix);
unicodeBarcode.SaveAsImage("unicode-datamatrix.png");
Imports System
' Encode alphanumeric product codes
Dim productCode = BarcodeWriter.CreateBarcode("ABC-123-XYZ", BarcodeWriterEncoding.DataMatrix)
productCode.SaveAsImage("product-code.png")
' Encode numeric serial numbers (numeric mode uses less space)
Dim serialNumber = BarcodeWriter.CreateBarcode("987654321098765", BarcodeWriterEncoding.DataMatrix)
serialNumber.SaveAsImage("serial-number.png")
' Encode URLs for product landing pages or support portals
Dim urlCode = BarcodeWriter.CreateBarcode("https://example.com/product/12345", BarcodeWriterEncoding.DataMatrix)
urlCode.SaveAsImage("url-datamatrix.png")
' Encode Unicode text for international applications
Dim unicodeBarcode = BarcodeWriter.CreateBarcode("製品-2024-東京", BarcodeWriterEncoding.DataMatrix)
unicodeBarcode.SaveAsImage("unicode-datamatrix.png")
数字数据采用紧凑的编码模式,与字母数字文本相比,可减小条形码尺寸。 二进制编码无需手动配置即可处理特殊字符和Unicode文本。 IronBarcode会自动选择最有效的编码模式,因此您无需明确指定。
输出
这里,所有四种数据类型都已成功编码为有效的 Data Matrix 条形码。
C# 数据矩阵生成器:IronBarcode 完整指南:图 3 - 使用 4 种不同数据类型创建的数据矩阵条形码
要深入了解编码选项和字符集支持,请参阅IronBarcode编码文档和条形码数据类型参考。
如何自定义数据矩阵条形码的外观?
IronBarcode提供了一整套条形码自定义选项,用于控制尺寸、颜色、注释和边距:
// Create barcode with custom styling
var customBarcode = BarcodeWriter.CreateBarcode("CUSTOM-2024", BarcodeWriterEncoding.DataMatrix);
// Set specific dimensions in pixels
customBarcode.ResizeTo(500, 500);
// Adjust colors for special label requirements
customBarcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.DarkBlue);
customBarcode.ChangeBackgroundColor(IronSoftware.Drawing.Color.LightGray);
// Add human-readable text below the barcode symbol
customBarcode.AddAnnotationTextBelowBarcode("Product: CUSTOM-2024");
// Set margins to preserve the required quiet zone
customBarcode.SetMargins(10);
customBarcode.SaveAsImage("custom-datamatrix.png");
// Create barcode with custom styling
var customBarcode = BarcodeWriter.CreateBarcode("CUSTOM-2024", BarcodeWriterEncoding.DataMatrix);
// Set specific dimensions in pixels
customBarcode.ResizeTo(500, 500);
// Adjust colors for special label requirements
customBarcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.DarkBlue);
customBarcode.ChangeBackgroundColor(IronSoftware.Drawing.Color.LightGray);
// Add human-readable text below the barcode symbol
customBarcode.AddAnnotationTextBelowBarcode("Product: CUSTOM-2024");
// Set margins to preserve the required quiet zone
customBarcode.SetMargins(10);
customBarcode.SaveAsImage("custom-datamatrix.png");
' Create barcode with custom styling
Dim customBarcode = BarcodeWriter.CreateBarcode("CUSTOM-2024", BarcodeWriterEncoding.DataMatrix)
' Set specific dimensions in pixels
customBarcode.ResizeTo(500, 500)
' Adjust colors for special label requirements
customBarcode.ChangeBarCodeColor(IronSoftware.Drawing.Color.DarkBlue)
customBarcode.ChangeBackgroundColor(IronSoftware.Drawing.Color.LightGray)
' Add human-readable text below the barcode symbol
customBarcode.AddAnnotationTextBelowBarcode("Product: CUSTOM-2024")
' Set margins to preserve the required quiet zone
customBarcode.SetMargins(10)
customBarcode.SaveAsImage("custom-datamatrix.png")
这些定制化服务有助于满足企业品牌推广要求或特定标签标准。 ResizeTo 方法保持了正确的模块比例,这对于在任何扫描仪距离下 Data Matrix 的可读性至关重要。 颜色变化是为了适应特殊的印刷工艺或承印物限制,例如彩色标签或金属材料。 由 SetMargins 设置的静默区裕度满足 ISO/IEC 16022 规范中定义的最小空白要求。
C# 数据矩阵生成器:IronBarcode 完整指南:图 4 - 自定义数据矩阵输出
选择合适的条形码尺寸
Data Matrix 条形码的最小可读尺寸取决于扫描器和打印分辨率。 对于一般用途的扫描,建议使用至少 0.3 毫米的模块尺寸。 在 300 DPI 打印分辨率下,500 像素的条形码尺寸约为 42 毫米见方——足以满足可靠的手持扫描需求。 对于较小的标签,增加 DPI 或减少数据有效载荷,使符号保持在可扫描的尺寸范围内。
如何批量生成多个条形码?
批量生成功能减少了创建大量数据矩阵码(用于生产运行、运输标签或序列化库存)所需的工作量:
// Generate barcodes for a batch of products
string[] productIds = { "PROD-001", "PROD-002", "PROD-003", "PROD-004", "PROD-005" };
foreach (string id in productIds)
{
var batchBarcode = BarcodeWriter.CreateBarcode(id, BarcodeWriterEncoding.DataMatrix);
batchBarcode.ResizeTo(150, 150);
batchBarcode.AddAnnotationTextBelowBarcode(id);
// Save each barcode with a unique filename
string filename = $"barcode_{id.Replace("-", "_")}.png";
batchBarcode.SaveAsImage(filename);
}
// Generate barcodes for a batch of products
string[] productIds = { "PROD-001", "PROD-002", "PROD-003", "PROD-004", "PROD-005" };
foreach (string id in productIds)
{
var batchBarcode = BarcodeWriter.CreateBarcode(id, BarcodeWriterEncoding.DataMatrix);
batchBarcode.ResizeTo(150, 150);
batchBarcode.AddAnnotationTextBelowBarcode(id);
// Save each barcode with a unique filename
string filename = $"barcode_{id.Replace("-", "_")}.png";
batchBarcode.SaveAsImage(filename);
}
' Generate barcodes for a batch of products
Dim productIds As String() = {"PROD-001", "PROD-002", "PROD-003", "PROD-004", "PROD-005"}
For Each id As String In productIds
Dim batchBarcode = BarcodeWriter.CreateBarcode(id, BarcodeWriterEncoding.DataMatrix)
batchBarcode.ResizeTo(150, 150)
batchBarcode.AddAnnotationTextBelowBarcode(id)
' Save each barcode with a unique filename
Dim filename As String = $"barcode_{id.Replace("-", "_")}.png"
batchBarcode.SaveAsImage(filename)
Next
这种模式适用于需要大量标签集的物流和医疗保健工作流程,每个标签集都与一个唯一的标识符相关联。 对于 Web 应用程序,直接在 PDF 文档上添加条形码或将其作为字节数组进行流式传输,可以实现实时标签生成,而无需保存中间文件。
C# 数据矩阵生成器:IronBarcode 完整指南:图 5 - 批量创建数据矩阵条形码
面向大批量数据的异步和多线程处理
当生成数千个条形码时,同步处理会成为瓶颈。 IronBarcode提供异步和多线程处理功能,允许您在多个 CPU 核心上并行生成条形码。 对于 10,000 个标签的批量处理,与顺序循环相比,并行处理可以将总生成时间减少一个数量级。
对于高吞吐量场景,可以考虑使用IronBarcode 的 PDF 冲压 API将条形码分组到 PDF 表格中,而不是保存数千个单独的图像文件,这可能会在 Windows 和 Linux 部署中造成文件系统开销。
如何读取和验证数据矩阵条形码?
生成条形码只是工作流程的一半——验证扫描器能否正确读取条形码才是质量控制闭环的最后一步。IronBarcodeIronBarcode条形码读取器,可让您在生成条形码后立即对其进行解码:
// Generate a barcode
var generated = BarcodeWriter.CreateBarcode("VERIFY-2024", BarcodeWriterEncoding.DataMatrix);
generated.SaveAsImage("verify-test.png");
// Read it back to confirm correct encoding
var results = BarcodeReader.Read("verify-test.png");
foreach (var result in results)
{
Console.WriteLine($"Decoded value: {result.Value}");
Console.WriteLine($"翻译格式: {result.Barcode翻译类型}");
}
// Generate a barcode
var generated = BarcodeWriter.CreateBarcode("VERIFY-2024", BarcodeWriterEncoding.DataMatrix);
generated.SaveAsImage("verify-test.png");
// Read it back to confirm correct encoding
var results = BarcodeReader.Read("verify-test.png");
foreach (var result in results)
{
Console.WriteLine($"Decoded value: {result.Value}");
Console.WriteLine($"翻译格式: {result.Barcode翻译类型}");
}
Imports System
' Generate a barcode
Dim generated = BarcodeWriter.CreateBarcode("VERIFY-2024", BarcodeWriterEncoding.DataMatrix)
generated.SaveAsImage("verify-test.png")
' Read it back to confirm correct encoding
Dim results = BarcodeReader.Read("verify-test.png")
For Each result In results
Console.WriteLine($"Decoded value: {result.Value}")
Console.WriteLine($"翻译格式: {result.Barcode翻译类型}")
Next
这种往返验证模式在受监管的行业(例如制药行业)中尤其有价值,因为《药品供应链安全法案》(DSCSA) 规定处方药包装上的序列化条形码必须既是机器可读的,又是格式正确的。 在生成流程中运行回读检查,可以在标签到达生产线之前捕获编码错误。
对于更高级的读取场景,请参阅IronBarcode读取文档和从 PDF 读取条形码指南。
常见的扫描兼容性注意事项
不同扫描器固件版本对数据矩阵符号的解读存在差异,对静区和模块对比度的容忍度也不同。如果目标设备是旧款手持扫描器,则应增大模块尺寸,使用高对比度的黑底白字,并确保静区宽度至少为两个模块的宽度。GS1应用标识符指南提供了在单个数据矩阵符号中编码供应链标识符(例如批号、有效期和 GTIN)的模式。
下一步计划是什么?
使用 IronBarcode 在 C# 中生成 Data Matrix 条形码遵循一致的模式:安装 NuGet 包,调用 BarcodeWriter.CreateBarcode 和 BarcodeWriterEncoding.DataMatrix,应用任何所需的自定义项,然后导出为目标格式。 同一个 API 可以处理从单个条形码原型到大批量流水线的所有操作。
以下是进一步推进此项目的推荐路径:
-探索条形码读取: IronBarcode读取指南涵盖了从图像、PDF 和实时摄像头流中解码条形码。 -尝试其他 二维 格式: IronBarcode还使用相同的 API 生成QR 码、PDF417、Aztec 和所有主要的 1D 格式。 -在文档中嵌入条形码: PDF 盖章教程展示了如何以编程方式向现有 PDF 添加条形码。 -利用异步处理进行扩展:查看异步和多线程指南,以并行化大型批处理作业。 -查看许可:IronBarcode许可页面列出了从开发者到 OEM 再分发的各种选项。
开始免费试用,即可不受限制地测试所有功能,或者查看完整的IronBarcode文档,获取详细的 API 参考和其他代码示例。
常见问题解答
什么是数据矩阵条码?
数据矩阵条形码是一种符合 ISO/IEC 16022 标准的二维符号,可在很小的网格内编码多达 2335 个字母数字字符或 3116 个数字。它常用于药品标签、电子产品标识和库存管理。
如何在 C# 中生成 Data Matrix 条形码?
调用 BarcodeWriter.CreateBarcode 方法,传入数据字符串和 BarcodeWriterEncoding.DataMatrixIronBarcode,然后对结果调用 SaveAsImage 或 SaveAsPdf 方法。IronBarcode 会自动处理 ECC200 编码和纠错。
使用 IronBarcode 生成数据矩阵有什么好处?
IronBarcode只需一行代码即可生成 ECC200 数据矩阵条形码,自动处理编码模式选择,并可导出为 PNG、PDF、SVG 等格式,无需其他依赖项。
IronBarcode 可以将 Data Matrix 条形码导出为不同的文件格式吗?
IronBarcode的。IronBarcode 可以将 Data Matrix 条形码导出为 PNG、JPEG、BMP、GIF、TIFF、SVG 和 PDF 格式。您还可以直接将条形码添加到现有的 PDF 文档中。
是否可以使用 IronBarcode 自定义数据矩阵条码?
是的。IronBarcode 提供IronBarcode来调整尺寸,ChangeBarCodeColor 和 ChangeBackgroundColor 来调整颜色,AddAnnotationTextBelowBarcode 来添加人类可读的文本,以及 SetMargins 来控制静默区域。
数据矩阵 BarCode 特别适用于哪些行业?
数据矩阵条形码广泛应用于制药行业以符合药品供应链安全法案 (DSCSA) 的要求,电子行业以组件识别为目的,物流行业以包裹追踪为目的,以及医疗保健行业以符合 GS1 标准的药品标签为目的。
IronBarcode生成的是哪个版本的 Data Matrix 数据?
IronBarcode默认生成 ECC200 数据矩阵条码。ECC200 是当前 ISO/IEC 16022 标准版本,提供最高的数据容量和里德-所罗门纠错功能。
为什么使用 Data Matrix 条形码而不是其他二维条码?
数据矩阵条形码因其在小物理占用空间内具有高数据密度、里德-所罗门纠错功能(可承受高达 30% 的符号损坏)以及在全球受监管行业中得到认可的 ISO/IEC 标准化而备受青睐。

