跳至页脚内容
与其他组件比较

Accusoft BarcodeXpress 与 IronBarcode:C# 条码库比较

BarcodeLib与IronBarcode:开源生成器停在哪里

BarcodeLib是一个长期存在的开源.NET库,大多数开发者最终会发现它只能创建条形码。 其中一部分人还会发现SkiaSharp版本冲突——通常在最糟糕的时刻,当他们刚刚将BarcodeLib添加到一个已经依赖于SkiaSharp的MAUI或Blazor项目中时,构建开始抛出NU1608警告。 本文涵盖了这两个问题。 条形码库 是一个合法的库,具有明确的用途。 了解它的极限在哪里是一个实际问题。

了解条形码库

BarcodeLib 是一个用于.NET的开源条形码图像生成库,由 Brad Barnhill 在GitHub上维护。 它自2007年以来一直活跃,支持大约30个一维符号变体。 Apache 2.0 许可证允许其免费用于商业用途。 对于纯线性条形码生成——从字符串创建图像——它可靠地工作,并在多年的活跃使用中很好地履行了这一职责。

该API是基于实例的。 您创建一个 Barcode 对象,设置属性,然后使用类型常量、数据字符串和像素尺寸调用 Encode()。 结果是一个SKImage (SkiaSharp),您可以根据需要对其进行编码和保存或流式传输。 这种工作流程是可接近的,对于严格需要打印线性条形码图像的项目——运输标签、库存标签、零售价格标签——它是足够的。

BarcodeLib 的主要架构特征:

-仅生成范围:该库没有任何读取或解码 API; 它的整个公共区域都面向利用数据字符串生成图像。

  • 基于实例的API: 每个操作都需要实例化一个 Barcode 对象,并在调用 Encode() 之前配置标签和字体属性。
  • 返回 SKImage 输出是一个 SkiaSharp 图像对象,需要一个 SKEncodedImageFormat 步骤和一个流才能生成文件或字节数组。
  • 仅限1D符号: 支持大约30种线性格式,包括Code128、EAN-13、UPC-A和Code39; 当前3.x版本的BarcodeStandard.Type枚举中不包含QR Code、Data Matrix、PDF417、Aztec或其他2D条目。
  • SkiaSharp依赖(v3.x):3.x系列用SkiaSharp取代了System.Drawing.Common,以实现跨平台支持; 当项目中其他软件包也依赖于 SkiaSharp 时,这会引入版本冲突风险。 -免费,无需许可证密钥: Apache 2.0 许可证涵盖商业用途,无需运行时密钥或激活。

条形码库核心生成模式

标准的BarcodeLib生成工作流程需要创建一个实例,配置属性,并使用尺寸调用Encode()

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
Imports BarcodeStandard
Imports SkiaSharp

Dim b As New Barcode()
b.IncludeLabel = True
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)

Using stream = File.OpenWrite("barcode.png")
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
$vbLabelText   $csharpLabel

这是完整的生成工作流程。 属性设置器模式是这种设计的核心:配置发生在调用 Encode() 之前的实例上,而返回值是一个必须编码并写入流的 SKImage

了解IronBarcode

IronBarcode是一个商业化的.NET条形码库,在一个软件包中涵盖了条形码的生成和读取。 它通过NuGet安装,可在.NET Framework 4.6.2 至.NET 9 上运行,并可在 Windows、Linux、macOS、Docker、Azure 和 AWS Lambda 上运行。 该库由Iron Software开发和维护,并采用商业支持模式。

生成 API 是静态且流畅的——无需创建实例,也无需在主调用之前设置属性。 配置选项链接到 BarcodeWriter.CreateBarcode()QRCodeWriter.CreateQrCode() 的结果。 链末端的输出方法—.SaveAsPng().ToPngBinaryData().ToAnyImageData()—消除了 BarcodeLib 所需的中间 MemoryStream 模式。 阅读功能是同一软件包的一部分,无需维护单独的库或 ZXing .NET集成。

