IRONSOFTWAREHOME
影片

從Neodynamic Barcode遷移到IronBarcode

Curtis Chau
Curtis Chau
Updated: 2026年8月1日

本指南提供了從Neodynamic.SDK.BarcodeReader遷移到IronBarcode的完整路徑。 它涵蓋了移除兩個Neodynamic套件,將雙重授權配置替換為單一金鑰,翻譯生成和讀取API呼叫,以及獲得Neodynamic產品集無法實現的2D條碼讀取能力的過程。 本指南是為已有Neodynamic程式碼的開發者撰寫的,需要逐個文件的系統方法來完成遷移。

為什麼要從Neodynamic Barcode遷移

**2D讀取缺口:**Neodynamic Barcode Professional SDK生成QR碼、DataMatrix、PDF417和Aztec條碼。 上述格式都無法由附帶的條碼讀取器SDK讀取。 生成產品標籤、運輸容器或文件跟踪的QR碼的項目無法通過與生成程式一起購買的讀取器讀回這些相同的碼。 IronBarcode通過同一個程式庫和同一個授權來讀取和生成QR碼、DataMatrix、PDF417、Aztec以及其他所有支持的2D格式。

**雙產品開銷:**所有使用這兩個Neodynamic SDK的項目都有兩個using指令、兩個授權塊和兩個單獨的更新週期。 此開銷在每個開發者機器、每個CI管線和每個生產環境中重複。 將具有單獨維護需求的兩個套件合併為具有單一依賴和單一授權的單一依賴,是此次遷移機械性的結果。

**第三庫問題:**遇到2D讀取缺口的團隊選擇解決該問題而非遷移,通常會新增第三個庫——ZXing.Net是最常見的選擇——專門為了覆蓋QR碼讀取。 這一決定將一個限制交換為另一個複雜性:三個與條碼相關的依賴,每個都有自己的版本約束、自己的版本說明,並在.NET運行時或依賴框架升級時都有可能引發衝突。 IronBarcode取代了所有三個。

**定價複雜性:**Neodynamic Barcode Professional SDK的定價按開發者計費(Basic約為$352,Ultimate通過ComponentSource約為$705)。 條碼讀取器SDK單獨收費。需要同時生成和1D讀取的項目必須購買兩者,且總成本會隨著團隊規模在讀取器費用的基礎上增長。 需要2D讀取的項目仍然無法在任何價格範圍內滿足Neodynamic產品家族的要求。IronBarcodeLite涵蓋了生成和讀取—1D和2D—在單一授權下。 當前價格在IronBarcode授權頁面上。

基本問題

用於完整條碼工作流程的任何程式碼庫中使用這兩個Neodynamic SDK的核心問題是始終無法讀取QR碼:

// Before: Neodynamic Barcode讀取器 does not support QR codes
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 are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
C#

遷移到IronBarcode後,相同操作變成標準讀取呼叫,無需格式專用處理:

// After:IronBarcodereads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
C#

對參考2D條碼讀取的每個throw new NotSupportedException(...)佔位符在此遷移期間被移除並替換為正常運行的讀取呼叫。

IronBarcode與Neodynamic Barcode:功能比較

功能Neodynamic Barcode專業版Neodynamic Barcode讀取器IronBarcode
Code 128、EAN-13、UPC-A生成N/A
QR碼、DataMatrix、PDF417生成N/A
1D 條碼讀取N/A
QR碼讀取N/A
DataMatrix 讀取N/A
PDF417 讀取N/A
原生PDF條碼讀取
自動格式檢測N/A
需要的NuGet套件111(涵蓋兩者)
需要授權金鑰11(單獨)1(涵蓋所有)
System.Drawing依賴
Linux / Docker 支援有限有限
.NET 8 / .NET 9 支援有限
異步批量讀取

快速開始:Neodynamic Barcode遷移到IronBarcode

步驟1:移除兩個Neodynamic套件

必須移除兩個套件。 它們之間沒有影響移除順序的共享依賴:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

在繼續之前,請確認.csproj文件中兩個條目都已刪除。

步驟2:新增IronBarcode

dotnet add package IronBarcode
SHELL

步驟3:替換雙重授權配置

移除兩個Neodynamic授權塊,並用單個IronBarcode金鑰分配替換它們。 此分配在應用程式啟動時進行一次—在Startup.cs或應用程式組合根中:

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

包含Neodynamic授權金鑰的任何配置文件、環境變數或機密儲存可在驗證遷移後退役。

