如何在Blazor中使用條碼掃描器 | IronBarcode
從Spire.Barcode遷移到IronBarcode
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;
}
}
// 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;
}
}
Imports Spire.Barcode
Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}
Dim foundValue As String = Nothing
For Each type In candidates
Dim found As String() = scanner.Scan("barcode.png", type)
If found.Length > 0 Then
foundValue = found(0)
Exit For
End If
Next
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}");
}
// 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}");
}
Imports IronBarcode
' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
IronBarcodevs Spire.Barcode:功能比較
| 功能 | Spire.Barcode | IronBarcode |
|---|---|---|
| 自動格式檢測 | 否 | 是 |
| 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
# 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
如果Spire.PDF用於其他文件操作而非條碼提取,則保留其並僅移除與條碼相關的程式碼路徑。
安裝IronBarcode:
dotnet add package IronBarcode
dotnet add package IronBarcode
步驟 2:更新命名空間
將所有Spire名稱空間導入替換為IronBarcode名稱空間:
// Remove:
using Spire.Barcode;
using Spire.Pdf;
// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;
// Add:
using IronBarCode;
Imports 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";
// 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";
' 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");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System
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]);
}
using Spire.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);
if (results.Length > 0)
{
ProcessShipment(results[0]);
}
Imports Spire.Barcode
Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)
If results.Length > 0 Then
ProcessShipment(results(0))
End If
IronBarcode 方法:
using IronBarCode;
var results = BarcodeReader.Read("shipping-label.png");
if (results.Any())
{
ProcessShipment(results.First().Value);
}
using IronBarCode;
var results = BarcodeReader.Read("shipping-label.png");
if (results.Any())
{
ProcessShipment(results.First().Value);
}
Imports IronBarCode
Dim results = BarcodeReader.Read("shipping-label.png")
If results.Any() Then
ProcessShipment(results.First().Value)
End If
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);
}
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);
}
Imports Spire.Barcode
Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
BarCodeType.Code128,
BarCodeType.QRCode,
BarCodeType.DataMatrix,
BarCodeType.EAN13,
BarCodeType.PDF417
}
Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
Dim found As String() = scanner.Scan("document-scan.png", type)
allValues.AddRange(found)
Next
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();
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();
Imports IronBarCode
' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
IronBarcode的圖像讀取在一次通過中處理所有50+種符號。 當需要為高容量批次處理調整讀取速度時,BarcodeReaderOptions提供該控制,而無需新增格式專用分支:
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim 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);
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);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging
Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel
Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = 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");
using IronBarCode;
BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("shipping-label.png");
Imports 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);
}
}
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);
}
}
Imports Spire.Pdf
Imports Spire.Barcode
Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")
Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()
For Each page As PdfPageBase In pdf.Pages
Dim images() As Image = page.ExtractImages()
For Each image As Image In images
Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
extractedValues.AddRange(found)
Next
Next
IronBarcode 方法:
using IronBarCode;
var results = BarcodeReader.Read("invoices.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
using IronBarCode;
var results = BarcodeReader.Read("invoices.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
Imports IronBarCode
Dim results = BarcodeReader.Read("invoices.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}")
Next
IronBarcode可直接讀取PDF文件,不需要Spire.PDF或任何手動頁面管理。 每個條碼提取自的頁面號碼在結果物件中可用。 一旦替換掉PDF讀取程式碼,即可以從專案中刪除using Spire.Pdf;導入。
Spire.Barcode API到IronBarcode映射參考
| Spire.Barcode | IronBarcode | 注意事項 |
|---|---|---|
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.X |
BarcodeEncoding.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;
// 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;
Imports System.Linq
' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
.Select(Function(r) r.Value) _
.ToArray()
' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.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" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
只有當所有引用都被清除時才移除該軟體包:
dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
問題4:命名空間變更
Spire.Barcode:BarCodeType。 BarcodeReaderOptions。
解決方案:用全域方式將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" .
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" .
- 記錄所有包含
BarCodeType候選陣列的文件(要移除的型別猜測迴圈) - 標識接收
string[]變數 - 確認
Spire.PDF是否用於非條碼提取的操作
程式碼更新任務
- 移除
Spire.BarcodeNuGet包 - 如果條碼提取是其唯一用途,移除
Spire.PDFNuGet包 - 安装
IronBarcodeNuGet包 - 将所有
using IronBarCode; - 删除所有不再需要的
using Spire.Pdf;导入 - 替換許可證初始化:
IronBarCode.License.LicenseKey = "key" - 移除所有
new BarcodeScanner()實例化 - 将所有
BarcodeReader.Read(path) - 刪除型別猜測foreach迴圈; 用單一
BarcodeReader.Read()調用替換 - 刪除PDF頁面迭代和圖像提取塊; 用
BarcodeReader.Read("file.pdf")替換 - 更新
.Select(r => r.Value).ToArray() - 用
new BarcodeSettings()块 - 移除
new BarCodeGenerator(settings)實例化 - 用
.GenerateImage()+image.Save() - 用
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.Barcode遷移至IronBarcode?
常見的理由包括簡化授權(去除SDK +運行時鑰匙的複雜性)、消除吞吐量限制、獲得原生PDF支持、改善Docker/CI/CD部署,並減少生產程式碼中的API樣板。
如何用IronBarcode替換Spire.Barcode API呼叫?
用IronBarCode.License.LicenseKey = "key"替換實例建立和授權樣板。用BarcodeReader.Read(path)替換讀取呼叫,用BarcodeWriter.CreateBarcode(data, encoding)替換寫入呼叫。靜態方法不需要實例管理。
從Spire.Barcode遷移至IronBarcode時需要多少程式碼更改?
大多數遷移會導致較少的程式碼行。授權樣板、實例構造函式和顯式格式配置被移除。核心讀/寫操作映射為較短的IronBarcode等價物,且結果物件更清晰。
遷移期間,我需要同時安裝Spire.Barcode和IronBarcode嗎?
不需要。大多數遷移是直接替換而不是並行操作。一次遷移一個服務類,替換NuGet引用,並更新實例化和API呼叫模式後再移動到下一個類。
IronBarcode的NuGet包名稱是什麼?
包名是'IronBarCode'(大寫B和C)。可以用'Install-Package IronBarCode'或'dotnet add package IronBarCode'安裝。程式碼中的using指令是'using IronBarCode;'。
IronBarcode相比Spire.Barcode如何簡化Docker部署?
IronBarcode是沒有外部SDK文件或掛載許可配置的NuGet封裝。在Docker中,設置IRONBARCODE_LICENSE_KEY環境變數,包在啟動時處理許可驗證。
從Spire.Barcode遷移後,IronBarcode會自動檢測所有條碼格式嗎?
是的。IronBarcode自動檢測所有支持的格式的符號學。不需要顯式的BarcodeTypes枚舉。如果格式已經知道並且性能很重要,BarcodeReaderOptions允許限制搜索空間作為優化。
IronBarcode是否可以不使用單獨的庫讀取PDF中的條碼?
可以。BarcodeReader.Read("document.pdf")原生處理PDF文件。結果包括每個條碼發現的頁碼、格式、值和置信度。不需要外部PDF渲染步驟。
IronBarcode如何處理並行條碼處理?
IronBarcode的靜態方法是無狀態且執行緒安全的。直接使用Parallel.ForEach遍歷文件列表,不需要每個執行緒的實例管理。BarcodeReaderOptions.MaxParallelThreads控制內部執行緒預算。
從Spire.Barcode遷移至IronBarcode後,哪些結果屬性會改變?
常見的重命名:BarcodeValue變為Value,BarcodeType變為Format。IronBarcode結果還新增了Confidence和PageNumber。整個解決方案的搜索和替換可處理現有結果處理程式碼中的重新命名。
我如何在CI/CD管道中設置IronBarcode授權?
將IRONBARCODE_LICENSE_KEY作為管道機密儲存,在應用程式啟動程式碼中分配IronBarCode.License.LicenseKey。一個機密涵蓋所有環境,包括開發、測試、分期和生產。
IronBarcode是否支持生成帶有自定義樣式的QR碼?
支持。QRCodeWriter.CreateQrCode()支持通過ChangeBarCodeColor()自定義顏色,通過AddBrandLogo()嵌入logo,可配置錯誤校正級別,以及包括PNG、JPG、PDF和流在內的多種輸出格式。

