IRONSOFTWAREHOME
与其他组件比较

在.NET开发中,应该使用哪个 C# 条形码库?

Curtis Chau
Curtis Chau
Updated: 2026年4月26日

每个使用Aspose.BarCode的开发者都写过某种版本的这一行:new BarCodeReader(path, DecodeType.Code128)。 如果你知道图像的格式,它就能正常工作。 当您没有这样做时——当文档来自外部系统、供应商改变了标签格式或用户上传时——您要么猜测一个解码类型列表,要么使用DecodeType.AllSupportedTypes,这通常根据Aspose自己的指导会比较慢。 格式规范要求虽然不是致命缺陷,但它会在代码库的每次读取操作中造成日常摩擦。

PDF文件讲述的是预算故事。 如果您要处理 PDF 文档中的条形码,Aspose.BarCode 无法单独完成这项工作。 您需要Aspose.PDF for .NET来首先将页面渲染为图像。Aspose.PDF是一个独立的订阅产品,加在您已经支付的Aspose.BarCode费用之上。 对于大多数开发者来说,这明明是一个任务,却需要两个订阅才能完成。

IronBarcode能够自动检测条形码格式,在一个软件包中原生读取 PDF 文件,并提供起价 749 美元的永久许可证。本文将详细比较这两个库,以便您做出明智的选择。

了解 Aspose.BarCode

多年来,Aspose 一直在为.NET、Java 和其他平台构建文档处理库。 Aspose.BarCode 是该系列众多产品之一,其他产品包括 Aspose.Words、Aspose.Cells、Aspose.PDF、Aspose.Slides 以及其他十几个产品。 对于已经付费使用 Aspose.Total(包含所有 Aspose 产品)的团队来说,Aspose.BarCode 无需额外费用。但对于只需要条形码库的团队而言,订阅模式的合理性就难以体现了。

Aspose.BarCode支持80多种条形码符号体系,是任何商业.NET条码库中最完整的格式列表之一。 馆藏的广度是该图书馆最大的卖点。 API接口相应地很大,并且API的详细程度会随着功能的增加而增加。 生成一个基本的Code 128条形码需要实例化一个Save。 读取需要指定要搜索的解码类型,然后迭代由ReadBarCodes()返回的结果。 这两个操作都能正常工作——只是比实际需要的要冗长一些。

Aspose.BarCode 的主要架构特点:

  • 格式优先读取模型: 每次读取操作都需要显式指定DecodeType。 备用的DecodeType.AllSupportedTypes通常比有目标的列表慢,因为解码器会按序遍历每种已知的符号。
  • 基于实例的API: IDisposable的实例化对象。 它们应该被包裹在using块中以释放本机资源。 -不支持原生 PDF: Aspose.BarCode 无法直接打开或渲染 PDF 文档。 从PDF中读取条码需要Aspose.PDF,一个单独的订阅产品。
  • 深参数层次结构: 自定义通过generator.Parameters.Barcode.*属性链处理——需要记忆的多层对象层次结构。
  • 订阅许可: 根据Aspose的公布价格,每位开发人员和站点层级是年订阅; 未列出独立的永久选项。
  • 基于文件的许可激活: 生产部署需要在一个已知路径上访问.lic文件,这为Docker和Kubernetes环境增加了一个部署步骤。

格式优先阅读模式

Aspose.BarCode 的读取 API 的设计前提是调用者知道条形码格式:

using Aspose.BarCode.BarCodeRecognition;

var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
foreach (var result in reader.ReadBarCodes())
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");

如果你知道条形码格式,这种模式就没问题。问题就在于"如果你知道条形码格式"。处理供应商发票的采购系统无法保证每个供应商都使用同一种条形码类型。 接受用户上传的文档管理系统无法预测扫描仪使用的格式。 在这些情况下,DecodeType.AllSupportedTypes是备用,而它通常比有目标的解码类型列表慢。

解码器也必须被丢弃:

using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);

不使用using是资源泄漏。 IDisposable,虽然不处置它的后果没那么严重。 在这两种情况下,您都在管理对象生命周期,而静态工厂 API 会自动处理这些生命周期。

