Aspose.BarCode for .NET 与 IronBarcode:C# 条形码库比较
条形码 vs IronBarcode:多包生成 vs 单包生成和读取
要使用 条形码 生成单个 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
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
生成 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);
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);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End Using
切换条形码格式不是参数更改——它需要导入不同的命名空间并调用不同的类。 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");
// 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");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix
' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)
' QR Code
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix
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");
// 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");
Imports 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.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
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();
// 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();
Imports System.IO
' File output
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Binary data via MemoryStream
Using ms = New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
大小控制是间接的: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();
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();
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
' File
barcode.SaveAsPng("barcode.png")
' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()
' Stream
Dim stream As System.IO.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);
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);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Console.WriteLine(result.Format)
Next
' 从PDF文件阅读 natively
Dim pdfResults = BarcodeReader.Read("document.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
读取 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.Code128 |
using IronBarCode(单一命名空间,所有格式) |
using Barcoder.Qr |
using IronBarCode |
using Barcoder.DataMatrix |
using IronBarCode |
| 无读取 API | BarcodeReader.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");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
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");
// 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");
Imports System.IO
' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
' 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就是正确的选择。 单包模型和基于枚举的格式选择消除了随着项目范围扩大而使用 条形码 累积的开销。
实际的决定取决于发展轨迹。 对于一个确定只是简单的单一格式生成器且没有读取要求的项目来说,条形码器可以很好地满足需求。 如果一个项目的条形码需求存在任何模糊之处——例如添加格式、添加读取功能、跨平台部署——那么该项目将会比预期更快地遇到 条形码 的架构限制。 这两个库都是可靠的工具; 问题是,哪一个更符合实际的工作范围。
常见问题解答
什么是条形码?
Barcoder 是一个 .NET 条形码库,用于在 C# 应用程序中生成和读取条形码。它是开发人员在为 .NET 项目选择条形码解决方案时评估的几个备选方案之一。
Barcoder 和 IronBarcode 的主要区别是什么?
IronBarcode 使用静态、无状态的 API,无需实例管理,而 Barcoder 通常需要在使用前创建实例并进行配置。IronBarcode 还提供原生 PDF 支持、自动格式检测以及跨所有环境的单密钥许可。
IronBarcode 的授权比 Barcoder 更容易吗?
IronBarcode 使用单一许可证密钥,同时涵盖开发和生产部署。与将 SDK 密钥与运行时密钥分开的许可系统相比,这简化了 CI/CD 流水线和 Docker 配置。
IronBarcode是否支持Barcoder支持的所有条形码格式?
IronBarcode 支持超过 30 种条码符号体系,包括 QR 码、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自动检测功能意味着无需显式枚举格式。
IronBarcode是否支持原生PDF条码读取?
是的。IronBarcode 可以直接从 PDF 文件中读取条形码,使用 `BarcodeReader.Read("document.pdf")` 方法,无需单独的 PDF 渲染库。每页的读取结果包括页码、条形码格式、数值和置信度评分。
IronBarcode 与 Barcoder 相比,在批量处理方面有何不同?
IronBarcode 的静态方法是无状态的,并且天然线程安全,因此可以直接使用 Parallel.ForEach,而无需进行线程级实例管理。所有定价层级均无吞吐量上限。
IronBarcode支持哪些.NET版本?
IronBarcode 在单个 NuGet 包中支持 .NET Framework 4.6.2+、.NET Core 3.1 以及 .NET 5、6、7、8 和 9。平台目标包括 Windows x64/x86、Linux x64 和 macOS x64/ARM。
如何在.NET项目中安装IronBarcode?
通过 NuGet 安装 IronBarcode:在程序包管理器控制台中运行“Install-Package IronBarCode”,或在命令行界面中运行“dotnet add package IronBarCode”。无需其他 SDK 安装程序或运行时文件。
与 Barcoder 不同,我可以在购买前评估 IronBarcode 吗?
是的。IronBarcode 的试用模式会返回完整的解码条形码值——只有生成的输出图像才会带有水印。您可以在购买前,用自己的文档测试读取准确率。
Barcoder 和 IronBarcode 的价格差异是多少?
IronBarcode 的永久单开发者许可证起价为 749 美元,涵盖开发和生产环境。定价详情和批量许可选项请访问 IronBarcode 许可页面。无需单独的运行时许可证。
从 Barcoder 迁移到 IronBarcode 是否很简单?
从 Barcoder 迁移到 IronBarcode 主要涉及将基于实例的 API 调用替换为 IronBarcode 的静态方法、移除许可相关的样板代码以及更新结果属性名称。大多数迁移都是减少代码,而不是增加代码。
IronBarcode 能生成带有 logo 的二维码吗?
是的。`QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以将品牌图片原生嵌入二维码中,并支持配置纠错功能。此外,它还支持通过 `ChangeBarCodeColor()` 函数创建彩色二维码。

