Infragistics Barcode 与 IronBarcode:C# 条形码库对比
Neodynamic Barcode vs IronBarcode:拆分SDK架构和格式支持比较
Neodynamic 的条形码读取器 SDK 无法读取二维码。 即使您同时购买了 Neodynamic SDK,仍然可能无法读取配套生成器生成的相同二维码。 这种矛盾——一个支持 QR Code、DataMatrix、PDF417 和 Aztec 格式的条码生成器,却搭配一个不支持这些格式的阅读器——定义了使用 Neodynamic 条码工具的实际体验,并为接下来与IronBarcode的比较奠定了基础。
了解新动态条形码
Neodynamic 通过两个完全独立的商业产品提供条形码功能:用于生成条形码的 Barcode Professional SDK 和用于读取条形码的 Barcode Reader SDK。 每个产品都以独立的NuGet包形式分发,需要单独购买,并带有独立的许可证密钥。 一个既需要生成又需要读取的项目必须独立地集成这两个软件包,通过单独的更新周期来维护这两个软件包,并在应用程序启动时对这两个软件包进行配置。
条码ProfessionalSDK是生成组件。 它支持多种符号体系,包括线性格式(Code 128、Code 39、EAN-13、UPC-A、Codabar、ITF)和二维格式(QR Code、DataMatrix、PDF417、Aztec)。 SDK 使用基于实例的 API:构造一个 BarcodeProfessional 对象,分配其 Code 和 Symbology 属性,并调用 GetBarcodeImage() 以生成一个通过标准 System.Drawing.Imaging 管道保存的 System.Drawing.Image。 .NET Framework版依赖于System.Drawing; 通过ComponentSource分发的单独 .NET Standard 版本。
条形码读取器 SDK 是读取组件。 它接受System.Drawing.Bitmap并仅返回1D条码的结果。 该阅读器不支持二维码、DataMatrix、PDF417、Aztec 以及所有其他二维格式。 当提交二维条形码时,SDK 不返回任何结果——它不会抛出异常,而只是生成一个空的结果集。 Barcode Reader SDK 于 2019年12月31日标记为服务寿命结束,其 NuGet 包(Neodynamic.SDK.BarcodeReader 1.0.2000)自 2012 年7月以来未更新,目标仅限于 .NET Framework 2.0/3.x/4.x。 因此,恢复2D读取能力需要添加一个Neodynamic生态系统以外的第三方库。
新动态条形码的关键架构特征:
-生成和读取分别使用不同的产品:使用这两种功能的项目需要两个NuGet包、两次购买和两个许可证密钥。 -生成二维码却无法读取二维码:条码ProfessionalSDK 可以生成 QR 码、DataMatrix、PDF417 和 Aztec 格式,但配套的条码阅读器 SDK 无法读取这些格式中的任何一种。
- 基于实例的生成API:生成需要构造一个
GetBarcodeImage()。 - 大多数版本中依赖于System.Drawing:Barcode Professional .NET Windows版本和Barcode Reader SDK依赖于
System.Drawing,这限制了这些版本在Linux和容器中的部署。 条码专业.NET Standard版本使用SkiaSharp并避免这一依赖。 -仅支持一维条码读取范围:条码阅读器 SDK 支持 Code 128、EAN-13、UPC-A、Code 39、Codabar、Interleaved 2 of 5 和 MSI/Plessey。 不包含2D格式。 -不支持原生 PDF:两个 SDK 都不能直接从 PDF 文档中读取条形码; 需要单独的图像提取步骤。 -不支持自动格式检测:读取器根据其支持的格式而不是图像内容来推断格式。
拆分式 SDK 架构
购买两个Neodynamic SDK的项目必须在启动时配置两个独立的许可证块。双重LicenseKey分配使用不同的命名空间和不同的类名,并且两个块彼此不知情:
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader
' Neodynamic: two products, two license configurations
' Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company"
BarcodeProfessional.LicenseKey = "GEN-KEY"
' Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY"
这种模式在每个环境(开发、测试和生产)中都会重复出现,并且每当产品升级或更新时都必须保持这种模式。
了解IronBarcode
IronBarcode是由Iron Software开发的商业.NET条形码库,它通过一个NuGet包在单一许可证下提供条形码生成和读取功能。 库使用静态 API 模型:通过 BarcodeWriter.CreateBarcode() 进行生成,通过 BarcodeReader.Read() 进行读取。 这两种方法都适用于所有支持的符号体系,无需特定格式的代码路径。
IronBarcode 构建时不依赖于 System.Drawing,因此无需特定于平台的配置,即可在 Linux、macOS 和 Docker 容器中部署。 该库可以直接从图像文件、图像流和 PDF 文档中读取条形码,无需对 PDF 源进行单独的图像提取步骤。
IronBarcode的主要特点:
-生成和读取的单一软件包:一个NuGet包、一个许可证密钥和一个配置块涵盖所有条形码操作。
- 统一的1D和2D支持:同一API读取和生成50多种符号学,包括Code 128、EAN-13、QR Code、DataMatrix、PDF417 和 Aztec。
- 静态流式 API:
BarcodeWriter.CreateBarcode()返回可链式调用的结果;BarcodeReader.Read()接受文件路径、流和 PDF 文档。 -自动格式检测:读取器可从图像内容中识别符号,而无需调用者指定预期格式。 -无需 System.Drawing 依赖:在 Linux 和容器中进行跨平台部署无需额外的本地库配置。 -原生 PDF 读取:直接读取嵌入在 PDF 文档中的条形码,返回条形码值以及页码元数据。 - 异步和批处理:
BarcodeReader.ReadAsync()和多页批处理操作支持高吞吐量的服务器工作负载。
功能对比
下表总结了Neodynamic产品与IronBarcode之间最主要的区别:
| 特征 | Neodynamic 条码Professional | 新动力条形码阅读器 | IronBarcode |
|---|---|---|---|
| 条形码生成 | 是 | 否 | 是 |
| 一维条形码读取 | 否 | 是 | 是 |
| 二维条形码读取 | 否 | 否 | 是 |
| 所需产品 | 1(仅限一代) | 1(仅供阅读) | 1(两者) |
| 需要许可证密钥 | 每购买一件产品,即可获得 1 件。 | 每购买一件产品,即可获得 1 件。 | 共 1 人 |
| 原生 PDF 条形码读取 | 否 | 否 | 是 |
| 系统绘图依赖项 | 版本特定 | 是 | 否 |
详细功能对比
| 特征 | Neodynamic 条码Professional | 新动力条形码阅读器 | IronBarcode |
|---|---|---|---|
| 一代 | |||
| 代码 128 生成 | 是 | 不适用 | 是 |
| EAN-13 / UPC-A 代 | 是 | 不适用 | 是 |
| 代码 39 生成 | 是 | 不适用 | 是 |
| 二维码生成 | 是 | 不适用 | 是 |
| DataMatrix 生成 | 是 | 不适用 | 是 |
| PDF417 生成 | 是 | 不适用 | 是 |
| 阿兹特克世代 | 是 | 不适用 | 是 |
| 阅读 | |||
| 代码 128 读数 | 不适用 | 是 | 是 |
| EAN-13 / UPC-A 读取 | 不适用 | 是 | 是 |
| 代码 39 读数 | 不适用 | 是 | 是 |
| Codabar 阅读 | 不适用 | 是 | 是 |
| 二维码读取 | 不适用 | 不 | 是 |
| DataMatrix 读取 | 不适用 | 不 | 是 |
| PDF417 阅读 | 不适用 | 不 | 是 |
| 阿兹特克语 | 不适用 | 不 | 是 |
| 自动格式检测 | 不适用 | 否 | 是 |
| 输入源 | |||
| 图像文件输入 | 是 | 是 | 是 |
| PDF文档输入 | 否 | 否 | 是 |
| 流输入 | 是 | 是 | 是 |
| 平台和许可 | |||
| 系统绘图依赖项 | 版本特定 | 是 | 否 |
| Linux/Docker 支持 | 是(.NET Standard 版本) | 否 | 是 |
| .NET Standard 2.0 | 是(.NET Standard 版本) | 否 | 是 |
| .NET 8 / .NET 9 | 是(.NET Standard 版本) | 否 | 是 |
| 需要NuGet包 | 每件产品1件 | 每件产品1件 | 共 1 人 |
| 需要许可证密钥 | 每件产品1件 | 每件产品1件 | 共 1 人 |
阅读格式支持
这两个 Neodynamic SDK 和IronBarcode之间的读取格式差异是本次比较中最显著的技术差异。
新动力学条码阅读器方法
Neodynamic条码阅读器仅支持线性条码。 当向读取器提交二维条形码时,SDK 返回空结果集或 null 结果集。 没有引发异常,也没有错误消息表明发生了什么。 使用此 SDK 的团队通常会在部署调用读取器读取二维码图像的代码后发现此限制,并观察到结果集合始终为空。
在使用 Neodynamic Reader 的代码库中,一种常见的防御模式是显式检查,当预期为 2D 格式时引发异常:
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing
Public Function ReadQrCode(imagePath As String) As String
Using bitmap As New Bitmap(imagePath)
Dim reader As New BarcodeReader()
Dim results = reader.Read(bitmap)
' Results will be null or empty — QR codes are not recognised by this SDK
If results Is Nothing OrElse Not results.Any() Then
Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End If
Return results.First().Value
End Using
End Function
仅使用 Neodynamic Reader SDK 无法完成此方法。 NotSupportedException 不是一种变通方法——它反映了读者对2D输入的实际能力边界。
IronBarcode方法
IronBarcode 通过相同的 BarcodeReader.Read() 调用读取所有支持的条码类型。 系统会根据图像内容自动检测格式。 二维码、Code 128 条码和 DataMatrix 条码都使用相同的调用码:
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
' QR codes, DataMatrix, PDF417 — all handled automatically
Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
Return If(result?.Value, Nothing)
End Function
调用者未指定预期格式。 IronBarcode可识别条码并返回其值。 有关图像读取选项(包括多条形码检测和图像预处理)的完整详细信息,请参阅图像条形码读取指南。
条形码生成
Neodynamic Barcode Professional和IronBarcode都能够生成一维和二维条形码。 区别在于 API 风格和依赖项大小,而不是输出能力。
新动态条码Professional方法
Neodynamic 的生成 API 是基于实例的。 构造一个System.Drawing.Image。 然后使用 System.Drawing.Imaging.ImageFormat 枚举保存图像:
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Neodynamic.SDK.Barcode
Imports System.Drawing
' Configure license first
BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "YOUR-KEY"
' Build the barcode through property assignment
Dim barcode As New BarcodeProfessional()
barcode.Code = "12345678"
barcode.Symbology = Symbology.Code128
barcode.BarcodeUnit = BarcodeUnit.Pixel
' Get image and save via System.Drawing
Dim image As Image = barcode.GetBarcodeImage()
image.Save("output.png", Imaging.ImageFormat.Png)
该 SDK 提供合法的自定义选项,包括 DPI 控制、文本对齐、颜色设置和静默区大小。 这些功能对于需要精确物理尺寸的打印工作流程非常有用。 发电能力本身是完整的; 促使人们迁移的限制因素在于阅读方面,而不是生成方面。
IronBarcode方法
IronBarcode采用流畅的静态方法。 编码和数据作为参数传递给BarcodeWriter.CreateBarcode(),输出格式在返回的对象上以方法名表示。 无需System.Drawing导入:
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.SaveAsPng("output.png")
对于2D条码生成,专用的QRCodeWriter类提供特定于二维码的附加选项:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qrcode.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qrcode.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.SaveAsPng("qrcode.png")
有关生成具有尺寸和注释选项的一维条码的指导,请参阅创建一维条码指南。 有关二维条码的创建(包括 DataMatrix 和 PDF417),请参阅二维条码创建指南。
许可和产品结构
对于构建既需要生成又需要读取的系统而言,许可模式是两种选择之间最实际的区别之一。
新动力学方法
Neodynamic 的条形码功能分为两个独立授权的产品。 条码ProfessionalSDK 涵盖条码生成,条码读取器 SDK 涵盖条码读取。 每款产品都需要单独购买,并配有单独的许可证密钥。 购买两个产品的团队必须维护两个LicenseOwner / LicenseKey配置块,跟踪两个单独的续约日期,并在出现问题时处理两个独立的支持渠道。
条码专业 SDK 的售价从单个开发者 Basic 版许可证大约352美元起,而终极版大约705美元起(通过 ComponentSource 购买开发者许可证)。 条码阅读器 SDK 需要单独付费,并按照旧版本付费——该产品在 2019 年 12 月 31 日被标记为服务终止。一个需要2D读取的项目无法以任何价格利用 Neodynamic 产品满足该要求;必须添加第三方库。 请参阅IronBarcode支持的条形码格式页面,了解单个统一许可证涵盖的完整列表。
IronBarcode方法
IronBarcode作为一款单一产品出售,它涵盖所有条码操作——生成和读取所有支持的条码符号——只需一个许可证密钥即可完成。 没有单独的阅读器许可证,没有单独的生成器许可证,2D 格式支持也不收取额外费用。 许可证密钥在应用程序启动时设置一次,无需其他配置:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
IronBarcode Lite单个开发者版本售价为 749 美元,涵盖所有功能。 有关当前定价等级和批量选项,请参阅IronBarcode许可页面。
API 映射参考
| 新动态 API | IronBarcode等效物 | 备注 |
|---|---|---|
BarcodeProfessional.LicenseOwner = "..." |
IronBarCode.License.LicenseKey = "key" |
单把钥匙即可取代所有者钥匙对。 |
BarcodeProfessional.LicenseKey = "..." |
(part of single key above) | 没有单独的所有者字段 |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner |
(removed) | 不要求 |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey |
(removed) | 不要求 |
new BarcodeProfessional() |
BarcodeWriter.CreateBarcode(data, encoding) |
静态方法,无实例 |
barcode.Code = data |
CreateBarcode的第一个参数 |
施工期间通过 |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 |
第二个参数 |
barcode.Symbology = Symbology.QRCode |
BarcodeEncoding.QRCode |
全程支持往返行程 |
barcode.GetBarcodeImage().Save(path, ImageFormat.Png) |
.SaveAsPng(path) |
Fluent,没有 ImageFormat 枚举 |
new BarcodeReader().Read(bitmap) |
BarcodeReader.Read(imagePath) |
静态方法,接受文件路径 |
result.Value |
result.Value |
相同的属性名称 |
throw new NotSupportedException(...) 用于 QR |
BarcodeReader.Read(imagePath) |
替换为标准读取调用 |
当团队考虑从 Neodynamic Barcode 迁移到IronBarcode时
二维码读取要求
导致 Neodynamic 团队转向IronBarcode 的最常见情况是,他们发现 Barcode Professional SDK 生成的二维码无法被 Barcode Reader SDK 读取。 构建产品标签系统、库存管理工具或文档跟踪工作流程的团队通常会将生成和读取作为更大系统中的独立阶段来实现。 当首先使用 Barcode Professional构建生成过程时,只有在尝试读取组件时,读取器的限制才会显现出来。 到那时,该项目已经承诺使用 Neodynamic 进行生成,而添加第三个库来涵盖 2D 阅读会引入版本管理的复杂性,而统一的 SDK 则不会出现这种情况。
降低产品复杂性
有些团队迁移并非因为存在特定的格式差异,而是因为维护两个独立产品来实现概念上单一的功能所带来的开销,成为了反复出现的摩擦点。 在 .csproj 文件中有两个包,两个许可证续约周期,两个发布说明集可供审查,以及在应用 .NET 或 Windows 更新时可能出现的两个不兼容来源——所有这些开销都没有提供单一统一包无法提供的功能。团队在进行 .NET 升级时进行依赖审查时,常将 Neodynamic 的双包方案视为简化机会。
PDF条形码处理
处理包含条形码的 PDF 文档的应用程序代表了 Neodynamic SDK 同时无法满足需求的场景。 生成 SDK 和读取器 SDK 都无法打开 PDF 文件并从其页面中提取条形码值。 处理货运清单、发票文件、医疗记录或任何在 PDF 中嵌入条形码的文档工作流程的团队,必须在进行任何读取之前实施中间图像提取步骤。 该提取步骤需要额外的库,这意味着该项目已经存在第三个依赖项,以解决单个IronBarcode安装即可消除的限制。
读写格式的一致性
大规模运行条形码工作流程的团队有时会发现,生成和读取之间格式支持的不一致会造成测试和验证问题。 当一个系统为一种目的生成二维码,并为另一种目的读取不同格式类型的二维码时,生成器支持的内容与读取器支持的内容之间的差异会在往返测试中造成差距。 生成和读取共享同一个库和同一个支持格式列表的系统更容易验证。 验证生成的条形码是否可以成功读取,变成了单库操作,而不是多库集成测试。
常见迁移注意事项
双包装移除
从 Neodynamic 迁移需要删除两个 NuGet 包:Neodynamic.SDK.Barcode 和 Neodynamic.SDK.BarcodeReader。 两个都必须从using指令也必须从源文件中移除。 为每个运行dotnet remove package是足够的; 两者之间没有需要额外清理的共享依赖项。
双许可证配置清理
两个许可证配置块——一个用于IronBarCode.License.LicenseKey分配替换。 此分配在应用程序启动时进行一次,通常在Program.cs或应用程序的依赖注入引导中进行。在验证迁移后,可以撤销存储Neodynamic许可证密钥的任何配置文件或环境变量。
NotSupportedException 移除
在开发过程中遇到2D读取限制的代码基常包含抛出NotSupportedException用于QR码或DataMatrix读取的占位方法。 这些方法不是变通方法——它们是对能力不存在的诚实承认。迁移到IronBarcode后,每个此类方法体都被标准BarcodeReader.Read(imagePath)调用替换。 无需特殊处理; 系统会自动检测格式。
IronBarcode的其他功能
除了核心对比点之外, IronBarcode还提供了一些 Neodynamic 产品所不具备的功能:
- 原生PDF条码读取:
BarcodeReader.Read("document.pdf")直接从PDF文档中读取条码,返回条码值和页码信息,无需中间图像提取。 - 异步批处理:
BarcodeReader.ReadAsync()支持适合服务器端工作负载处理大量图像或文档的非阻塞读取。 -机器学习纠错: IronBarcode应用基于机器学习的纠错技术,从损坏、部分遮挡或低分辨率的条形码图像中恢复值,这些图像的标准解码器会返回空结果。 - 多条码检测:单个
BarcodeReader.Read()调用返回图像中存在的所有条码,包括同时包含1D和2D条码的混合格式图像。 -将条形码添加到 PDF 中: IronBarcode可以直接将条形码图像写入现有的 PDF 文档,而无需单独的 PDF 库。 -图像预处理选项:可在阅读器上配置亮度校正、旋转处理和降噪功能,以提高在困难条件下拍摄的图像的识别率。
.NET兼容性和未来准备情况
IronBarcode 支持 .NET Standard 2.0, .NET Framework 4.6.2 及以上, .NET Core 3.1,以及包括 .NET 8 和 .NET 9 在内的所有当前 .NET 版本。该库无需依赖于 System.Drawing,这意味着可以在 Linux 和 Docker 容器中无需修改运行。 Neodynamic 条码阅读器 SDK 仅面向 .NET Framework 2.0/3.x/4.x——其 NuGet 包自 2012 年 7 月以来一直没有更新,并且该产品已在 2019 年 12 月 31 日标记为服务终止,因此不支持 .NET Core、.NET 5+、Linux 或 Docker。 条码专业 SDK 以多个版本提供; .NET Standard 版本使用 SkiaSharp 并在 .NET Core / .NET 5+ 上运行,而 .NET Windows 版本保留了System.Drawing依赖。 IronBarcode会根据 .NET 的发布节奏进行更新。
结论
Neodynamic 条码ProfessionalSDK 和 Neodynamic 条码读取器 SDK 共同构成了一个分离式产品模型,其中条码生成和读取是两个独立的商业产品,具有各自独立的功能边界。 该生成器支持二维码、DataMatrix、PDF417 和 Aztec 格式。 读者并不知道。 这种不对称性并非小问题——这意味着这两款产品无法为任何需要读取二维条码的应用形成完整的条码工作流程,也意味着移动支付、药品追踪、运输物流和文档处理中最常用的格式不在读取器的功能范围内。
如果仅需生成条码,Neodynamic Barcode Professional是一个合理的选择。 该 SDK 可在各种符号体系中生成高质量输出,支持 DPI 控制和特定于打印的自定义,并与更广泛的 Neodynamic ThermalLabel 生态系统集成。 对于仅部署 Windows 系统且只需要一维条码读取的团队,也可以使用条码读取器 SDK,而不会遇到其格式限制。 在如此狭窄的操作范围内——仅生成图像,或仅在 Windows 上读取 1D 图像——Neodynamic 的产品能够实现其所描述的功能。
当项目需要生成和读取条形码、工作流程的任何部分涉及 2D 格式、PDF 文档是条形码输入的来源,或者为了进行依赖关系管理而优先选择单包架构时, IronBarcode是合适的选择。 统一的许可证模式、缺少System.Drawing依赖性以及对所有支持条码类型的自动格式检测使其适用于跨平台应用、云部署以及处理来自多种来源的多种条码格式的系统。
两者之间的选择最终归结为 Neodynamic 阅读器中的格式边界是否会影响相关项目的问题。 对于工作流程仅限于在 Windows 系统上生成和读取一维条形码的团队来说,可能永远不会遇到这种限制。 对于需要在同一系统的生成端和读取端都使用二维码的团队来说,Neodynamic 产品系列内部的界限是无法逾越的,无论选择哪个产品,都需要不同的库。
常见问题解答
什么是Neodynamic Barcode Professional?
Neodynamic Barcode Professional 是一个 .NET 条形码库,用于在 C# 应用程序中生成和读取条形码。它是开发人员在为 .NET 项目选择条形码解决方案时评估的几个备选方案之一。
Neodynamic Barcode Professional 和 IronBarcode 的主要区别是什么?
IronBarcode 使用静态、无状态的 API,无需实例管理,而 Neodynamic Barcode Professional 通常需要在使用前创建和配置实例。IronBarcode 还提供原生 PDF 支持、自动格式检测以及跨所有环境的单密钥许可。
IronBarcode 的授权许可比 Neodynamic Barcode Professional 更容易获得吗?
IronBarcode 使用单一许可证密钥,同时涵盖开发和生产部署。与将 SDK 密钥与运行时密钥分开的许可系统相比,这简化了 CI/CD 流水线和 Docker 配置。
IronBarcode 是否支持 Neodynamic Barcode Professional 支持的所有条码格式?
IronBarcode 支持超过 30 种条码符号体系,包括 QR 码、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自动检测功能意味着无需显式枚举格式。
IronBarcode是否支持原生PDF条码读取?
是的。IronBarcode 可以直接从 PDF 文件中读取条形码,使用 `BarcodeReader.Read("document.pdf")` 方法,无需单独的 PDF 渲染库。每页的读取结果包括页码、条形码格式、数值和置信度评分。
与 Neodynamic Barcode Professional 相比,IronBarcode 在批量处理方面有何不同?
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 安装程序或运行时文件。
与 Neodynamic 不同,我可以在购买前评估 IronBarcode 吗?
是的。IronBarcode 的试用模式会返回完整的解码条形码值——只有生成的输出图像才会带有水印。您可以在购买前,用自己的文档测试读取准确率。
Neodynamic Barcode Professional 和 IronBarcode 的价格有什么区别?
IronBarcode 的永久单开发者许可证起价为 749 美元,涵盖开发和生产环境。定价详情和批量许可选项请访问 IronBarcode 许可页面。无需单独的运行时许可证。
从 Neodynamic Barcode Professional 迁移到 IronBarcode 是否简单?
从 Neodynamic Barcode Professional 迁移到 IronBarcode 主要涉及将基于实例的 API 调用替换为 IronBarcode 的静态方法、移除许可相关的样板代码以及更新结果属性名称。大多数迁移工作都是减少代码,而不是增加代码。
IronBarcode 能生成带有 logo 的二维码吗?
是的。`QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以将品牌图片原生嵌入二维码中,并支持配置纠错功能。此外,它还支持通过 `ChangeBarCodeColor()` 函数创建彩色二维码。