了解IronBarcode

IronBarcode使用静态工厂方法进行读取和写入。 没有实例可以构造、配置或释放。 默认情况下,读取 API 与格式无关,无论源文件是 PNG、JPEG、TIFF 还是 PDF,相同的调用都能正常工作。

IronBarcode由Iron Software开发和维护,这是一家专注于.NET开发人员工具的公司。 该库的设计原则是,条形码读取不应该需要事先了解条形码格式——该库的检测引擎会根据图像内容确定格式。 对于生成过程,流畅的方法链取代了其他库中常见的多级参数层次结构。

IronBarcode的主要特点:

  • 自动格式检测: DecodeType等价物。 -**静态无状态 API:**所有读写操作均为静态方法。 无需管理一次性实例,并且 API 自然是线程安全的,可同时使用。
  • 本机PDF支持: result.PageNumber
  • 流畅生成API: BarcodeWriter.CreateBarcode()返回一个可链式调用的对象。 自定义功能使用方法链而不是属性层次结构。 -**永久授权模式:**所有级别均提供一次性购买,无需每年续费。
  • 基于字符串的许可激活: 许可密钥通过IronBarCode.License.LicenseKey设置,与环境变量和CI/CD秘密管理器兼容。

功能对比

特征Aspose.BarCodeIronBarcode
格式检测手动——必须指定AllSupportedTypes所有支持的格式均自动运行
符号计数80岁以上50岁以上
PDF 支持不支持原生功能——需要单独的 Aspose.PDF 许可证本地——BarcodeReader.Read("doc.pdf")内置于包中
定价模式仅限订阅 - 年度层级从$999/年起永久使用权,一次性付款 749 美元起
永久许可不可用是的,所有级别
API 风格基于实例的详细配置静态工厂方法,流畅 API
一次性要求是——BarcodeGenerator否——无状态静态方法
线程安全每个线程需要单独的实例静态API - 请参阅IronBarcode文档获取线程指导

详细功能对比