IronBarcode的主要特点:

  • 生成和读取在一个包中:BarcodeWriter处理生成; BarcodeReader处理读取; 两者都包含在同一个NuGet安装包中 -静态流畅 API:无需实例化; 配置链在CreateBarcode()后使用流畅的方法
  • 直接字节数组输出: .ToPngBinaryData() 返回 byte[],无需 MemoryStream 步骤
  • 两端的PDF支持:BarcodeReader.Read()本地接受PDF文件; 生成的输出可以嵌入到PDF文件中。 -无 SkiaSharp 依赖:独立于 SkiaSharp 版本图,消除了 MAUI 和其他项目中的 NU1608 冲突 -附带服务水平协议的商业许可:永久价格为 749 美元至 5,999 美元; 包括商业支持和有保证的更新频率
  • ReadingSpeed 调优: BarcodeReaderOptions 允许在批量情况下以扫描彻底性换取性能

功能对比

特征 条形码库 IronBarcode
条形码生成 是的(仅限 1D) 是的(1D和2D)
条形码读取
二维符号(QR、Data Matrix、PDF417、Aztec)
PDF条形码读取
依赖关系图中的SkiaSharp 是的(v3.x)
流畅的链式 API
许可证 Apache 2.0(免费) 749美元至5999美元永久

详细功能对比

特征 条形码库 IronBarcode
一代
Code128生成
EAN-13 / UPC-A 代
二维码生成 是的(带有标识嵌入)
数据矩阵 / PDF417 / 阿兹特克
1D符号覆盖 ~30个变体 30+个变体
流畅的链式生成 API
直接byte[]输出 手动(流编码) .ToPngBinaryData()
PDF 生成输出
阅读
从图像中读取条形码 是 (BarcodeReader.Read())
从 PDF 读取条形码 是的(原生实现,无需额外库)
多条形码检测 是 (ExpectMultipleBarcodes)
阅读速度调整 不适用 是 (ReadingSpeed枚举)
平台
视窗
Linux / macOS 部分(依赖于 SkiaSharp) 满的
Docker/容器 需要配置
MAUI 项目兼容性 冲突风险(NU1608) 无冲突
.NET Framework 4.6.2+
.NET 6–9 是的(需要 SkiaSharp 3.x)
许可
开源/免费 是的(Apache 2.0)
商业支持/服务水平协议
需要许可证密钥
定价 免费 749美元至5999美元永久

条形码生成 API

生成API代表不同的设计哲学:BarcodeLib使用可变实例配置,而IronBarcode使用静态入口点上的流畅链。

条形码库方法

BarcodeLib需要构建一个实例并在调用带有尺寸的Encode()之前设置属性。 输出是一个SKImage

using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
Imports BarcodeStandard
Imports SkiaSharp

Public Function GenerateCode128(data As String) As Byte()
    Dim b As New Barcode()
    b.IncludeLabel = True
    Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100)

    Using ms As New MemoryStream()
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

SKImage 返回类型意味着字节数组输出需要一次 SKEncodedImageFormat 编码调用和一个 MemoryStreamIncludeLabel属性是一个布尔切换—BarcodeLib将编码的数据字符串渲染为条形下方的可见标签。

IronBarcode方法

IronBarcode 的生成是完全静态的。 配置链在CreateBarcode()之后,输出方法直接终止链:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
Imports IronBarCode

Public Function GenerateCode128(data As String) As Byte()
    Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .ResizeTo(300, 100) _
        .AddBarcodeValueTextBelowBarcode() _
        .ToPngBinaryData()
End Function
$vbLabelText   $csharpLabel

.ToPngBinaryData() 直接返回字节数组—没有中间的 ImageMemoryStream 对象。 .AddBarcodeValueTextBelowBarcode()将编码的数据字符串渲染为条形下方的标签。 有关高级生成场景,请参阅IronBarcode条形码生成文档

条形码读取能力

阅读是这两座图书馆之间最重要的功能性界限。 条形码库 不具备读取功能; IronBarcode在同一个软件包中包含了完整的读取引擎。

条形码库方法

BarcodeLib 没有读取 API。 没有 Decode()Scan()ReadBarcode() 方法。 读取从未是该库设计的一部分。 任何调用解码方法的尝试都会导致编译错误:

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
Imports BarcodeStandard
Imports SkiaSharp

Dim b = New Barcode()

' There is no Decode, Scan, or Read method on Barcode.
' b.Decode("barcode.png")      ' does not exist
' b.Scan("barcode.png")        ' does not exist
' b.ReadBarcode("barcode.png") ' does not exist

' The only public operation is generation:
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)
$vbLabelText   $csharpLabel

需要同时具备 条形码库 的生成和读取功能的团队必须添加第二个库(通常是 ZXing .NET ),这会带来自身的依赖管理负担和第二个需要维护的 API 接口。

