IRONSOFTWAREHOME
影片

從Spire.Barcode遷移到IronBarcode

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

Spire.Barcode的BarCodeType參數。 隨著程式碼庫擴展以處理不同的文件來源、新供應商標籤和新條碼格式,這種設計會產生型別猜測迴圈,隨著時間的推移累積維護成本。本指南涵蓋從Spire.Barcode到IronBarcode的完整路徑:團隊進行此過渡的原因,執行此過程的機械步驟,以及每種常見操作的遷移前和遷移後的程式碼模式。

為什麼要從Spire.Barcode遷移

**格式規範開銷:**對Spire.Barcode中BarCodeType列舉值。 從未知或混合格式來源處理條碼的應用程式必須維護可能型別的候選列表,並迭代它直到找到匹配。 每新增一種格式到工作流程都需要更新候選陣列、重新測試檢測邏輯,並確認迭代順序不會導致一種格式遮蔽另一種格式。 此開銷隨著格式多樣性的增加而增長。

**免費層評估限制:**FreeSpire.Barcode有意降低讀取性能,並限制相較於商業產品的可用符號集。 在FreeSpire.Barcode評估期間進行的基準測試和格式覆蓋測試不代表商業版Spire.Barcode的行為。 基於免費層評估而承諾購買的團隊可能會在購買後發現產品在生產環境中表現不同,特別是在吞吐量和支持的符號方面。

**需要兩個程式庫的PDF:**Spire.Barcode無法直接從PDF文件中讀取條碼。 基於PDF的工作流程需要一個具備自己授權的Spire.PDF包裹,外加開發者編寫的程式碼來迭代頁面,從每頁提取圖像,並將這些圖像提供給條碼掃描器。 一個概念上屬於條碼讀取的任務被拆分到兩個產品、兩個授權協議以及大量基礎設施程式碼中。

返回型別複雜性:string[],其中僅包含解碼值。 檢測到的條碼格式不包括在返回值中。 需要根據格式路由結果(例如,將QR碼值發送到一個處理器,將Code128值發送到另一個處理器)的應用程式必須維護一個單獨的型別變數,衍生自產生結果的迭代步驟,這超出了掃描本身的狀態管理需求。

基本問題

型別猜測迴圈是必須的BarCodeType約束的最明顯症狀。 在處理多個來源文件的Spire.Barcode程式碼庫中,這種模式反覆出現:

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}

IronBarcode完全移除了這種迴圈。 格式檢測內建於程式庫中:

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

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

##IronBarcodevs Spire.Barcode:功能比較

功能Spire.BarcodeIronBarcode
自動格式檢測
BarCodeType參數必需
結果中包含格式元資料
原生PDF讀取否(需要Spire.PDF)
為PDF附加程式庫Spire.PDF(單獨授權)None
免費層讀取性能有意降低全速
免費層水印大的,覆蓋整個條碼小的,僅邊緣
免費層符號集約20種50+種
免費層註冊
生成API模型設置物件 + 生成器靜態工廠帶流暢鏈
自定義標誌QR碼僅商業層所有層
讀取的返回型別string[]BarcodeResults(包含型別元資料)
符號數39+(商業)50+
授權模型每席位永久授權+訂閱永久授權,選擇性續期

快速開始

步驟 1:替換 NuGet 包

移除當前使用的Spire包或包:

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

如果Spire.PDF用於其他文件操作而非條碼提取,則保留其並僅移除與條碼相關的程式碼路徑。

安裝IronBarcode:

dotnet add package IronBarcode
SHELL

步驟 2:更新命名空間

將所有Spire名稱空間導入替換為IronBarcode名稱空間:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;

步驟 3:初始化授權

將Spire授權初始化替換為應用啟動時的單個IronBarcode屬性分配。請參閱IronBarcode授權頁面以獲取金鑰格式和部署選項:

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

對於Docker和CI環境,授權金鑰可從環境變數提供:

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");

程式碼遷移範例

讀取已知格式的條碼

在Spire.Barcode中,單一格式讀取通過明確傳遞型別並獲得string[]

Spire.Barcode方法:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}

IronBarcode 方法:

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}

BarCodeType參數被移除。 如果下游邏輯需要確認檢測到的格式,results.First().Format提供了它,而不需要單獨的狀態變數。