特征Aspose.BarCodeIronBarcode
一代
API 风格new BarcodeGenerator(EncodeTypes.X, "data")BarcodeWriter.CreateBarcode("data", BarcodeEncoding.X)
定制模式generator.Parameters.Barcode.*属性层次结构流畅的方法链(.ChangeBarCodeColor()
带有徽标的二维码生成后手动 GDI+ 叠加.AddBrandLogo("logo.png")内置
输出到字节generator.GenerateBarCodeImage().ToPngBinaryData()
彩色条形码generator.Parameters.Barcode.BarColor.ChangeBarCodeColor(Color.X)
阅读
格式规范必需(DecodeType无需 — 自动
未知格式回退DecodeType.AllSupportedTypes(慢)同样的调用——无需备用模式
性能调校QualitySettings参数设置ReadingSpeed枚举——三级
一次性阅读器是——using var reader = new BarCodeReader(...)不——这是静态调用,没有对象需要释放。
结果访问迭代reader.ReadBarCodes()返回值BarcodeReader.Read()
条形码值属性result.CodeTextresult.Value
格式名称属性result.CodeTypeNameresult.Format.ToString()
PDF 支持
原生 PDF 阅读
PDF文件必需Aspose.PDF(单独订阅)无额外包裹
结果中的页码不适用result.PageNumber
许可
许可模式仅限订阅,每年续订永久购买,一次性购买
单一开发商每年999美元一次性 749 美元
10 位开发者4,995美元/年(站点许可)一次性支付 2,999 美元(Professional)
无限制部署(10名开发者)$13,986/年(网站OEM)一次性支付 5,999 美元(无限量)
包含 PDF 支持不——需要单独订阅 Aspose.PDF。
平台和部署
许可证激活.lic文件路径字符串键 — 环境变量
Docker部署必须复制.lic文件进入镜像或挂载环境变量——无需文件
.NET Framework是的(4.6.2+)
.NET Core / .NET 5+是的(.NET Core 3.1+、.NET 5/6/7/8)
视窗是的(x64/x86)
Linux是的(x64)
MacOS是的(x64/ARM)
多克
Azure/AWS Lambda

生成 API

在日常代码中,生成 API 最能体现出这两个库在代码冗长程度上的差异。

Aspose.BarCode 方法

Aspose.BarCode使用Parameters层次结构进行配置。 最小生成调用需要三个步骤——实例化、保存调用和格式规范。 实际使用通常需要导航到generator.Parameters.Barcode.*中:

using Aspose.BarCode.Generation;
using System.Drawing;

var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");

// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;

generator.Save("barcode.png", BarCodeImageFormat.Png);

每次自定义都导航到generator.Parameters.Barcode.*,这是一个多层对象层次结构。 一旦记住了,就不复杂——但需要记忆。

IronBarcode方法

IronBarcode将参数层次结构替换为流畅的方法链。 默认设置可在大多数情况下产生正确的结果,自定义设置可直接在代码中表达:

using IronBarCode;

// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");

// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();

对于二维码, IronBarcode 的二维码生成 API包含品牌徽标支持,无需手动合成图像:

using IronBarCode;
using IronSoftware.Drawing;

// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded-high-ecc.png");

// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
    .ChangeBarCodeColor(Color.DarkBlue)
    .SaveAsPng("qr-colored.png");

Aspose.BarCode没有提供一键式品牌标识助手用于QR码; 文档化方法是生成条形码图像然后将标志合成在上面(例如使用System.Drawing.Graphics)。 IronBarcode的AddBrandLogo一次调用处理复合,并自动适当地设置错误校正。

PDF条形码读取

对许多团队来说,这才是最重要的比较。从 PDF 文档中读取条形码是常见的工作流程:例如,收到的发票、保存为 PDF 格式的货运标签以及扫描的文档存档。

Aspose.BarCode 方法

Aspose.BarCode 本身不支持 PDF。 要使用 Aspose 从 PDF 中读取条形码,您需要 Aspose.PDF 来加载 PDF 并将页面渲染为图像,还需要 Aspose.BarCode 来扫描这些渲染后的图像。 两者都是订阅产品。 两者都需要激活许可证。 您为大多数开发者认为的单一功能支付了两个年度订阅。

// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var barcodeValues = new List<string>();

    // Step 1: Load and render the PDF using Aspose.PDF
    var pdfDocument = new Aspose.Pdf.Document(pdfPath);
    var resolution = new Resolution(300);
    var device = new PngDevice(resolution);

    for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
    {
        using var pageStream = new MemoryStream();
        device.Process(pdfDocument.Pages[pageNum], pageStream);
        pageStream.Seek(0, SeekOrigin.Begin);

        // Step 2: Scan the rendered image for barcodes using Aspose.BarCode
        using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
        foreach (var result in reader.ReadBarCodes())
        {
            barcodeValues.Add(result.CodeText);
        }
    }

    return barcodeValues;
}

这是两个许可设置、两个使用语句来自两个命名空间、一个渲染管道、内存流管理和一个嵌套循环。此时图像提取通常不知道条形码使用的格式,因此也使用DecodeType.AllSupportedTypes

IronBarcode方法

IronBarcode在内部处理 PDF 解析、页面渲染和条形码检测。 您调用result.PageNumber,这样您就知道每个条形码来自哪个页面。 没有第二个软件包,没有第二个许可证,没有渲染代码。

using IronBarCode;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);
    return results.Select(r => r.Value).ToList();
}
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}

IronBarcode PDF 读取文档涵盖多页批量处理和页面范围筛选选项。

读取未知条形码格式

当您不知道图像包含哪种条形码格式时,这两个库处理方法不同。

Aspose.BarCode 方法

DecodeType.AllSupportedTypes是Aspose用于格式未知情境的解决方案。 Aspose 自己的文档也承认,这种方法比指定目标列表要慢,因为解码器会按顺序遍历每个已知的符号体系。 对于大批量处理——例如仓库每分钟扫描数千个标签——这种性能差异可不是微不足道的。

using Aspose.BarCode.BarCodeRecognition;

using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}

IronBarcode方法

