NetBarcode 與 IronBarcode:C# 條碼庫對比
Scandit SDK與IronBarcode:相機管道掃描對文件導向的處理
要使用Scandit開始讀取條碼,您需設定BarcodeCaptureSettings、顯式啟用條碼格式、獲取相機、設置為框架來源,切換相機到On狀態,並啟用拍攝。 定價僅限聯絡銷售,未公佈清單價格。
這種結合——相機優先的管道模型和聯絡銷售的定價模式——影響了Scandit適合的.NET情境和不適合的情境。 對於伺服器端的文件處理,比如從上傳文件中讀取條碼的ASP.NET Core API,或處理運輸PDF的Azure Function,相機管道假設成為了摩擦而不是能力。 這個比較檢視了Scandit的架構起源以及IronBarcode如何適合其中,不同的程式庫在實踐中的差異。
了解Scandit SDK
Scandit SDK是一個為移動和邊緣計算環境構建的商業企業條碼掃描平台。 這個程式庫設計用於支援iOS、Android和MAUI裝置上的即時相機掃描,擁有專業的產品線涵蓋了擴增實境疊加、多條碼同時檢測和身份文件掃描。 Scandit主要部署於需要實體攝影機和現場使用者的場景,如移動現場工作人員、倉庫操作和零售接觸點。
這個程式庫的架構是圍繞DataCaptureContext管道配置,這統籌了相機會話、幀分析設置和條碼採集配置,形成統一的有狀態系統。 由於Scandit平台中的每條產品線——如SparkScan、MatrixScan、ID Scanning、AR Overlays和Parser——都是獨立的許可和定價通過聯絡銷售模式,任何Scandit整合的總成本在銷售會話後才能確定。
Scandit SDK的關鍵架構特性包括:
- 相機優先設計:SDK假設有實體相機和在運行的框架來源。 所有條碼讀取都是在即時影片幀上進行的,而不是在靜態文件或流上。
- 強制DataCaptureContext初始化:每次整合都從構建
DataCaptureContext並將其連接到相機實例開始,然後才能執行任何條碼工作。 - 顯式條碼格式聲明:條碼格式在捕捉會話開始前必須通過
EnableSymbologies單獨啟用。 不提供自動檢測。 - 事件驅動的結果交付:條碼結果通過事件回調(
BarcodeScanned)異步交付,而不是同步從方法調用中返回。 - 模塊化產品架構:SparkScan、MatrixScan、ID Scanning、AR Overlays和Parser是需要單獨合同項目的獨立定價功能。
- 基於報價的定價:根據Scandit的定價頁面,付費版本根據版本、裝置、掃描量和合同期限進行報價; 提供免費試用和社區版。
- 移動優先平台目標:主要支援iOS和Android。 SDK的設計範疇之外包括伺服器端、Docker和Serverless部署。
DataCaptureContext管道
每一次Scandit整合都從相機初始化序列開始,然後才能讀取條碼:
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui
var dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE");
var settings = BarcodeCaptureSettings.Create();
settings.EnableSymbologies(new HashSet<Symbology>
{
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
});
var barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings);
var camera = Camera.GetDefaultCamera();
await dataCaptureContext.SetFrameSourceAsync(camera);
await camera.SwitchToDesiredStateAsync(FrameSourceState.On);
barcodeCapture.IsEnabled = true;
Imports Scandit.DataCapture.Core.Maui
Imports Scandit.DataCapture.Barcode.Maui
' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.DataCapture.Core.Maui, Scandit.DataCapture.Barcode.Maui
Dim dataCaptureContext = DataCaptureContext.ForLicenseKey("YOUR-SCANDIT-LICENSE")
Dim settings = BarcodeCaptureSettings.Create()
settings.EnableSymbologies(New HashSet(Of Symbology) From {
Symbology.Ean13Upca,
Symbology.Ean8,
Symbology.Code128,
Symbology.QrCode
})
Dim barcodeCapture = BarcodeCapture.Create(dataCaptureContext, settings)
Dim camera = Camera.GetDefaultCamera()
Await dataCaptureContext.SetFrameSourceAsync(camera)
Await camera.SwitchToDesiredStateAsync(FrameSourceState.On)
barcodeCapture.IsEnabled = True
這個模塊中每一行都用於配置相機基礎設施。 API在這個入口點不暴露文件路徑、PDF或流參數——假設在條碼工作開始前有一台運行的相機。
理解IronBarcode
IronBarcode是一個適用於條碼讀取和生成的商業.NET程式庫。 這個程式庫是為伺服器端、桌面和雲環境設計的,在這些地方條碼資料以文件、流、位元組陣列或嵌入於PDF文件中的內容形式出現。 它的API是無狀態的——無需初始化會話物件、相機管道和無需在讀取得過程間管理持久上下文。 一個靜態調用BarcodeReader.Read接受文件路徑、流、位元組陣列或PDF並返回結果的集合。
IronBarcode作為一個單一的NuGet包發布,包含50多種1D和2D條碼格式的所有讀取和生成功能。 這個程式庫支援自動格式檢測,意味著調用者不需指定需要查找的條碼格式。 在產品頁上公佈了定價,不需要銷售會話。
IronBarcode的關鍵特性包括:
- 無狀態文件導向API:讀取從接受文件路徑、流、位元組陣列或PDF文件的單一方法調用開始。
- 自動格式檢測:支援的所有條碼格式都是自動檢測的。 顯式的條碼格式配置是可選的性能優化,而不是必需的前提。
- 原生PDF支援:多頁PDF文件直接讀取,並按頁面號編制結果索引。 不需要外部PDF渲染程式庫。
- 伺服器和雲就緒:支援ASP.NET Core、Azure Functions、Linux上的Docker和容器化部署而無需架構性的變通方案。
- 並行處理:無狀態API本質上是執行緒安全的,支持
Parallel.ForEach和異步模式用于高吞吐量批次場景。 - 條碼生成:在所有支援的條碼格式中以圖像和PDF格式生成條碼。 生成和讀取是在同一個包中包含的。
- 已公佈的永久授權:價格作為一次性永久購買的形式公佈,沒有每次掃描或每個裝置的費用。
特性比較
下面的表格突出顯示了Scandit SDK和IronBarcode之間的基本差異:
| 特性 | Scandit SDK | IronBarcode |
|---|---|---|
| 主要使用情境 | 移動實時計算機掃描 | 伺服器上的文件、流和PDF條碼讀取 |
| 需要相機 | 是 | 否 |
| PDF 條碼提取 | 不支援 | 原生支持 |
| 定價模型 | 聯絡銷售,每種產品 | 已發佈的永久層級 |
| 伺服器端處理 | 不是記錄的目標 | 主要的部署目標 |
| 符號格式配置 | 在掃描前是必需的 | 是可選的; auto-detection is default |
| 條碼生成 | 不支援 | 包含在單一包中 |
詳細特性比較
| 特性 | Scandit SDK | IronBarcode |
|---|---|---|
| 讀取 | ||
| 圖像文件讀取 | 不是記錄的目標 | 主要側重點 |
| PDF條碼提取 | 不支援 | 本機多頁 |
| 流/位元組陣列輸入 | 不支援 | 是 |
| 自動格式檢測 | 否(必須指定) | 是 |
| 1D格式(Code 128、EAN、UPC等) | 全面的(根據Scandit條碼格式文件) | 50+ |
| 2D格式(QR、DataMatrix、Aztec、PDF417) | 是 | 是 |
| 每份文件的多條碼檢測 | MatrixScan(單獨產品) | 是(單一包) |
| 損壞條碼恢復 | 不是記錄的文件處理特性 | 是(ML驅動) |
| 生成 | ||
| 條碼生成 | 不支援 | 是 |
| 輸出到圖像文件 | 不支援 | 是 |
| 輸出到PDF | 不支援 | 是 |
| 架構 | ||
| 初始化模型 | 有狀態的相機管道 | 無狀態的方法調用 |
| 結果交付 | 事件回調(異步) | 同步返回值 |
| 相機依賴性 | 需要 | 不適用 |
| 條碼格式的提前聲明 | 需要 | 可選 |
| 平台 | ||
| iOS / Android(MAUI) | 主要目標 | 程式性使用 |
| ASP.NET Core | 不是記錄的目標 | 完全支援 |
| Azure Functions / 雲端計算 | 不切實用 | 完全支援 |
| Docker / Linux伺服器 | 不支援 | 完全支援 |
| 控制台/背景服務 | 不是記錄的目標 | 完全支援 |
| 授權 | ||
| 定價透明度 | 需要聯絡銷售 | 公佈於網站 |
| 許可型別 | 年度(每種產品) | 一次性永久 |
| 每次掃描或每個裝置的費用 | 可能(列出為定價變數) | 否 |
| 單一包存取所有功能 | 否(模塊化產品) | 是 |
條碼讀取架構
這兩個程式庫之間最顯著的結構差異在於它們如何模型化輸入和輸出之間的關係。
Scandit SDK方法
Scandit實時處理相機幀。BarcodeCapture會監聽每個進入的幀中的條碼。 條碼結果通過BarcodeScanned事件異步交付。 用Scandit讀取靜態圖像文件需要調整相機管道,以將文件視為幀源——這是一個在本地不支援的工作流程,需要相當的工程努力近似。
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
// Scandit SDK: event-callback result delivery
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
{
string value = barcode.Data;
string symbology = barcode.Symbology.ToString();
ProcessBarcode(value, symbology);
}
};
Imports System
' Scandit SDK: event-callback result delivery
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
Dim value As String = barcode.Data
Dim symbology As String = barcode.Symbology.ToString()
ProcessBarcode(value, symbology)
Next
End Sub
事件驅動模型適合於連續即時掃描,條碼在影片流中不可預測地到達。 對於基於文件的處理來說,該模型引入了不必要的複雜性:輸入具有已知的完成界限,相機會話從不自然而然地終止,異步回調模式無法與請求-響應伺服器架構很好地組合。
IronBarcode方法
IronBarcode將每個輸入視為一個獨立的文件,擁有確定的結果。 BarcodeReader.Read方法接受文件路徑、流或位元組陣列,進行同步檢測,並返回結果的集合。 沒有會話要打開,沒有幀源要配置,沒有事件要訂閱。
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
// IronBarcode: direct file reading
// NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
Console.WriteLine($"{result.Value} ({result.Format})");
Imports IronBarCode
' IronBarcode: direct file reading
' NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.Value} ({result.Format})")
Next
對於從圖像讀取條碼,這個無狀態的API除了授權金鑰外不需要初始化。 格式檢測是自動的。 上面的完整程式以三行運行程式碼從圖像文件中讀取任何支援的條碼格式。
平台和部署支持
條碼庫的部署環境決定了它是否能在目標環境中運行,這與功能能力獨立。
Scandit SDK方法
Scandit的架構要求有相機硬體和可以通過本地相機API曝光的移動平台。 iOS和Android是主要的支援目標。 Windows桌面是次要目標。 ASP.NET Core、Azure Functions、Docker容器和Linux伺服器不在程式庫的設計範疇內。 DataCaptureContext假設一個運行的相機會話,這在無伺服器計算環境、容器化部署或背景處理服務中均無對應。
| 平台 | Scandit SDK |
|---|---|
| iOS / Android(MAUI) | 主要目標 |
| Windows桌面 | 二次支持 |
| ASP.NET Core | 不是記錄的目標 |
| Azure 函式 | 不切實用 |
| Docker / Linux伺服器 | 不支援 |
| 控制台/背景服務 | 不是記錄的目標 |
IronBarcode方法
IronBarcode為伺服器、雲端和容器化環境構建。 其無狀態API無需硬體依賴和平台特定的初始化要求。 將Azure Functions用於條碼處理是支援的、有文件路徑的部署方法。 Linux上docker是標準的部署目標。 ASP.NET Core端點從上傳的文件中讀取條碼表示一個核心水支撐的場景而無需架構性變通。
| 平台 | IronBarcode |
|---|---|
| iOS / Android(MAUI) | 程式性文件處理 |
| ASP.NET Core | 完全支援 |
| Azure 函式 / Lambda | 完全支援 |
| Docker / Linux伺服器 | 完全支援 |
| 控制台/背景服務 | 完全支援 |
| Blazor 伺服器 | 完全支援 |
並行批次處理
處理大量的條碼承載文件是兩個程式庫從根本上不同位置出發的常見伺服器端需求。
Scandit SDK方法
Scandit的相機管道是為一個單一相機會話服務一個單一使用者或裝置設計的。FrameSourceState模型假設一個持續的相機會話,而不是排隊等待的文件在吞吐量中處理。 將程式庫適應於處理批次文件需要為每個文件模擬一個相機會話或通過共享管道串行化文件處理,這兩者都不是支援或有效的模式。
IronBarcode方法
由於IronBarcode的BarcodeReader.Read方法是無狀態的,它本質上可安全地從多個執行緒同時調用。 併發批次處理無需特殊配置,只需定義BarcodeReaderOptions:
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
// IronBarcode: concurrent batch processing
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
MaxParallelThreads = 4
};
var files = Directory.GetFiles("./incoming/", "*.pdf");
var allResults = new ConcurrentBag<BarcodeResult>();
Parallel.ForEach(files, file =>
{
var results = BarcodeReader.Read(file, options);
foreach (var r in results)
allResults.Add(r);
});
Imports System.IO
Imports System.Collections.Concurrent
Imports System.Threading.Tasks
' IronBarcode: concurrent batch processing
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True,
.MaxParallelThreads = 4
}
Dim files = Directory.GetFiles("./incoming/", "*.pdf")
Dim allResults As New ConcurrentBag(Of BarcodeResult)()
Parallel.ForEach(files, Sub(file)
Dim results = BarcodeReader.Read(file, options)
For Each r In results
allResults.Add(r)
Next
End Sub)
有關異步多執行緒條碼讀取的詳細模式,IronBarcode文件涵盖了執行緒安全模式和吞吐量調整選項。
PDF文件處理
PDF條碼提取是一種獨特的能力,與基於圖像的讀取不同,代表了兩個程式庫之間的重大分歧。
Scandit SDK方法
Scandit不支持本地PDF。 使用Scandit從PDF中提取條碼需要使用單獨的PDF渲染程式庫將每個PDF頁面渲染為光柵圖像,然後將這些圖像通過相機模擬管道。這種方法增加了額外的依賴性、額外的許可是和對於例行文件處理工作流程的顯著工程努力。 對於多頁文件,需要迭代頁面、為渲染的圖像管理記憶體,並手動協調跨頁面的結果。
IronBarcode方法
IronBarcode本地讀取來自PDF文件的條碼。 帶有PDF文件路徑的參數對於PageNumber屬性,指示文件中的每條條碼所在的頁面:
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
// IronBarcode: extract barcodes from every page of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})");
}
Imports IronBarcode
' IronBarcode: extract barcodes from every page of a PDF
Dim results = BarcodeReader.Read("shipping-manifest.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value} ({barcode.Format})")
Next
有關從PDFs讀取條碼的完整指南,包括頁範圍選擇和多條碼提取選項,IronBarcode文件涵盖了PDF處理場景的全範圍。
定價和許可
許可結構不僅影響程式庫的成本,還影響評估和採用的需要時間。
Scandit方法
Scandit不公佈清單價格。 產品頁列出了功能和產品名稱——SparkScan、MatrixScan、ID Scanning、AR Overlays、Parser——並通過銷售會話引導價格查詢。 報價過程通常包括描述使用情景、估計掃描量、指定裝置、討論支援層和選擇合同期限,然後才提供費用數字。 每條Scandit產品線的單獨定價和合同,因此擴展功能存取可能需要額外的銷售周期。
IronBarcode方法
IronBarcode在其產品頁上公佈了許可層級,不需要提交表格或查詢銷售:
| 許可 | 價格 | 開發者 | 專案 |
|---|---|---|---|
| Lite | $749一次性 | 1 | 1 |
| Plus | $1,499一次性 | 3 | 3 |
| 專屬 | $2,999一次性 | 10 | 10 |
| 無限制 | $5,999一次性 | 無限制 | 無限制 |
許可是永久的。 沒有每次掃描費用,沒有每個裝置的費用,沒有觸發層級變更的數量閾值。 年度續訂是可選的,只有原始成本的一半,但已購買的許可是無需續訂即可保持有效。 單一IronBarcode包中涵盖的所有功能——讀取、生成、PDF支持、多條碼檢測——在每一層中都是可用的。
API對映參考
下表將Scandit SDK概念對應到其IronBarcode等價項以便團隊評估遷移的翻譯成本:
| Scandit SDK | IronBarcode | 注意 |
|---|---|---|
DataCaptureContext.ForLicenseKey("key") |
IronBarCode.License.LicenseKey = "key" |
一次指派; 無需上下文物件 |
BarcodeCaptureSettings.Create() |
new BarcodeReaderOptions() |
在IronBarcode中是可選的 |
settings.EnableSymbologies(Symbology.Code128, ...) |
(not needed) | 自動檢測是預設的 |
Camera.GetDefaultCamera() |
(not applicable) | 在文件處理中沒有相機概念 |
dataCaptureContext.SetFrameSourceAsync(camera) |
(not applicable) | 在IronBarcode中無幀源 |
camera.SwitchToDesiredStateAsync(FrameSourceState.On) |
(not applicable) | 沒有相機狀態機 |
barcodeCapture.IsEnabled = true |
BarcodeReader.Read(path) |
單次調用啟動讀取 |
BarcodeScanned +=事件處理程式 |
BarcodeReader.Read()返回值的迭代 |
同步集合; 沒有事件系統 |
args.Session.NewlyRecognizedBarcodes |
BarcodeReader.Read()的返回值 |
直接集合存取 |
barcode.Data |
result.Value |
相同的語義內容 |
barcode.Symbology |
result.Format |
等價的格式枚舉 |
| SparkScan, MatrixScan, ID Scanning(單獨產品) | 單IronBarcode包 |
無獨立附加組件 |
當團隊考慮從Scandit SDK切換到IronBarcode
伺服器端處理要求
建立ASP.NET Core API、背景處理服務或Azure Functions的團隊發現Scandit的架構是圍繞不在伺服器環境中成立的假設構建的。 DataCaptureContext和相機管道需要相機硬體和實時幀源。 當專案的條碼需求完全是伺服器端——從上傳的文件中讀取,處理文件排隊,從傳入的PDF中提取條碼資料——相機管道增加了初始化步驟和平台約束,這與工作負載無關。
批次文件處理
處理大量條碼承載文件的組織——航運清單、發票、庫存記錄、醫療表格——發現Scandit的幀源模型更傾向於連續相機會話,而不是具有確定起點和終點的獨立文件。 當文件體量增長並且併行處理成為必要時,相機管道的有狀態設計需要額外的工程來適應。
定價透明度
工作在預算建議書、供應商比較或新專案成本效益分析上的開發團隊需要銷售會話才能確定Scandit許可是費用。當專案有已定義的預算和已定義的時間表時,需要銷售會話以獲取價格報價增加了評估和計劃的步驟。 同時評估多個程式庫選項的團隊可能會發現缺乏已發佈的定價使得結構化的並排比較變得困難。
減少管道複雜性
即使當Scandit已經部署使用於移動相機掃描時,同一應用中的伺服器端條碼需求可能需要不同的工具。 當應用於靜態文件處理時,針對即時移動掃描的相機管道增加了複雜性。 在達到這一步的團隊通常在現有的Scandit部署旁邊採用IronBarcode進行伺服器端處理,而不是擴展相機管道以涵蓋文件工作流程。
常見的遷移考慮因素
相機管道無文件對應
整個DataCaptureContext初始化塊——上下文建立、設置配置、條碼格式啟用、相機收購、幀源分配和狀態轉換——在IronBarcode的文件導向API中無對應。 在遷移伺服器端整合程式碼時,這個塊被完全刪除。 它不是翻譯; 它是被刪除。 IronBarcode替換是授權金鑰分配後的BarcodeReader.Read調用。
事件回調到直接返回
因為即時相機掃描本質上是異步的,Scandit通過BarcodeScanned事件交付條碼結果。 IronBarcode同步返回結果為類別化集合,因為基於文件的讀取有已知的完成界限。 遷移涉及將事件處理邏輯轉換為標准迭代:
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
//IronBarcodedirect return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
// Scandit callback pattern (removed during migration)
barcodeCapture.BarcodeScanned += (sender, args) =>
{
foreach (var barcode in args.Session.NewlyRecognizedBarcodes)
ProcessBarcode(barcode.Data, barcode.Symbology.ToString());
};
//IronBarcodedirect return (replacement)
foreach (var result in BarcodeReader.Read("document.png"))
ProcessBarcode(result.Value, result.Format.ToString());
Imports System
' Scandit callback pattern (removed during migration)
AddHandler barcodeCapture.BarcodeScanned, Sub(sender, args)
For Each barcode In args.Session.NewlyRecognizedBarcodes
ProcessBarcode(barcode.Data, barcode.Symbology.ToString())
Next
End Sub
' IronBarcodedirect return (replacement)
For Each result In BarcodeReader.Read("document.png")
ProcessBarcode(result.Value, result.Format.ToString())
Next
移除條碼格式聲明
Scandit需要在掃描開始前顯式地EnableSymbologies調用。 IronBarcode不需要條碼格式提前聲明——所有格式都是自動檢測的。 在遷移過程中,所有settings.EnableSymbologies(...)調用都被移除。 如果原始的Scandit程式碼是出於性能原因限制條碼格式,相同的優化IronBarcode通過BarcodeReaderOptions.ExpectBarcodeTypes可用,但開始使用它不是必需的。
額外的IronBarcode能力
除了上面比較中涵蓋的領域,IronBarcode提供了擴展它在文件和資料處理場景中效用的能力:
- 條碼生成:在支援的所有條碼格式中生成條碼圖像文件或嵌入PDF,包括QR碼、Code 128、Data Matrix和PDF417。
- GS1和結構化資料解析:直接從條碼結果解碼結構化條碼資料格式,包括GS1-128應用程式標識符。
- 圖像校正和預處理:對於傾斜的、低對比度或損壞的條碼自動圖像校正改善讀取率,在被掃描的文件上不需要人工預處理。
- 多條碼檢測:單次
ExpectMultipleBarcodes選項。 - MAUI條碼讀取:在使用捕捉和處理模型的MAUI應用程式中,IronBarcode在使用
MediaPicker抓拍照片後處理步驟。 - 流和位元組陣列輸入:除了文件路徑外,
byte[]輸入,以實現與上傳處理器、記憶體緩衝區和網路流的整合,而不需要建立臨時文件。
.NET相容性和未來準備
IronBarcode支援.NET Framework 4.6.2及以後的版本、.NET Standard 2.0和現代.NET版本,包括.NET 6,.NET 8,.NET 9,和.NET 10。程式庫定期接收更新以保持與當前.NET版本的相容性。 其無狀態API設計適合於現代.NET中使用的異步優先程式設計模型,其支援Linux和容器化部署適合雲原生工作負載。 由於該庫作為一個無平台特定運行時依賴於.NET運行時本身的單一NuGet包發行,升級.NET版本不需要單獨的庫更新或額外配置。
結論
Scandit SDK和IronBarcode代表了完全不同的條碼處理方法,反映了不同的預期部署環境。 Scandit是為移動硬體上的實時相機掃描而構建的,其架構協調了一個實時相機會話、逐幀分析設置和事件驅動的結果交付。 IronBarcode是為伺服器上的基於文件和文件導向的處理、桌面和雲基礎設施建立的,其無狀態API接受文件、流和PDF並返回同步結果。 這些不是同一個想法的競爭實施——它們是服務於不同使用案例的不同想法。
Scandit SDK是用於移動應用程式的合適選擇,在這些應用程式中,使用者需要裝置相機指向實體條碼並需要低於100毫秒的視覺反饋。 其AR疊加功能、通過MatrixScan的多條碼同時檢測和通過ID Scanning的身份文件掃描是針對其目的而建的特性,沒有哪種基於文件的條碼程式庫可以複製。 大規模部屬移動現場工作人員、運行面向消費者的掃描體驗或需要企業級移動掃描SLA的組織正是Scandit設計服務的受眾。
IronBarcode是當條碼資料以文件—圖像、PDF、位元組陣列或上傳流—的形式到達而處理發生時沒有相機、使用者和UI時的合適選擇。 伺服器端文件處理、ASP.NET Core API端點、Azure Functions、計劃的批處理作業以及容器化微服務代表了IronBarcode建設的運行環境。 其已取名的定價、單一包功能存取和直接的文件讀取API為這些場景設計,而Scandit的相機管道模型以及聯絡銷售的定價導向一種不同的部署形狀。
坦誠的評估是,選擇主要由部署環境而非偏好決定。 需要實時移動相機掃描的專案有明確的答案。 需要伺服器端PDF條碼提取的專案也有同樣明確的答案。 這兩個程式庫有時會混淆是因為他們中間——MAUI應用程式、混合架構和同時擁有移動掃描和文件處理需求的組織。 在這些情況下,這兩個程式庫可以共存:Scandit承擔面向相機的工作,IronBarcode負責文件處理工作,且不會迫使任何程式庫進入其未計劃的角色。
常見問題
什麼是Scandit SDK?
Scandit SDK是一個.NET條碼程式庫,用於在C#應用程式中生成和讀取條碼。它是開發人員在選擇.NET專案的條碼解決方案時評估的幾個替代方案之一。
Scandit SDK和IronBarcode之間的主要區別是什麼?
IronBarcode使用靜態的、無狀態的API,無需進行實例管理,而Scandit SDK通常需要在使用前建立和配置實例。IronBarcode還提供本地PDF支持、自動格式檢測和在所有環境下的單鍵授權。
IronBarcode授權是否比Scandit SDK更容易?
IronBarcode使用一個覆蓋開發和生產部署的單一授權金鑰。相比於將SDK金鑰與運行時金鑰分開的授權系統,這簡化了CI/CD管道和Docker配置。
IronBarcode是否支持Scandit SDK支持的所有條碼格式?
IronBarcode支持超過30種條碼符號,包括QR Code、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1等。格式自動檢測意味著不需要顯式的格式枚舉。
IronBarcode支持原生PDF條碼讀取嗎?
是的。IronBarcode可以直接從PDF文件中讀取條碼,使用BarcodeReader.Read("document.pdf"),無需單獨的PDF渲染程式庫。每頁結果包括頁碼、條碼格式、值和置信分數。
與Scandit SDK相比,IronBarcode如何處理批量處理?
IronBarcode的靜態方法無狀態且天然執行緒安全,可以直接使用Parallel.ForEach而無需每個執行緒的實例管理。任何價格級別下都沒有吞吐量上限。
IronBarcode支持哪些.NET版本?
IronBarcode支持.NET Framework 4.6.2+、.NET Core 3.1,以及.NET 5、6、7、8和9,單一NuGet包。平台目標包括Windows x64/x86、Linux x64和macOS x64/ARM。
如何在.NET專案中安裝IronBarcode?
通過NuGet安裝IronBarcode:在Package Manager Console中運行 'Install-Package IronBarCode',或在CLI中運行 'dotnet add package IronBarCode'。不需要額外的SDK安裝程式或運行時文件。
是否可以在購買前評估IronBarcode,而這是Scandit所不具備的?
可以。IronBarcode的試用模式返回完整解碼的條碼值——只有生成的輸出圖像上有水印。您可以在自己的文件上評估讀取準確性,然後再決定購買。
Scandit SDK和IronBarcode之間的價格差異是什麼?
IronBarcode起價為$749,為單開發者所適用的永久授權,覆蓋開發和生產。價格詳情和批量選項可在IronBarcode授權頁面獲得。無需單獨的運行時授權。
從Scandit SDK遷移到IronBarcode是否直截了當?
從Scandit SDK遷移到IronBarcode主要涉及將基於實例的API呼叫替換為IronBarcode的靜態方法,移除授權樣板,並更新結果屬性名稱。大多數遷移涉及減少程式碼而不是增加程式碼。
IronBarcode可以生成帶有Logo的QR碼嗎?
可以。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") 可以原生嵌入品牌圖像進QR碼,並可配置錯誤更正。也支持通過ChangeBarCodeColor() 生成彩色QR碼。