程式碼遷移範例

生成一個Code 128條碼

Neodynamic方法:

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}

IronBarcode 方法:

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}

不再需要System.Drawing.Imaging導入。 BarcodeInfo實例及其屬性分配合併為單一方法調用。 有關尺寸、註解和輸出格式選項,請參閱建立1D條碼指南

生成QRCode

Neodynamic方法:

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}

IronBarcode 方法:

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}

生成翻譯僅更改API介面。 此遷移引入的關鍵差異是相同的應用程式現在也可以讀取其生成的QR code,通過相同的IronBarcode程式庫和相同的授權。 關於2D條碼建立的全面說明,請參閱建立2D條碼指南

讀取1D條碼

Neodynamic方法:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}

IronBarcode 方法:

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}

移除了System.Drawing導入。 IronBarcode直接接受文件路徑。 兩個API中的result.Value屬性名稱相同,因此處理返回值的下游程式碼不會更改。 關於多條碼圖像讀取和預處理選項,請參閱從圖像讀取條碼指南

讀取QR碼(以前不可能)

Neodynamic方法:

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}

IronBarcode 方法:

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}

每一個參考2D條碼讀取的throw new NotSupportedException(...)佔位符都成為標準讀取呼叫。 方法體從拋出的異常更改為有效的實現。 QR碼不需要特殊處理; IronBarcode自動識別格式。

從PDF文件讀取條碼(新功能)

Neodynamic方法:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
//否direct equivalent exists
C#

IronBarcode 方法:

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}

IronBarcode直接從所有頁面的PDF文件中讀取條碼。 返回的結果中包含找到條碼的頁碼。 此功能不需要額外的程式庫和中間圖像提取步驟。

Neodynamic Barcode API到IronBarcode映射參考

Neodynamic APIIronBarcode等效注意事項
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 = dataCreateBarcode的第一個參數在構造時傳遞
barcode.Symbology = Symbology.Code128BarcodeEncoding.Code128第二個參數
barcode.Symbology = Symbology.QRCodeBarcodeEncoding.QRCode現在支持完整往返
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.HQRCodeWriter.QrErrorCorrectionLevel.Highest不同的類入口點
barcode.GetImage().Save(path, ImageFormat.Png).SaveAsPng(path)流暢,無ImageFormat枚舉
BarcodeReader.Read(bitmap)BarcodeReader.Read(imagePath)文件路徑替代Bitmap
result.Valueresult.Value相同的屬性名稱
Symbology.DataMatrixBarcodeEncoding.DataMatrix生成僅→生成和讀取
throw new NotSupportedException(...) 用於2D讀取BarcodeReader.Read(imagePath)替換為有效的實現

常見遷移問題及解決方案

問題1:兩個套件的移除順序

**問題:**只移除一個Neodynamic套件而留下另一個會引起編譯錯誤,因為這兩個SDK不共享型別,但某些源文件可能在同一個文件中導入兩個命名空間。

**解決方案:**在進行任何源程式碼更改之前移除兩個套件。 在移除後,搜尋所有using Neodynamic.SDK.BarcodeReader指令並一同移除它們:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

然後審核:

grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

問題2:雙重授權配置清理

**問題:**兩個Neodynamic授權塊通常出現在不同的位置—一個在應用啟動類中,另一個在服務初始化程式中。 如果僅刪除一個塊,剩下的程式碼會引用一個不再存在的命名空間,並且無法編譯。

**解決方案:**搜尋所有四個Neodynamic授權屬性分配,並在新增IronBarcode鍵之前一同移除它們:

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

用單一分配替換所有四行:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

問題3:從Catch塊中移除NotSupportedException

**問題:**某些使用Neodynamic閱讀器的程式碼庫專門新增catch (NotSupportedException)塊來處理2D條碼讀取的靜默失敗。 那些捕獲塊必須與拋出的程式碼一起移除; 否則,捕獲語句引用一個不再可能發生的程式碼路徑。

**解決方案:**在條碼相關文件中搜尋NotSupportedException並審查每個出現。 如果異常是為響應2D格式讀取嘗試而引發的,則移除拋出的內容和捕獲:

grep -r "NotSupportedException" --include="*.cs" .
SHELL

BarcodeReader.Read(imagePath)替換拋出的方法體,並從任何調用者中移除相應的捕獲條款。

Neodynamic Barcode遷移清單

