IRONSOFTWAREHOME
与其他组件比较

条形码 vs IronBarcode:多包生成 vs 单包生成和读取

Curtis Chau
Curtis Chau
Updated: 2026年5月7日

要使用 条形码 生成单个 PNG,您需要安装两个软件包,导入三个命名空间,使用特定格式的类进行编码,创建一个带有选项对象的渲染器,打开一个流,渲染到该流中,然后释放该流。 这就是全部的幸福之路——而且它只涵盖写作。 条形码器根本没有读取 API。 该库的 MIT 许可证和开源特性使其乍一看就很有吸引力,尤其对于试图避免商业依赖的团队而言。 但是,这种碎片化的架构——至少需要两个NuGet包,每个条形码格式都需要一个不同的编码器类,并且渲染器管道将编码和输出完全分开——一旦需求超出最简单的单一格式生成场景,就会造成真正的摩擦。

条形码的理解

Barcoder 是一个开源的.NET条形码生成库,可在NuGet上以 MIT 许可证获取。 它可以将数据编码成条形码格式,包括 Code128、QR、DataMatrix、EAN-13、PDF417 等。 设计理念完全将编码与渲染分离——核心库生成IBarcode对象(数据结构),一个单独的渲染器包将该对象转换为图像。

这种设计的实际效果在第一次安装后就显现出来了。 在任何PNG输出可能实现之前,需要两个NuGet包:用于编码的Barcoder.Renderer.Image。 如果还需要SVG输出,则必须添加第三个包——Barcoder.Renderer.Svg。 这些软件包的版本是独立的,这意味着对其中一个软件包的更新不会自动与另一个软件包保持一致,因此在整个项目中保持它们同步就成了一项重复性的维护任务。

条形码器的关键架构特征:

  • PNG输出需要两个NuGet包: 用于编码的Barcoder.Renderer.Image
  • 针对特定格式的编码器类: 每种条码类型在自己的命名空间中拥有自己的编码器—Code128Encoder, QrEncoder, DataMatrixEncoder,等等。
  • **IBarcode没有输出方法:**编码的结果是一个简单的数据对象。 渲染器必须单独构造,流必须打开、渲染到流中,然后关闭。 -**图像渲染器不再支持.NET Framework :**基于.NET Framework 的Teams 无法使用图像渲染器包 -**无读取功能:**条码编码器无法解码来自图像、文件或任何其他来源的条形码。
  • 独立的包版本控制:Barcoder.Renderer.Image可以在依赖更新时分开版本。

多包生成工作流程

安装过程立刻就能说明范围上的差异。 使用 条形码 时,基本的 PNG 输出需要两个单独的软件包:

dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
SHELL

生成 Code128 条形码并将其保存为 PNG 格式的完整工作流程需要三个命名空间导入、一个特定格式的编码器调用、一个带有选项对象的渲染器构造、一个文件流和一个渲染调用:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);

切换条形码格式不是参数更改——它需要导入不同的命名空间并调用不同的类。 DataMatrixEncoder.Encode只接收字符串。 目前还没有统一的界面来创建指定格式的条形码。

了解IronBarcode

IronBarcode是一个商业的.NET条形码库,它通过一个NuGet包实现了条形码的生成和读取。 它使用围绕两个主类的静态API模型—用于生成的BarcodeEncoding枚举而不是通过特定格式的类或命名空间选择格式。

该库旨在最大限度地缩短从编写第一行条形码代码到获得有效输出之间的距离。 生成、读取、PDF 支持、带有嵌入式徽标的二维码以及所有输出类型都包含在一个软件包中,只需跟踪一个版本即可。

IronBarcode的主要特点:

  • 单一NuGet包:IronBarcode涵盖所有功能——生成、读取、PDF及所有输出格式。
  • **统一的格式选择:**所有条码类型通过BarcodeEncoding枚举值处理; no format-specific imports or classes
  • 结果对象上的输出方法:SaveAsPng, ToPngBinaryData, ToStream, ResizeTo
  • 原生读取功能:BarcodeReader.Read()从图像文件、字节数组、流和PDF中解码,无需二级库。 -**支持 MAUI、Docker、AWS Lambda 和 Azure:**文档记录了除标准桌面和服务器场景之外的部署目标 -全面支持.NET Framework和现代.NET :.NET Framework4.6.2 至.NET 9

功能对比