根据格式知识的不同,不存在"慢速模式"和"快速模式"。IronBarcode的检测算法与图像中包含 Code 128 或 DataMatrix 时使用的算法相同。 如果您想调整性能与准确性之间的取舍,ReadingSpeed选项可以做到这一点,无需格式知识:

using IronBarCode;

// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("document.png", options);

ReadingSpeed.Faster优先考虑吞吐量。 ReadingSpeed.Detailed优先考虑在损坏或低对比度图像上的准确性。 两者都不需要你事先知道格式。 有关所有调优参数,请参阅IronBarcode读取选项

API 映射参考

Aspose.BarCodeIronBarcode
new BarcodeGenerator(EncodeTypes.Code128, "data")BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
generator.Save("file.png", BarCodeImageFormat.Png).SaveAsPng("file.png")
new BarCodeReader(path, DecodeType.Code128)BarcodeReader.Read(path)
DecodeType.AllSupportedTypes(慢,详尽扫描)自动——始终快速,所有格式均采用相同的调用方式
reader.ReadBarCodes()(part of BarcodeReader.Read — returns results directly)
迭代reader.ReadBarCodes()返回值BarcodeReader.Read
result.CodeTextresult.Value
result.CodeTypeNameresult.Format.ToString()
result.Confidenceresult.Confidence
Aspose.BarCode + Aspose.PDF for PDF readingBarcodeReader.Read("doc.pdf")——一个包
license.SetLicense("Aspose.BarCode.lic")IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
new Aspose.BarCode.Metered() + .SetMeteredKey()(not needed — single key covers all environments)
generator.GenerateBarCodeImage().ToPngBinaryData().SaveAsPng()
QREncodeMode.Auto + QRErrorLevel.LevelH + 手动标志覆盖QRCodeWriter.CreateQrCode().AddBrandLogo()

当团队考虑从 Aspose.BarCode 迁移到IronBarcode时

通常情况下,开发团队会在多种情况下评估IronBarcode作为 Aspose.BarCode 的替代方案。

订阅续费通知已到

年度订阅续订是团队最常重新审视图书馆决策的时候。 如果Aspose.BarCode是堆栈中唯一的Aspose产品,每名开发者每年支付$999(或在Site级别每年支付$4,995)用于条形码功能将促使进行比较。 对话通常是这样的:"我们要永远每年都支付这笔费用。"IronBarcode的一次性费用是多少?Professional版(10 位开发人员 2,999 美元)的IronBarcode在第一年内即可通过站点许可收回成本。

对于使用Aspose.Total的团队来说,Aspose.BarCode与许多其他Aspose产品捆绑在一起,数学计算结果不同。 在该捆绑包中,Aspose.BarCode 的边际成本接近于零。 这些球队就没有太多理由做出改变。

PDF支持成为一项必要条件

许多项目最初都是从图像中读取条形码,后来当利益相关者意识到传入的文档是 PDF 而不是图像文件时,才添加了 PDF 支持。 此时,Aspose.BarCode 团队面临一个决定:添加 Aspose.PDF(另一个订阅),寻找第三方 PDF 渲染器,或者重新评估条形码库。

添加Aspose.PDF解决了立即需求,但意味着第二个年度订阅。 寻找第三方渲染器增加了依赖性和集成工作。 重新评估条形码库,并发现IronBarcode只需一次性付费即可原生读取 PDF,这通常是最终结果。

生产环境中格式未知的情况

接受文档上传的面向客户的应用程序无法控制上传文档使用的条形码格式。 如果应用程序是以Code 128输入假设构建的,而客户上传了一个DataMatrix标签,硬编码的DecodeType.Code128将无声地返回没有结果。 更改为DecodeType.AllSupportedTypes修复了正确性,但引入了性能成本。

遇到此问题的团队——在生产中出现新格式时添加越来越多的DecodeType值到其读取器配置——通常最终保持一个每次添加新格式源时需要更新的列表。IronBarcode的自动检测功能使该列表变得不必要。

云和容器化部署