折疊混合格式型別迴圈

當一個Spire.Barcode程式碼庫處理可能包含多種格式的文件時,隨著新的格式進入工作流程,型別猜測迴圈會累積。

Spire.Barcode方法:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}

IronBarcode 方法:

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();

IronBarcode的圖像讀取在一次通過中處理所有50+種符號。 當需要為高容量批次處理調整讀取速度時,BarcodeReaderOptions提供該控制,而無需新增格式專用分支:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);

關於選擇合適的ReadingSpeed值的指導,請參閱讀取速度選項文件

生成條碼

Spire.Barcode生成需要實例化GenerateImage()

Spire.Barcode方法:

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);

IronBarcode 方法:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");

可變的BarCodeGenerator實例由單個靜態工廠調用替換,配以流暢鏈。 沒有設置在並發調用間意外共享的風險,因為每次CreateBarcode()調用都是獨立的。

從PDF文件中讀取條碼

Spire.Barcode無法直接讀取PDF。 Spire基方法需要單獨的Spire.PDF包打開文件、迭代其頁面、從每個頁面提取點陣圖像,然後將這些圖像逐一傳遞給條碼掃描器。

Spire.Barcode方法:

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}

IronBarcode 方法:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

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

IronBarcode可直接讀取PDF文件,不需要Spire.PDF或任何手動頁面管理。 每個條碼提取自的頁面號碼在結果物件中可用。 一旦替換掉PDF讀取程式碼,即可以從專案中刪除using Spire.Pdf;導入。

Spire.Barcode API到IronBarcode映射參考

Spire.BarcodeIronBarcode注意事項
new BarcodeScanner()BarcodeReader.Read()(靜態)不需要掃描器實例
scanner.Scan(path, BarCodeType.X)BarcodeReader.Read(path)型別參數移除
BarCodeType.Code128(必需)自動檢測沒有等效要求
BarCodeType.QRCode(必需)自動檢測沒有等效要求
Scan()BarcodeResults集合通過.Value存取值
results[0](字串)results[0].Value
結果上未知格式result.Format結果物件中包含型別
new BarcodeSettings()CreateBarcode()上的參數不需要設置物件
settings.Type = BarCodeType.XBarcodeEncoding.X作為第二個參數
settings.Data = "value"CreateBarcode()的第一個參數
new BarCodeGenerator(settings)不需要靜態工廠替換它
generator.GenerateImage().SaveAsPng() / .SaveAsJpeg()格式專用輸出方法
BarcodeSettings.ApplyKey("key")IronBarCode.License.LicenseKey = "key"啓動時設定一次
Spire.License.LicenseProvider.SetLicenseKey("key")IronBarCode.License.LicenseKey = "key"同樣的單行替換
Spire.PDF(用於PDF讀取)不需要內建原生PDF支持

常見遷移問題及解決方案

問題1:BarCodeType參數移除

Spire.Barcode:scanner.Scan(path, BarCodeType.Code128)—方法簽名要求一型別參數。 移除它會導致編譯錯誤。

**解決方案:**使用BarcodeReader.Read(path)替換整個調用。 在程式碼庫中搜索BarCodeType.以找到每個出現的地方。 猜測型別的迴圈(foreach塊在BarCodeType[]候選陣列上迭代)可以全部刪除; 單個BarcodeReader.Read()調用替換迴圈。

問題2:string[]返回型別

Spire.Barcode:string[]。 將其分配給string[]的方法的下游程式碼將在遷移後無法編譯。

**解決方案:**更新調用站點以處理BarcodeResults。 要獲取簡單的字串陣列,請使用.Select(r => r.Value).ToArray()。 要存取第一個結果,請使用.First()?.Value。 如果需要在下游使用檢測到的格式,可以通過.Format在結果物件上獲得—不需要單獨的狀態變數。

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;

問題3:Spire.PDF包清理

**Spire.Barcode:**PDF讀取工作流依賴於Spire.PDF進行頁面存取和圖像提取。 項目引用了該包,幷包含PdfDocument / PdfPageBase使用,分散在多個文件中。

**解決方案:**在用Spire.Pdf引用,然後才移除該軟體包:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

只有當所有引用都被清除時才移除該軟體包:

dotnet remove package Spire.PDF
SHELL

問題4:命名空間變更

Spire.Barcode:BarCodeTypeBarcodeReaderOptions

**解決方案:**用全域方式將using IronBarCode;。 用于生成的BarcodeEncoding。 在讀取過程中使用的BarCodeType枚舉沒有IronBarcode等效項—它被簡單地移除,因爲格式檢測是自動化的。

Spire.Barcode遷移清單

遷移前任務

在修改之前,審查程式碼庫以識別所有Spire.Barcode的使用:

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • 記錄所有包含BarCodeType候選陣列的文件(要移除的型別猜測迴圈)
  • 標識接收string[]變數
  • 確認Spire.PDF是否用於非條碼提取的操作

程式碼更新任務

  1. 移除Spire.Barcode NuGet包
  2. 如果條碼提取是其唯一用途,移除Spire.PDF NuGet包
  3. 安装IronBarcode NuGet包
  4. 将所有using IronBarCode;
  5. 删除所有不再需要的using Spire.Pdf;导入
  6. 替換許可證初始化:IronBarCode.License.LicenseKey = "key"
  7. 移除所有new BarcodeScanner()實例化
  8. 将所有BarcodeReader.Read(path)
  9. 刪除型別猜測foreach迴圈; 用單一BarcodeReader.Read()調用替換
  10. 刪除PDF頁面迭代和圖像提取塊; 用BarcodeReader.Read("file.pdf")替換
  11. 更新.Select(r => r.Value).ToArray()
  12. new BarcodeSettings()
  13. 移除new BarCodeGenerator(settings)實例化
  14. .GenerateImage() + image.Save()
  15. BarCodeType.X枚舉值

遷移後測試

  • 確認通過候選迴圈之前掃描的所有格式均由BarcodeReader.Read()正确检测
  • 測量批量處理吞吐量,並確認其符合生產需求
  • 驗證PDF條碼提取產生正確的值和頁面編號
  • 使用實體或軟體掃描器確認生成條碼的輸出質量和可掃描性
  • 確認許可證密鑰在所有部署環境(本地、預制、生產、CI/CD)中正確載入
  • 從遷移前任務中運行grep審覈命令,以確認沒有Spire引用殘留

遷移到IronBarcode的主要優勢

**消除格式維護開銷:**完成遷移後,沒有候選型別列表需要維護,也沒有需要在新的條碼格式進入工作流程時更新的型別猜測迴圈。 BarcodeReader.Read()自動處理整個符號集,檢測到的格式包含在每個結果物件中,用於下游路由。

**承諾前的準確評估:**IronBarcode試用版與授權產品使用相同的二進制文件,以完整讀取速度運行,並附帶完整的符號集。 在試用評估階段進行的性能基準和格式覆蓋測試直接應用於生產。 團隊可以有信心進行購買決策,確信評估行為即為部署行為。

**單一封裝的PDF支持:**PDF檔案的條碼提取由與圖像使用相同的BarcodeReader.Read()調用處理。 不需要次級程式庫、額外授權和手動頁面迭代程式碼。 此前同時維護Spire.PDF的團隊對整個條碼工作流程降到單一依賴項。

帶格式元資料的結果物件:BarcodeResults集合中的每個條目都攜帶解碼值、檢測到的符碼、PDF輸入的來源頁碼以及來源圖像中的邊界區域。 需要根據格式進行路由、過濾或記錄的應用程式可以在結果中獲得該資訊,而無需額外的狀態管理。

簡化的生成API:BarCodeGenerator實例。 每次生成調用都是自我包含的,從而減少了並發操作之間配置外洩的風險。

**向前相容性:**IronBarcode接收與.NET運行時發布保持一致的定期更新。 隨著.NET 10在2026年逐步普及,相容性更新保證了遷移後的程式碼庫繼續構建和運行,而無需在每個新的.NET版本上進行程式庫更改。

請注意: Spire是其各自所有者的註冊商標。 此網站未與e-iceblue的任何聯繫、支持或贊助。 所有產品名稱、標誌和品牌均為其各自所有者的財產。 比較僅供資訊參考,並反映了撰寫時公開可用的資訊。
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天試用金鑰
無需信用卡或帳戶建立