特征条形码IronBarcode
需要NuGet包至少 2 人1
条形码生成
条形码读取
许可麻省理工学院(开源)商业翻译
.NET Framework支持图像渲染器中已删除.NET Framework 4.6.2+
PDF阅读
带有徽标的二维码

详细功能对比

特征条形码IronBarcode
一代
Code128生成
二维码生成
DataMatrix 生成
EAN-13,PDF417
带有嵌入式徽标的二维码是 — .AddBrandLogo(path)
通过枚举选择格式不——每种格式都有单独的编码器类是 — BarcodeEncoding 枚举
输出
PNG 输出是的(通过 Barcoder.Renderer.Image)是 — .SaveAsPng()
SVG 输出是(通过 Barcoder.Renderer.Svg)是 — .SaveAsSvg()
二进制数据输出是的(通过 MemoryStream)是 — .ToPngBinaryData()
流式输出是的(手动流管理)是 — .ToStream()
直接调整大小 API否 — 仅是PixelSize缩放系数是 — .ResizeTo(width, height)
阅读
从图像文件中读取
从PDF文件阅读
从流中读取
多条形码检测是 — ExpectMultipleBarcodes
阅读速度控制是 — ReadingSpeed 枚举
平台
.NET Core / .NET 5+
.NET Framework图像渲染器中已删除.NET Framework 4.6.2+
.NET 9未记录。
MAUI(iOS、Android、Windows、macOS)
Docker / Azure / AWS Lambda未记录。
包装
独立软件包版本控制风险不——单个包裹
每个格式的命名空间否 — 单个using IronBarCode
许可
许可模式麻省理工学院(开源)商业翻译
定价免费Lite749美元, Plus1499美元, Professional2999美元,Unlimited版 5999美元

格式选择和生成 API

条形码格式选择的结构方式会对生成条形码的代码库的每个部分产生下游影响。

条形码方法

条形码器通过不同命名空间中的不同编码器类来选择格式。 切换格式意味着添加一个新的using指令,并使用一个具有不同方法签名的不同类。

// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);

// QR Code
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);

// DataMatrix
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");

每个编码器都有自己的参数合约。 向现有项目中添加新格式并非简单的文字更改——它需要导入新的命名空间、学习新的类并理解新的参数。

IronBarcode方法

IronBarcode通过统一的BarcodeEncoding枚举路由所有格式选择。 添加新格式只需对枚举值进行一个单词的更改:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");

// DataMatrix
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");

// QR — dedicated method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");

// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

生产环境使用时,请在应用程序启动时添加许可证密钥:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

IronBarcode条形码生成文档涵盖了所有生成选项,包括样式、边距和颜色自定义。

渲染和输出选项

将条形码输出转换为不同的格式(文件、二进制数据、流)是一个常见的需求,但每个库的处理方式都大相径庭。

条形码方法

Barcoder 将编码与渲染分离的架构理念是合理的,但每次输出格式更改都会产生额外的开销。 保存到文件需要打开FileStream。 获取二进制数据需要打开ToArray()。 每种输出场景都需要构建一个带有选项对象的渲染器:

// File output
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);

// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();

大小控制是间接的:PixelSize是条码模块大小的缩放倍数,而不是直接的宽度和高度规范。

IronBarcode方法

IronBarcode返回GeneratedBarcode对象,可以通过链接方法调用从中达到任何输出形式。 无需渲染器构建,无需流管理:

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100);

// File
barcode.SaveAsPng("barcode.png");

// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();

// Stream
System.IO.Stream stream = barcode.ToStream();

.ResizeTo(width, height)接受明确的像素尺寸并与同一对象上的任何输出方法链式结合。

读取条形码

Barcoder 中缺少读取 API 是一个硬性的架构限制,而不是配置选择。

条形码方法

条形码器不具备读取或解码功能。 目前没有 API,也没有计划推出 API,库中也没有任何变通方法。 如果应用程序需要读取条形码,则必须将第二个库(一个单独的NuGet依赖项,具有自己的 API 接口和自己的版本跟踪)与 条形码 一起添加。 这意味着至少需要两个与读取相关的依赖项:用于生成的条形码,以及用于读取的其他东西。

IronBarcode方法

IronBarcode使用同一软件包和一致的 API 模式,同时支持条码生成和读取。 BarcodeReader.Read()方法原生接受图像文件、字节数组、流和PDF:

using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);
    Console.WriteLine(result.Format);
}