Aspose.BarCode 的文件许可增加了一个部署步骤:许可证文件必须在运行时可以从应用程序可以读取的路径访问。 在 GitOps 工作流程中,许可证文件要么最终进入源代码控制(存在安全风险),要么需要通过挂载的密钥卷注入。IronBarcode基于密钥的方法可以完美地融入 Kubernetes secrets 和 CI/CD secret 变量中,无需在容器镜像中管理任何文件。

常见迁移注意事项

从 Aspose.BarCode 过渡到IronBarcode 的团队会遇到一些可预见的技术调整。

属性名称映射

切换包后最常见的编译错误是result.Value的重命名。 对整个代码库进行搜索可以快速解决这个问题:

grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
SHELL

result.Valueresult.Format.ToString()BarcodeEncoding枚举值,它还允许在需要时进行类型化比较。

解码类型移除

代码库中的每个DecodeType.*引用都可以去除:

grep -r "DecodeType\." --include="*.cs" .
SHELL

如果列出一个特定的BarcodeReaderOptions中提供了类似的好处,而不需要格式知识要求。

许可证初始化变更

Aspose.BarCode使用通过.lic文件。 IronBarcode使用字符串键:

IronBarCode.License.LicenseKey =
    Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
    ?? throw new InvalidOperationException("IronBarcode license key not configured");

从存储库和构建工件中删除.lic文件。 在Docker中,移除ENV IRONBARCODE_LICENSE条目替换。

编码类型到条形码编码的映射

BarcodeEncoding.QRCode——命名差异是团队在迁移生成代码后最常遇到的第一个编译错误的地方。 大多数其他映射具有一致的命名是直接等效的。

##IronBarcode的其他功能

除了核心对比点之外, IronBarcode还提供了一些可能与应用场景相关的功能:

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

IronBarcode支持.NET Framework 4.6.2+、.NET Core 3.1+,以及.NET 5、6、7和8。该库会根据微软的.NET发布节奏定期更新。 Aspose.BarCode支持类似的.NET版本范围,因此在当前版本上,两个库都没有兼容性优势。 对于未来的准备而言,真正重要的区别在于许可方式:今天购买的IronBarcode永久许可证可以涵盖未来的.NET版本,无需额外费用,而 Aspose.BarCode 订阅需要不断续订才能访问更新的版本。

结论

Aspose.BarCode 和IronBarcode代表了条形码库设计中的两种不同理念。 Aspose.BarCode 基于显式的、基于实例的 API 构建,调用者通过属性层次结构指定格式、管理对象生命周期并配置每个操作。 IronBarcode基于静态的、与格式无关的 API 构建,该库在内部处理检测、对象生命周期和 PDF 渲染。 两种方法本身都没有绝对的正确性——正确的选择取决于应用程序的需求。

对于已经在 Aspose 生态系统中运营的团队来说,Aspose.BarCode 是更强大的选择。 当Aspose.Total已获得许可证时,Aspose.BarCode不会增加边际成本,其80多个符号列表是任何商业.NET条形码库中最广泛的之一。 对于需要特殊格式(MaxiCode、DotCode 或IronBarcode50 多个列表中未包含的特定邮政符号)的应用,Aspose.BarCode 可能是唯一可行的选择。 其成熟度和形式广度是真正的优势。

对于正在评估 Aspose.BarCode 是否值得单独购买的团队来说,其价值计算就比较困难了。 格式规范要求给每次读取操作都带来了不便。 由于缺少原生 PDF 支持, IronBarcode的基本套餐中包含的这项功能,其订阅费用翻了一番。 订阅模式意味着成本会逐年累积——一个 10 人开发团队每年 4,995 美元,五年下来就是 24,975 美元,而一次性购买IronBarcode Professional 的价格为 2,999 美元。IronBarcode的自动检测、原生 PDF 读取和永久许可在一个软件包中解决了所有这三个问题。

最终的决定取决于生态系统的契合度和符号学的要求。 与 Aspose 产品深度集成的团队,或者需要IronBarcode支持列表之外的格式的团队,应该使用 Aspose.BarCode。 对于需要独立永久许可证、原生 PDF 阅读功能以及无需每次读取都了解格式的 API 的团队来说, 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 天试用密钥
无需信用卡或创建账户