Neodynamic Barcode Professional 与 IronBarcode:C# 条码库对比
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:首先构建一个 BarcodeInfo 对象,为其赋值,然后调用 GetImage() 生成一个 System.Drawing.Image 对象,并通过标准的 System.Drawing.Imaging 管道保存该对象。该 SDK 依赖于 System.Drawing,这限制了跨平台部署。
条形码读取器 SDK 是读取组件。 它接受 System.Drawing.Bitmap,并且只返回一维符号体系的结果。 该阅读器不支持二维码、DataMatrix、PDF417、Aztec 以及所有其他二维格式。 当提交二维条形码时,SDK 不返回任何结果——它不会抛出异常,而只是生成一个空的结果集。 使用 Neodynamic 产品构建生成工作流程后发现此限制的团队会发现,恢复 2D 读取功能需要添加 Neodynamic 生态系统之外的第三个库。
新动态条形码的关键架构特征:
-生成和读取分别使用不同的产品:使用这两种功能的项目需要两个NuGet包、两次购买和两个许可证密钥。
-生成二维码却无法读取二维码:条码ProfessionalSDK 可以生成 QR 码、DataMatrix、PDF417 和 Aztec 格式,但配套的条码阅读器 SDK 无法读取这些格式中的任何一种。
-基于实例的生成 API:生成需要构造一个 BarcodeInfo 对象并分配属性,然后再调用 GetImage()。
- System.Drawing 依赖项:两个 SDK 都依赖于
System.Drawing,这限制了在 Linux 和容器环境中部署,除非进行额外的配置。 -仅支持一维条码读取范围:条码阅读器 SDK 支持 Code 128、EAN-13、UPC-A、Code 39、Codabar、Interleaved 2 of 5 和 MSI/Plessey。 不包含2D格式。 -不支持原生 PDF:两个 SDK 都不能直接从 PDF 文档中读取条形码; 需要单独的图像提取步骤。 -不支持自动格式检测:读取器根据其支持的格式而不是图像内容来推断格式。
拆分式 SDK 架构
购买了两个 Neodynamic SDK 的项目必须在启动时配置两个独立的许可证块。这两个许可证块 LicenseOwner 和 LicenseKey 使用不同的命名空间和类名,并且彼此之间互不感知:
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeInfo.LicenseOwner = "Company";
BarcodeInfo.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)
BarcodeInfo.LicenseOwner = "Company";
BarcodeInfo.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)
BarcodeInfo.LicenseOwner = "Company"
BarcodeInfo.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包、一个许可证密钥和一个配置块涵盖所有条形码操作。
-统一的一维和二维支持:同一个 API 可以读取和生成 Code 128、EAN-13、QR Code、DataMatrix、PDF417、Aztec 和 50 多种其他符号体系。
-静态流畅 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 2.0 | 是 | 是 | 是 |
| .NET 8 / .NET 9 | 是 | 有限的 | 是 |
| 需要NuGet包 | 每件产品1件 | 每件产品1件 | 共 1 人 |
| 需要许可证密钥 | 每件产品1件 | 每件产品1件 | 共 1 人 |
阅读格式支持
这两个 Neodynamic SDK 和IronBarcode之间的读取格式差异是本次比较中最显著的技术差异。
新动力学条码阅读器方法
Neodynamic条码阅读器仅支持线性条码。 当向读取器提交二维条形码时,SDK 返回空结果集或 null 结果集。 没有引发异常,也没有错误消息表明发生了什么。 使用此 SDK 的团队通常会在部署调用读取器读取二维码图像的代码后发现此限制,并观察到结果集合始终为空。
在使用 Neodynamic Reader 的代码库中,一种常见的防御模式是显式检查,当预期为 2D 格式时引发异常:
// 新动力条形码阅读器 SDK: QR code reading is not supported
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var results = BarcodeReader.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;
}
// 新动力条形码阅读器 SDK: QR code reading is not supported
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var results = BarcodeReader.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 results = BarcodeReader.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 是基于实例的。 构造一个 BarcodeInfo 对象,分别赋值其属性,并调用 GetImage() 返回一个 System.Drawing.Image。 然后使用 System.Drawing.Imaging.ImageFormat 枚举保存图像:
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeInfo.LicenseOwner = "Your Company";
BarcodeInfo.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeInfo();
barcode.Value = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.TextAlign = BarcodeTextAlignment.BelowCenter;
barcode.Dpi = 300;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeInfo.LicenseOwner = "Your Company";
BarcodeInfo.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeInfo();
barcode.Value = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.TextAlign = BarcodeTextAlignment.BelowCenter;
barcode.Dpi = 300;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Neodynamic.SDK.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging
' Configure license first
BarcodeInfo.LicenseOwner = "Your Company"
BarcodeInfo.LicenseKey = "YOUR-KEY"
' Build the barcode through property assignment
Dim barcode As New BarcodeInfo()
barcode.Value = "12345678"
barcode.Symbology = Symbology.Code128
barcode.TextAlign = BarcodeTextAlignment.BelowCenter
barcode.Dpi = 300
' Get image and save via System.Drawing
Dim image As Image = barcode.GetImage()
image.Save("output.png", 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")
对于二维条形码生成,专用的 QRCodeWriter 类提供了特定于二维码的其他选项:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High)
.SaveAsPng("qrcode.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High)
.SaveAsPng("qrcode.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.High) _
.SaveAsPng("qrcode.png")
有关生成具有尺寸和注释选项的一维条码的指导,请参阅创建一维条码指南。 有关二维条码的创建(包括 DataMatrix 和 PDF417),请参阅二维条码创建指南。
许可和产品结构
对于构建既需要生成又需要读取的系统而言,许可模式是两种选择之间最实际的区别之一。
新动力学方法
Neodynamic 的条形码功能分为两个独立授权的产品。 条码ProfessionalSDK 涵盖条码生成,条码读取器 SDK 涵盖条码读取。 每款产品都需要单独购买,并配有单独的许可证密钥。 购买这两款产品的团队必须维护两个 LicenseOwner / LicenseKey 配置块,跟踪两个不同的续订日期,并在出现问题时处理两个不同的支持渠道。
条形码ProfessionalSDK 的单开发者许可证价格约为 245 美元。 条形码读取器 SDK 需要单独付费。因此,一个既需要生成条形码又需要读取一维条形码的项目,对于单个开发人员来说,总支出可能接近或超过 500 美元。 需要 2D 读取的项目,无论价格如何,Neodynamic 产品都无法满足这一要求——必须添加第三个库。 请参阅IronBarcode支持的条形码格式页面,了解单个统一许可证涵盖的完整列表。
IronBarcode方法
IronBarcode作为一款单一产品出售,它涵盖所有条码操作——生成和读取所有支持的条码符号——只需一个许可证密钥即可完成。 没有单独的阅读器许可证,没有单独的生成器许可证,2D 格式支持也不收取额外费用。 许可证密钥在应用程序启动时设置一次,无需其他配置:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
IronBarcode Lite单个开发者版本售价为 749 美元,涵盖所有功能。 有关当前定价等级和批量选项,请参阅IronBarcode许可页面。
API 映射参考
| 新动态 API | IronBarcode等效物 | 备注 |
|---|---|---|
BarcodeInfo.LicenseOwner = "..." |
IronBarCode.License.LicenseKey = "key" |
单把钥匙即可取代所有者钥匙对。 |
BarcodeInfo.LicenseKey = "..." |
(part of single key above) | 没有单独的所有者字段 |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner |
(removed) | 不要求 |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey |
(removed) | 不要求 |
new BarcodeInfo() |
BarcodeWriter.CreateBarcode(data, encoding) |
静态方法,无实例 |
barcode.Value = data |
CreateBarcode 的第一个参数 |
施工期间通过 |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 |
第二个参数 |
barcode.Symbology = Symbology.QRCode |
BarcodeEncoding.QRCode |
全程支持往返行程 |
barcode.GetImage().Save(path, ImageFormat.Png) |
.SaveAsPng(path) |
Fluent,没有 ImageFormat 枚举 |
BarcodeReader.Read(bitmap) |
BarcodeReader.Read(imagePath) |
文件路径替换位图对象 |
result.Value |
result.Value |
相同的属性名称 |
throw new NotSupportedException(...) 用于二维码 |
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。 必须从 .csproj 文件中删除这两个指令,并且必须从源文件中删除相应的 using 指令。 对每个运行 dotnet remove package 就足够了; 两者之间没有需要额外清理的共享依赖项。
双许可证配置清理
两个许可证配置块——一个用于 BarcodeInfo,一个用于 Neodynamic.SDK.BarcodeReader.BarcodeReader——都被一个 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 版本,包括 .NET 8 和 .NET 9。该库不依赖于 System.Drawing,这意味着它无需修改即可在 Linux 和 Docker 容器中运行。 由于 Neodynamic 条形码阅读器 SDK 对 .NET 8 和 .NET 9 的兼容性受到 System.Drawing 依赖项的限制,以及该依赖项在非 Windows 环境中需要的额外本机库配置,因此其兼容性受到限制。 IronBarcode会定期更新,与.NET 的发布节奏保持一致,并且作为积极开发的一部分,它始终保持与.NET 10(预计于 2026 年底发布)的兼容性。
结论
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()` 函数创建彩色二维码。