// 从PDF文件阅读 natively
var pdfResults = BarcodeReader.Read("document.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
C#

读取 PDF 文件是原生操作——无需中间图像提取、转换库或额外软件包。 IronBarcode条形码读取文档涵盖多页 PDF、感兴趣区域读取和性能调优。

API 映射参考

条形码IronBarcode
Code128Encoder.Encode("data", false)BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false)QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data")BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... })不需要 — 输出从GeneratedBarcode链式而来
renderer.Render(barcode, stream).SaveAsPng(path) / .ToPngBinaryData() / .ToStream()
IBarcode(数据结构,无输出方法)SaveAsPng, ToPngBinaryData, ToStream, ResizeTo等)
Barcoder + Barcoder.Renderer.Image(2个包)IronBarcode(1个包)
using Barcoder.Code128using IronBarCode(单一命名空间,所有格式)
using Barcoder.Qrusing IronBarCode
using Barcoder.DataMatrixusing IronBarCode
无读取 APIBarcodeReader.Read(path / bytes / stream / pdf)
没有.NET Framework图像渲染器.NET Framework 4.6.2+
PixelSize + BarHeightFor1DBarcode选项.ResizeTo(width, height)

当团队考虑从 条形码 迁移到IronBarcode时

阅读被列入要求中

许多项目最初都是纯粹的生成流程——打印标签、生成文档代码、在报告中嵌入条形码。 条形码 为这些项目提供初始支持。 当同一个应用程序稍后需要验证传入的条形码、处理扫描的文档或解码上传的 PDF 中的条形码时,Barcoder 无法提供任何解决方案。 团队必须评估第二个库,了解其 API,单独管理其NuGet版本,并处理两个库之间的集成接口。 达到这一步的团队通常会合并到一个可以处理双方的库中,而不是维护两个独立的条形码依赖项。

.NET Framework兼容性中断

Barcoder.Renderer.Image放弃了对.NET Framework的支持。 在.NET Framework 4.x 上维护服务或桌面应用程序的团队,如果在例行依赖项维护期间更新图像渲染器包,则会遇到生成失败。 这不是配置错误——这是库的平台支持决定。 IronBarcode支持.NET Framework 4.6.2 至.NET 9,无需针对不同目标进行特殊打包或条件依赖。

软件包版本漂移导致协调问题

随着Barcoder.Renderer.Image独立版本化,在依赖刷新期间单独更新其中一个而不更新另一个可能会引入微妙的不兼容性。 在一个包含多个项目的存储库中——每个项目都使用不同版本的渲染器包——确保跨项目的行为一致就变成了一个协调问题,而且这个问题会随着团队规模的扩大而加剧。 使用IronBarcode整合团队后发现,管理一个软件包和一个版本可以彻底消除此类问题。

格式覆盖范围随时间推移而扩大

一个项目可能从 Code128 标签开始,之后添加二维码作为面向客户的链接,然后添加 DataMatrix 以满足合规性要求。 使用 条形码 时,每增加一种格式都意味着需要导入一个新的命名空间,一个具有不同方法参数的不同编码器类,并且可能需要一个新的NuGet包。 在IronBarcode中,添加格式是改为现有调用中的BarcodeEncoding枚举值。 对于计划扩展条形码格式覆盖范围的团队来说,基于枚举的模型更容易维护。

MAUI 和跨平台部署要求

Barcoder 没有提供对 MAUI、Docker、AWS Lambda 或 Azure 部署的支持文档。 构建跨平台 MAUI 应用程序或将条形码处理部署到无服务器基础架构的团队发现,Barcoder 的文档和测试并未涵盖这些目标。 IronBarcode文档并积极测试在 iOS、Android、Windows、macOS MAUI 目标、Docker 容器和主要云平台上的部署。

常见迁移注意事项

GeneratedBarcode类型变化

存储IBarcode变量并稍后将其传递给渲染器的Barcoder代码必须重新构造。 在IronBarcode中,.ToPngBinaryData()。 类型系统将在编译过程中显示每个需要更新的位置——移除Barcoder包后,IBarcode将无法解析。

PixelSize没有直接等价物

Barcoder的PixelSize是条码自然模块大小的缩放倍数,而不是明确的像素尺寸。 输出宽度取决于条形码内容、格式和倍数的组合。 IronBarcode使用具有明确像素尺寸的.ResizeTo(width, height)。 在迁移期间,测量现有Barcoder代码生成的实际输出尺寸,并在.ResizeTo()调用中使用这些值:

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");

