IRONSOFTWAREHOME
与其他组件比较

Neodynamic Barcode vs IronBarcode:拆分SDK架构和格式支持比较

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

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 对象,分配其 CodeSymbology 属性,并调用 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";

这种模式在每个环境(开发、测试和生产)中都会重复出现,并且每当产品升级或更新时都必须保持这种模式。

了解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;
}

仅使用 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;
}

调用者未指定预期格式。 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);

该 SDK 提供合法的自定义选项,包括 DPI 控制、文本对齐、颜色设置和静默区大小。 这些功能对于需要精确物理尺寸的打印工作流程非常有用。 发电能力本身是完整的; 促使人们迁移的限制因素在于阅读方面,而不是生成方面。

IronBarcode方法

IronBarcode采用流畅的静态方法。 编码和数据作为参数传递给BarcodeWriter.CreateBarcode(),输出格式在返回的对象上以方法名表示。 无需System.Drawing导入:

using 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");

有关生成具有尺寸和注释选项的一维条码的指导,请参阅创建一维条码指南。 有关二维条码的创建(包括 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 Lite单个开发者版本售价为 749 美元,涵盖所有功能。 有关当前定价等级和批量选项,请参阅IronBarcode许可页面

API 映射参考

新动态 APIIronBarcode等效物备注
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 = dataCreateBarcode的第一个参数施工期间通过
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128第二个参数
barcode.Symbology = Symbology.QRCodeBarcodeEncoding.QRCode全程支持往返行程
barcode.GetBarcodeImage().Save(path, ImageFormat.Png).SaveAsPng(path)Fluent,没有 ImageFormat 枚举
new BarcodeReader().Read(bitmap)BarcodeReader.Read(imagePath)静态方法,接受文件路径
result.Valueresult.Value相同的属性名称
throw new NotSupportedException(...) 用于 QRBarcodeReader.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.BarcodeNeodynamic.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 产品系列内部的界限是无法逾越的,无论选择哪个产品,都需要不同的库。

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 天试用密钥
无需信用卡或创建账户