遷移前

  • 搜尋所有Neodynamic套件參考:grep -r "Neodynamic.SDK" --include="*.csproj" .
  • 搜尋所有Neodynamic使用指令:grep -r "using Neodynamic" --include="*.cs" .
  • 搜尋授權配置位置:grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
  • 搜尋所有grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • 搜尋所有Neodynamic讀取呼叫:grep -r "BarcodeReader.Read" --include="*.cs" .
  • 搜尋條碼路徑中所有grep -r "NotSupportedException" --include="*.cs" .
  • 確認任何專門為覆蓋2D讀取缺口而新增的第三方庫(ZXing.Net或類似庫)—可以在遷移後移除
  • 記錄所有Neodynamic授權鍵,以便在驗證後從機密儲存中退役

程式碼更新任務

  1. 運行dotnet remove package Neodynamic.SDK.Barcode
  2. 運行dotnet remove package Neodynamic.SDK.BarcodeReader
  3. 運行dotnet add package IronBarcode
  4. 移除所有using Neodynamic.SDK.BarcodeReader指令
  5. 在所有執行條碼操作的文件中新增using IronBarCode
  6. 移除兩個Neodynamic授權配置塊
  7. 在應用啟動時新增IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
  8. new BarcodeInfo() + 屬性分配 + barcode.GetImage().Save(...)
  9. 使用QRCodeWriter模式
  10. 通過移除BarcodeReader.Read(bitmap)呼叫
  11. 移除所有用於2D讀取的BarcodeReader.Read(imagePath)
  12. 從調用者中移除相應的catch (NotSupportedException)
  13. 移除任何僅為了覆蓋Neodynamic 2D讀取缺口而新增的第三方庫

遷移後測試

  • 驗證Code 128條碼生成是否產生與先前尺寸和DPI設置相匹配的輸出
  • 驗證QR Code生成是否產生可掃描輸出
  • 驗證1D條碼讀取返回的值是否與先前Neodynamic讀取器實現的相同
  • 驗證QR Code讀取在以前引發NotSupportedException的圖像上是否成功
  • 驗證DataMatrix和PDF417讀取是否成功(如果應用程式輸入中出現這些格式)
  • 測試PDF條碼讀取(如果應用程式處理PDF文件)
  • 確認配置文件和環境變數中徹底移除了Neodynamic授權鍵參考
  • 確認已完全移除任何第三方2D庫(如果存在),無剩餘的導入引用它

遷移到IronBarcode的主要優勢

**統一讀寫能力:**遷移後,IronBarcode能生成的每一個符號可以通過相同的程式庫讀回。 消除了Neodynamic的生成器和讀取器之間的不對稱性——QR碼、DataMatrix、PDF417和Aztec可以生成但不能讀取。 以前需要為2D讀取使用變通辦法或第三方庫的應用程式在不需要任何額外整合工作的情況下獲得該能力。

**單一授權管理:**一個NuGet包、一個授權鍵和一個配置塊取代了兩個單獨的產品訂閱。 更新、金鑰輪替和環境變數管理的複雜性降低了一半。 管理開銷的減少是持續性的,而不是一次性獲利。

**原生PDF條碼讀取:**IronBarcode直接從PDF文件中讀取條碼,返回頁碼元資料和條碼值一起。 處理包含嵌入條碼的運單、發票文件或醫療記錄的應用程式不再需要中間圖像提取步驟或額外PDF庫來支持條碼讀取。 查看完整的支持的條碼格式列表,了解涵蓋的符號集和輸入型別的完整集合。

**刪除System.Drawing依賴:**Neodynamic的SDK依賴於System.Drawing,這在Linux和Docker容器中需要額外的原生庫配置。 IronBarcode不具有System.Drawing的依賴,這意味著相同的程式碼庫在Windows、Linux和容器化雲環境中運行,而無需平台特定的配置更改。

**簡化的授權成本,提供完整功能:**需要兩個Neodynamic SDK加上第三個庫來進行2D讀取的項目,正在支付三個依賴來完成IronBarcode在單一授權下提供的 對於需要生成加上2D讀取的項目,遷移將技術影響和授權成本都整合到單一商業產品中。 當前定價資訊可在IronBarcode授權頁面上查閱。

請注意: Neodynamic和ZXing.NET是其各自所有者的註冊商標。 本網站與Neodynamic或ZXing.NET無關,並未獲得其認可或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。
Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

...
閱讀更多

相關文章

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天試用金鑰
無需信用卡或帳戶建立