IronBarcode方法

BarcodeReader.Read() 接受图像文件、PDF 文件、流和 System.Drawing.Bitmap 对象。 读取PDF文件不需要额外的库:

using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode

' Read from an image
Dim results = BarcodeReader.Read("barcode.png")
Console.WriteLine(results.First().Value)  ' "PRODUCT-12345"

' Read all barcodes from a PDF — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next

' Tune reading for speed vs. thoroughness
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-scan.png", options)
$vbLabelText   $csharpLabel

ReadingSpeed枚举允许为高量场景调节扫描性能。 有关读取配置的指导,请参阅IronBarcode读取文档

SkiaSharp依赖冲突

BarcodeLib 3.x 中引入的 SkiaSharp 依赖项造成了IronBarcode中不存在的一类冲突。

条形码库方法

从BarcodeLib 3.x开始,库引入了SkiaSharp作为图形后端取代System.Drawing.Common,后者在.NET 6之后变为仅支持Windows。BarcodeLib 3.1.5声明了SkiaSharp >= 2.88.8。 如果一个项目已经通过其他依赖项使用SkiaSharp—常见于使用Microsoft.Maui.Graphics的MAUI项目,这些项目趋向于使用SkiaSharp 3.x—解决的版本可能无法收敛。 最轻的结果是出现 NU1608 警告,最重的结果是运行时程序集绑定失败:

warning NU1608: Detected package version outside of dependency constraint:
BarcodeLib 3.1.5 requires SkiaSharp (>= 2.88.8) but
version SkiaSharp 3.116.1 was resolved.

通过显式包引用强制解析是一种途径,尽管这不能保证运行时兼容性:

<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

即使有显式覆盖,兼容性也取决于BarcodeLib的内部API调用与解析SkiaSharp版本公开的内容匹配。 作为一个社区维护项目,BarcodeLib没有与其发布节奏相关的商业支持合同。

IronBarcode方法

IronBarcode不与应用程序代码共享 SkiaSharp 依赖关系图。 无需管理版本协商,无需诊断 NU1608,也无需承担与 SkiaSharp 版本解析相关的运行时程序集绑定风险。 MAUI 项目、 Blazor项目以及任何其他依赖 SkiaSharp 的应用程序都可以安装IronBarcode,而不会出现任何版本冲突。 有关 MAUI 的特定集成模式,请参阅IronBarcode MAUI 文档

API 映射参考

条形码库 IronBarcode
new Barcode() 静态 API — 无需实例
b.Encode(BarcodeStandard.Type.Code128, "data", 300, 100) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).ResizeTo(300, 100)
b.IncludeLabel = true .AddBarcodeValueTextBelowBarcode()
返回SKImage .SaveAsPng(path) / .ToPngBinaryData()
BarcodeStandard.Type.Code128 BarcodeEncoding.Code128
BarcodeStandard.Type.Code39 BarcodeEncoding.Code39
BarcodeStandard.Type.Ean13 BarcodeEncoding.EAN13
BarcodeStandard.Type.UpcA BarcodeEncoding.UPCA
不支持(BarcodeLib中无2D) BarcodeEncoding.QRCode (也QRCodeWriter)
无读取 API BarcodeReader.Read(path)
依赖关系图中的SkiaSharp 无SkiaSharp依赖

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

阅读要求出现

一个已经生成货运标签数月的系统迎来了一个新的要求:该应用程序还必须处理供应商退回的标签。 仓库集成需要解析入库货物清单中的条形码。 文档管理系统需要对扫描的PDF文件中的条形码进行索引。 条形码库 无法满足这些要求——它没有读取 API。团队评估了将 ZXing .NET与 条形码库 结合使用的可能性,权衡了双库维护的负担和两个独立的依赖关系图,最终决定更简洁的方案是使用一个库,通过单个NuGet安装即可处理生成和读取操作。

SkiaSharp 在 MAUI 项目中的冲突

一个团队将 条形码库 添加到现有的 MAUI 应用程序中,并在恢复过程中立即遇到 NU1608 警告。 他们调查并识别了BarcodeLib期望的SkiaSharp范围与MAUI所需版本之间的不匹配,添加显式<PackageReference>覆盖以强制解析,并使构建通过。 然后,当 SkiaSharp 的本地二进制文件加载了错误的版本时,设备运行时就会崩溃。 修复此问题需要对程序集绑定日志进行更深入的调查。 切换到IronBarcode可以从根本上消除冲突——不是通过找到兼容的 SkiaSharp 版本,而是通过完全消除共享依赖项。