命名空间合并

Barcoder项目累积了using Barcoder.*语句——每个使用的格式一个。 在迁移期间,这些全部合并为单个using IronBarCode;。 在解决方案中搜索using Barcoder将识别每个需要更新的文件。 受影响的文件数量通常比团队预期的要多,因为每个涉及条形码格式的文件都会导入其自身特定于格式的命名空间。

SVG 输出路径更改

使用GeneratedBarcode的直接方法调用替换渲染器管道。

// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");

一旦所有SVG渲染站点都完成迁移后,可以移除Barcoder.Renderer.Svg包。

##IronBarcode的其他功能

除了上述比较点之外, IronBarcode还包含 条形码 所不具备的功能:

  • 具有嵌入徽标的QR码.AddBrandLogo(path)将品牌图像嵌入到QR码中心而不破坏可扫描性
  • 原生PDF条码读取BarcodeReader.Read("document.pdf")直接处理PDF而无需先提取图像
  • 多条码检测ExpectMultipleBarcodes选项从单个图像或PDF页面中读取所有条码一次性完成
  • 读取速度控制ReadingSpeed.Faster, Balanced, Detailed, 以及ExtremeDetail为不同的使用场景调整准确性和速度的权衡
  • MAUI 跨平台部署 iOS、Android、Windows 和 macOS 平台的 MAUI 目标平台均经过积极测试并有文档记录。
  • Docker 和云部署 Docker 容器、AWS Lambda 和 Azure Functions 的部署路径文档
  • **条码样式和自定义:**在GeneratedBarcode上进行颜色、边距、注释文本和背景自定义

.NET兼容性和未来准备情况

IronBarcode支持.NET Framework 4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8和.NET 9,并定期更新。 条形码 v3在图像渲染包中不再支持.NET Framework。 对于需要在.NET Framework和现代.NET目标上有长支持窗口的团队,IronBarcode的单包兼容性矩阵消除了管理每个目标的条件依赖的需求。

结论

Barcoder和IronBarcode在根本上反映出不同的范围。Barcoder是一个仅生成的库,具有原则上对编码和渲染的分离——IBarcode数据结构和渲染管道在设计上是独立的层。 IronBarcode是一个完整的条形码库,其中生成和读取共享一个软件包、一个命名空间和一致的静态 API。 当需求扩展时,架构上的差异就显得最为明显:Barcoder 的多包、多命名空间、无读取设计使得每次添加都是一项结构性任务,而IronBarcode将新格式或功能的添加视为配置更改。

如果一个项目确实只需要生成条形码,并且仅面向.NET Core ,只会使用少量条形码格式,并且 MIT 许可证是硬性要求,那么 条形码 就是正确的选择。 该库在这些范围内按文档所述运行,对于没有读取要求且没有.NET Framework目标的严格范围项目而言,零成本的开源选项是合理的。

如果项目需要读取和生成条形码,目标平台是.NET Framework或跨平台 MAUI 部署,预计会随着时间推移添加条形码格式,或者需要在 Docker 或云环境中部署,那么IronBarcode就是正确的选择。 单包模型和基于枚举的格式选择消除了随着项目范围扩大而使用 条形码 累积的开销。

实际的决定取决于发展轨迹。 对于一个确定只是简单的单一格式生成器且没有读取要求的项目来说,条形码器可以很好地满足需求。 如果一个项目的条形码需求存在任何模糊之处——例如添加格式、添加读取功能、跨平台部署——那么该项目将会比预期更快地遇到 条形码 的架构限制。 这两个库都是可靠的工具; 问题是,哪一个更符合实际的工作范围。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

...
阅读更多

相关文章

Key in blue circle

立即获取免费的 30 天试用版密钥

Your trial license will be sent to your email address

无任何限制。100% 解锁。无需信用卡。

bullet_checked无需信用卡或创建账户无任何限制。100% 解锁。无需信用卡。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
预约您的免费现场演示
Booking Badge

深受全球数百万工程师信赖

Iron Software 的客户徽标
获取您的无义务咨询
填写下面的表格或通过sales@ironsoftware.com
您的资料将始终保密。
深受全球数百万工程师信赖
Iron Software 的客户徽标
立即获取您的免费30 天试用密钥
无需信用卡或创建账户