需要进行PDF条形码处理

能够生成带有嵌入式条形码的 PDF 文档(例如发票、工作单、发货清单)的应用程序,有时需要在下游处理过程中读取这些条形码。 条形码库 可以生成条形码图像,但两端均不支持 PDF。 使用 条形码库 从 PDF 中读取条形码需要先使用单独的 PDF 库将 PDF 渲染成图像,然后将这些图像传递给单独的读取库。 IronBarcode本地处理整个链:BarcodeReader.Read("file.pdf")遍历每个页面,并返回所有检测到的条码,没有中间渲染步骤。

QR码或其他二维符号需求出现

最初只需要线性条形码的项目往往发展为需要QR码、Data Matrix、PDF417或Aztec输出。 BarcodeLib在其3.x系列中不生成任何2D符号—BarcodeStandard.Type枚举不包含QR Code或其他2D条目—所以任何2D需求意味着添加第二个库或完全替换BarcodeLib。 IronBarcode 的 QRCodeWriterBarcodeWriter 通过相同的流畅 API 覆盖 QR Code(带有标识嵌入、颜色控制和错误修正调优)、Data Matrix、PDF417 和 Aztec。 其符号需求进入二维的团队发现这一差距促使迁移决策。

常见迁移注意事项

实例 API 到静态 Fluent API

BarcodeLib 代码使用可变对象模式:创建一个 Barcode 实例,设置属性,调用 Encode()。 IronBarcode使用静态流畅模式:调用BarcodeWriter.CreateBarcode(),链配置方法,以输出方法结束。 现有的代码如果将Barcode实例存储为字段或在方法之间传递将需要重构。 典型的改动是用方法链替换属性设置器代码块:

// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
' The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .AddBarcodeValueTextBelowBarcode() _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

SKImage到直接输出

BarcodeLib 3.x 返回 SKImage,它需要 SKEncodedImageFormat 和一个流来生成字节。 任何键入为 SKImage 或经过 image.Encode(...).SaveTo(stream) 的代码都需要更新。 IronBarcode的流畅链直接按所需输出格式终止—.SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData()—消除了对中间图像对象和编码到流步骤的需要。

类型枚举到BarcodeEncoding枚举

BarcodeLib 3.x 使用 BarcodeStandard.Type 枚举,其值采用 PascalCase 形式,例如 BarcodeStandard.Type.Code128。 IronBarcode使用BarcodeEncoding.Code128。 1D值直接映射:Code128Code128, Ean13EAN13, UpcAUPCA, Code39Code39。 在 .cs 文件中对 BarcodeStandard.Type. 进行 grep 可识别出所有需要更新的情况。

SkiaSharp 参考清理

在切换到IronBarcode后,项目中为了消除BarcodeLib的NU1608警告而添加的显式<PackageReference Include="SkiaSharp">条目可以删除这些覆盖。 dotnet list package --include-transitive命令确认SkiaSharp是否仍被项目中的其他软件包需要,然后再将其移除。

IronBarcode的其他功能

除了直接生成和读取比较之外, IronBarcode还包含 条形码库 没有具备的功能:

  • QR码标识嵌入QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")在QR码中心嵌入品牌标识,带有自动错误修正调整
  • PDF条码提取BarcodeReader.Read("file.pdf")从PDF文档的每一页读取条码,无需单独的PDF渲染库
  • 多条码检测BarcodeReaderOptions.ExpectMultipleBarcodes = true检测并返回单个图像中存在的所有条码
  • 读取速度配置ReadingSpeed.Faster, ReadingSpeed.Balanced, 和 ReadingSpeed.ExtremeDetail调节扫描引擎以实现吞吐量与精度的权衡
  • 样式化QR码生成颜色、查找器图案样式和错误修正水平可以通过QRCodeWriter上的链方法进行配置
  • 流和 Bitmap 输入读取 BarcodeReader.Read() 接受文件路径、流、System.Drawing.BitmapAnyBitmap 输入

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

IronBarcode支持.NET Framework 4.6.2 至.NET 9,并保持与 Microsoft .NET发布计划一致的定期发布节奏。 随着.NET 10 的普及,到 2026 年,IronBarcode 的积极开发确保了向前兼容性,而无需更改项目。 该库无需修改即可在 Windows、Linux、macOS、Docker、Azure 和 AWS Lambda 上运行。 条形码库 也保持着活跃的社区开发,尽管其在 3.x 系列中的跨平台支持取决于上面比较部分中讨论的 SkiaSharp 版本兼容性。 对于面向 Linux 或容器中的现代.NET 的项目,IronBarcode 的无依赖跨平台架构避免了 条形码库 的 SkiaSharp 后端引入的版本协商。

结论

BarcodeLib 和IronBarcode代表了.NET中条形码工作的不同解决方案范围。 条形码库 是一个专注于生成功能的免费库,近二十年来一直可靠地满足其定义的使用需求。 IronBarcode是一个商业库,涵盖条码生成和读取,具有静态流畅的 API,并且不依赖 SkiaSharp。 区别不在于共同范围内的质量差异,而在于范围本身。

BarcodeLib仍是仅需稳定线性生成需求项目在Windows或SkiaSharp版本管理严格的环境中的合适选择。 其Apache 2.0许可证、免费成本和简单的API使其成为运单标签系统、库存标签生成器及类似应用中的实用方案,这些应用无需扫描条形码或生成二维符号。

IronBarcode在需求超越线性图像生成时成为更实用的选择:需要读功能、项目是MAUI或跨平台应用可能有SkiaSharp版本冲突、PDF条形码处理在路线图上,或需要任何2D符号(QR码、Data Matrix、PDF417、Aztec)时。 商业许可证费用代表了门槛问题—对于需求与IronBarcode相比BarcodeLib更契合的团队,单一包解决方案和商业支持是价值交换。

客观来说,大多数团队一开始都不会使用IronBarcode 。 他们首先选择 BarcodeLib,因为它免费且功能齐全。 当他们的需求超出 条形码库 仅生成功能的范围时,他们就会迁移到IronBarcode 。 迁移过程有详细的文档记录,API接口的变化也是可以预测的。 了解 条形码库 的停止点(特别是它在生成阶段停止)是正确做出时间决策所需的实际信息。

常见问题解答

BarcodeLib是什么?

BarcodeLib 是一个 .NET 条形码库,用于在 C# 应用程序中生成和读取条形码。它是开发人员在为 .NET 项目选择条形码解决方案时评估的几个备选方案之一。

BarcodeLib 和 IronBarcode 的主要区别是什么?

IronBarcode 使用静态、无状态的 API,无需实例管理,而 BarcodeLib 通常需要在使用前创建和配置实例。IronBarcode 还提供原生 PDF 支持、自动格式检测以及跨所有环境的单密钥许可。

IronBarcode 的授权比 BarcodeLib 更容易吗?

IronBarcode 使用单一许可证密钥,同时涵盖开发和生产部署。与将 SDK 密钥与运行时密钥分开的许可系统相比,这简化了 CI/CD 流水线和 Docker 配置。

IronBarcode是否支持BarcodeLib支持的所有条形码格式?

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 与 BarcodeLib 相比,在批量处理方面有何不同?

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 安装程序或运行时文件。

与 BarcodeLib 不同,我可以在购买前评估 IronBarcode 吗?

是的。IronBarcode 的试用模式会返回完整的解码条形码值——只有生成的输出图像才会带有水印。您可以在购买前,用自己的文档测试读取准确率。

BarcodeLib 和 IronBarcode 的价格有什么区别?

IronBarcode 的永久单开发者许可证起价为 749 美元,涵盖开发和生产环境。定价详情和批量许可选项请访问 IronBarcode 许可页面。无需单独的运行时许可证。

从 BarcodeLib 迁移到 IronBarcode 是否简单?

从 BarcodeLib 迁移到 IronBarcode 主要涉及将基于实例的 API 调用替换为 IronBarcode 的静态方法、移除许可相关的样板代码以及更新结果属性名称。大多数迁移都是减少代码,而不是增加代码。

IronBarcode 能生成带有 logo 的二维码吗?

是的。`QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以将品牌图片原生嵌入二维码中,并支持配置纠错功能。此外,它还支持通过 `ChangeBarCodeColor()` 函数创建彩色二维码。

Curtis Chau
技术作家

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

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我