Scandit SDK 與 IronBarcode:C# 條碼庫對比
要開始使用 Scandit 讀取條碼,您需要配置 DataCaptureContext,創建 BarcodeCaptureSettings,明確啟用符號體系,獲取攝像頭,將其設置為幀源,將攝像頭切換到開啟狀態,並啟用捕獲。 網站上仍然沒有標明價格。
這種組合——強制性的攝影機管道和不透明的企業定價——恰恰定義了 Scandit 何時不適合 .NET 專案。 如果您正在建立伺服器端文件處理工作流程、讀取上傳檔案中條碼的 ASP.NET Core API,或處理出貨 PDF 的 Azure 函數,那麼 Scandit 的架構會在每個環節都對您不利。本文將比較分析 Scandit 架構的由來、IronBarcode 的替代方案,以及兩個方案的成本。
了解 Scandit SDK
Scandit SDK 是一個專為行動和邊緣運算環境而建置的商業企業條碼掃描平台。 該庫旨在支援 iOS、Android 和 MAUI 裝置上的即時相機掃描,其專業產品線涵蓋擴增實境疊加、多條碼同時偵測和身分識別檔案掃描。 Scandit 的主要部署場景是行動現場工作人員、倉庫營運和零售互動點場景,在這些場景中,實體攝影機、即時用戶和低於 100 毫秒的回應時間同時存在。
該庫的架構圍繞著 DataCaptureContext 管道組織,該管道將相機會話、幀分析設定和條碼捕獲配置協調為一個統一的有狀態系統。 由於 Scandit 平台中的每個產品線(SparkScan、MatrixScan、ID 掃描、AR 疊加層和解析器)都是單獨授權並透過聯絡銷售模式定價的,因此任何 Scandit 整合的總成本在銷售洽談之前都無法確定。
Scandit SDK 的主要架構特性包括:
-相機優先設計: SDK 假定有一個實體相機和一個運作中的幀源。 所有條碼讀取均在即時視訊框架上進行,而不是在靜態檔案或視訊串流上進行。
-強制性資料擷取上下文初始化:每次整合都首先建立一個 DataCaptureContext 並將其連接到相機實例,然後才能進行任何條碼工作。
-明確符號聲明:在捕獲會話開始之前,必須使用 EnableSymbologies 單獨啟用條碼格式。 自動檢測功能不可用。
-事件驅動的結果交付:條碼結果透過事件回調非同步交付(BarcodeScanned),而不是透過方法呼叫同步返回。
-模組化產品架構: SparkScan、MatrixScan、ID 掃描、AR 疊加層和解析器是單獨定價的功能,需要單獨的合約項目。
-聯絡銷售定價:不公佈定價。 每次整合都需要先進行銷售詢價,才能決定授權費用。
-行動優先平台目標:主要支援 iOS 和 Android。 伺服器端、Docker 和無伺服器部署不在 SDK 的設計範圍內。
數據捕獲上下文管道
所有 Scandit 整合都從以下相機初始化序列開始,然後才能讀取單一條碼:
// Scandit SDK: full camera pipeline setup
// NuGet: Scandit.BarcodePicker
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.BarcodePicker
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
Imports Scandit.DataCapture.Barcode
Imports Scandit.DataCapture.Barcode.Capture
Imports Scandit.DataCapture.Core.Source
Imports System.Collections.Generic
' Scandit SDK: full camera pipeline setup
' NuGet: Scandit.BarcodePicker
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
這個區塊中的每一行都是攝影機基礎設施。 沒有文件路徑參數。 沒有PDF文件。 沒有直播串流。 該庫假定在開始任何條碼工作之前,攝影機必須處於運作狀態。
了解 IronBarcode
IronBarcode 是一個用於條碼讀取和產生的商業 .NET 函式庫。 該程式庫專為伺服器端、桌面端和雲端環境而設計,其中條碼資料以檔案、串流、位元組數組或 PDF 文件中的嵌入內容的形式到達。 它的 API 是無狀態的——沒有會話對象,沒有需要初始化的相機管道,也沒有需要在讀取之間管理的持久上下文。 對 BarcodeReader.Read 的單一靜態呼叫接受檔案路徑、流、位元組數組或 PDF,並傳回結果集合。
IronBarcode 以單一 NuGet 套件的形式提供,其中包含對 30 多種一維和二維條碼格式的所有讀取和產生功能。 該庫支援自動格式檢測,這意味著呼叫者無需指定要查找的符號體系。 產品價格已在產品頁面上公佈,無需銷售洽談。
IronBarcode的主要特點包括:
-無狀態的基於文件的 API:讀取操作從接受文件路徑、流、位元組數組或 PDF 文件的單一方法呼叫開始。 -自動格式偵測:所有支援的條碼格式均可自動偵測。 顯式符號配置是一種可選的效能最佳化,而不是必要條件。 -原生 PDF 支援:直接讀取多頁 PDF 文檔,結果以頁碼索引。 無需外部PDF渲染庫。 -伺服器和雲端就緒:支援 ASP.NET Core、Azure Functions、Linux 上的 Docker 和容器化部署,無需架構上的變通方法。 -並發處理:無狀態 API 本質上是線程安全的,支援高吞吐量批次場景的非同步模式。 -條碼產生:產生影像和 PDF 格式的條碼,支援所有條碼符號系統。 產生和閱讀包含在同一個軟體包中。 -已公佈的永久授權:價格以一次性永久購買的形式公開列出,不收取每次掃描或每台設備的費用。
功能比較
下表列出了 Scandit SDK 和IronBarcode的根本差異:
| 特點 | Scandit SDK | IronBarcode |
|---|---|---|
| 主要使用個案 | 行動裝置上的即時攝影機掃描 | 伺服器端檔案、串流和 PDF 條碼讀取 |
| 需要攝影機 | 是 | 無 |
| PDF條碼擷取 | 不支援 | 原生支援 |
| 定價模式 | 聯絡銷售人員,按產品諮詢 | 已發布的永久層級 |
| 伺服器端處理 | 並非設計用於 | 主要部署目標 |
| 符號配置 | 掃描前必須完成 | 選修的; 自動檢測是預設設定 |
| 條碼生成 | 不支援 | 包含在單一包裝內 |
詳細功能比較
| 特點 | Scandit SDK | IronBarcode |
|---|---|---|
| 閱讀 | ||
| 影像檔案讀取 | 並非設計用於 | 主要關注點 |
| PDF條碼擷取 | 不支援 | 原生多頁 |
| 流/位元組數組輸入 | 不支援 | 是 |
| 自動格式偵測 | 否(必須註明) | 是 |
| 一維條碼格式(Code 128、EAN、UPC 等) | 30+ | 30+ |
| 二維格式(QR碼、DataMatrix碼、Aztec碼、PDF417碼) | 是 | 是 |
| 每個文件可偵測多個條碼 | MatrixScan(獨立產品) | 是的(單件裝) |
| 條碼損壞恢復 | 限額 | 是的(基於機器學習) |
| 世代 | ||
| 條碼生成 | 不支援 | 是 |
| 輸出到影像檔案 | 不支援 | 是 |
| 輸出為 PDF | 不支援 | 是 |
| 架構 | ||
| 初始化模型 | 有狀態相機管道 | 無狀態方法調用 |
| 結果交付 | 事件回調(非同步) | 同步返回值 |
| 相機依賴性 | 要求 | 不適用 |
| 符號學預聲明 | 要求 | 選項 |
| 平台 | ||
| iOS / Android (MAUI) | 主要目標 | 程式化使用 |
| ASP.NET Core | 並非設計用於 | 全面支援 |
| Azure 功能/ 無伺服器 | 不切實際 | 全面支援 |
| Docker/Linux伺服器 | 不支援 | 全面支援 |
| 控制台/後台服務 | 並非設計用於 | 全面支援 |
| 授權 | ||
| 定價透明度 | 聯繫銷售人員 | 發佈於網站 |
| 許可證類型 | 年均(以產品計) | 永久一次性 |
| 按掃描次數或按裝置收費 | 是 | 無 |
| 單一軟體包即可存取所有功能 | 否(模組化產品) | 是 |
條碼讀取架構
這兩個庫之間最顯著的結構性差異在於它們如何對輸入和輸出之間的關係進行建模。
Scandit SDK 方法
Scandit 即時處理相機畫面。 DataCaptureContext 保持一個活動的攝影機會話,而 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-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-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-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 的相機管道設計用於服務單一使用者或裝置的單一相機會話。此模型假定相機會話是持續的、連續的,而不是按吞吐量處理文件佇列。 要使庫能夠處理批量文件,需要為每個文檔模擬一次相機會話,或者透過共享管道對文檔處理進行序列化,但這兩種方法都不是受支援的或高效的模式。
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 檔案路徑是 BarcodeReader.Read 的有效參數,結果包含一個 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
有關從 PDF 中讀取條碼的完整指南,包括頁面範圍選擇和多條碼提取選項,IronBarcode 文件涵蓋了 PDF 處理場景的全部內容。
定價與授權
許可結構不僅影響圖書館的成本,也影響評估和採用圖書館所需的時間。
攀登方法
Scandit公司不公佈定價資訊。 產品頁面列出了功能和產品名稱——SparkScan、MatrixScan、ID 掃描、AR 疊加層、解析器——並將所有諮詢轉接到銷售對話中。 報價流程包括解釋使用案例、估算掃描量、指定設備、討論支援等級以及協商合約期限,然後才會提供成本數字。 G2 和 DiscoverSDK 等平台上的評論一致指出,中小企業的成本難以預測,預算預測也面臨挑戰。 Scandit 的每條產品線都是單獨定價和單獨簽訂合約的,這意味著擴展功能需要額外的銷售週期。
IronBarcode方法
IronBarcode 在產品頁面上公佈其許可級別,無需提交表單或進行銷售諮詢:
| 許可證 | 價格 | 開發者 | 專案 |
|---|---|---|---|
| 一點 | 一次性 749 美元 | 1 | 1 |
| 專業 | 一次性支付 1,499 美元 | 10 | 10 |
| 無限制 | 一次性支付 2,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、身分證掃描(皆為獨立產品) | 單一 IronBarcode 包 |
沒有單獨的插件 |
當團隊考慮從 Scandit SDK 遷移到IronBarcode時
伺服器端處理要求
建置 ASP.NET Core API、後台處理服務或Azure 功能的團隊會發現,Scandit 的架構從整合的第一道防線就存在根本性的不匹配。 DataCaptureContext 和攝影機管道假定了伺服器環境中不存在的硬體。 當一個專案的條碼需求完全在伺服器端時——從上傳的檔案讀取資料、處理文件佇列、從傳入的 PDF 中提取條碼資料——相機管道增加了初始化複雜性、非同步狀態機開銷和平台限制,而這些對實際的業務需求沒有任何貢獻。
批量文件處理
處理大量帶有條碼的文件(例如運輸清單、發票、庫存記錄、醫療表格)的組織發現,Scandit 的框架來源模型無法與文件佇列配合使用。 該庫是為連續的相機拍攝會話而設計的,而不是為具有確定的開始和結束點的離散文件而設計的。 當文件量增長且需要並行處理時,相機管道的狀態性就變成了工程上的障礙,而不是一項功能。
定價透明度
開發團隊在為新專案製定預算方案、進行供應商比較或成本效益分析時,如果未先進入銷售流程,就無法與 Scandit 完成這些工作。當專案預算和時間表都已確定時,如果無法在未進行銷售洽談的情況下確定許可費用,就會造成延誤和不確定性,進而對專案規劃產生後續影響。 同時評估多個圖書館選項的團隊發現,由於沒有公佈價格,Scandit 很難納入結構化的比較。
降低管道複雜性
即使 Scandit 已經部署用於行動攝影機掃描,有些團隊仍然發現,同一應用程式中的伺服器端條碼要求需要不同的工具。 適用於即時移動掃描的相機處理流程,在應用於靜態文件處理時會引入不必要的複雜性。 達到這一步驟的團隊通常會採用IronBarcode進行伺服器端處理,並配合現有的 Scandit 部署,而不是嘗試將相機管道擴展到它原本設計無法處理的用例。
常見的遷移考量
相機管道沒有等效文件
整個 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.Collections.Generic
' 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
' IronBarcode direct 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 中,支援所有條碼格式,包括二維碼、Code 128、Data Matrix 和 PDF417。
- GS1 和結構化資料解析:直接從條碼結果解碼結構化條碼資料格式,包括 GS1-128 應用標識符。
-影像校正與預處理:自動影像校正傾斜、低對比或損壞的條碼,無需手動預處理即可提高掃描文件的讀取率。
-多條碼偵測:使用
BarcodeReader.Read選項,透過一次ExpectMultipleBarcodes呼叫即可偵測文件中存在的所有條碼,包括同一頁上的混合格式。 - MAUI 條碼讀取:在使用擷取和處理模型的 MAUI 應用程式中,IronBarcode 在使用
MediaPicker擷取照片後處理步驟。 -流和位元組數組輸入:除了文件路徑之外,BarcodeReader.Read還接受Stream和byte[]輸入,從而可以與上傳處理程序、內存緩衝區和網絡流集成,而無需創建臨時文件。
.NET相容性與未來準備
IronBarcode 支援 .NET Framework 4.6.2 及更高版本、.NET Standard 2.0 以及所有現代 .NET 版本,包括 .NET 6、.NET 7、.NET 8 和 .NET 9。該程式庫會定期更新,以保持與目前和即將發布的 .NET 版本(包括預計於 2026 年底發布的 .NET 10)的兼容性。其無狀態 API 設計與現代 .NET 中引入的非同步優先編程模型相容,並且支援 Linux 和容器化部署,使其能夠勝任 .NET 應用持續增長的雲端原生工作負載。 由於該庫以單一 NuGet 套件的形式提供,除了 .NET 運行時本身之外沒有特定於平台的運行時依賴項,因此在 .NET 版本之間升級不需要單獨的庫更新或額外的配置。
結論
Scandit SDK 和IronBarcode代表了條碼處理方面截然不同的方法,反映了不同的預期部署環境。 Scandit 專為在行動硬體上進行即時相機掃描而構建,其架構可協調即時相機會話、逐幀分析設定和事件驅動的結果交付。IronBarcode專為在伺服器、桌面和雲端基礎架構上進行基於文件和以文件為中心的處理而構建,它具有無狀態 API,可以接受文件、流和 PDF,並返回同步結果。 這些並不是同一理念的不同實現方式——它們是服務於不同應用場景的不同理念。
Scandit SDK 是行動應用程式的合適選擇,使用者需要將裝置相機對準實體條碼,並獲得 100 毫秒以下的視覺回饋。 其 AR 疊加功能、透過 MatrixScan 實現的多條碼同時檢測以及透過 ID Scanning 實現的識別檔掃描都是專門建置的功能,沒有基於檔案的條碼庫可以複製這些功能。 那些大規模部署行動現場工作人員、運行面向消費者的掃描體驗或需要企業行動掃描 SLA 的組織,正是 Scandit 的目標使用者群體。
當條碼資料以檔案(圖像、PDF、位元組數組或上傳流)的形式到達,且處理過程無需攝影機、無需使用者、無需使用者介面時,IronBarcode 是合適的選擇。 伺服器端文件處理、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 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 在單一 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 安裝程式或運行時檔案。
與 Scandit 不同,我可以在購買前評估 IronBarcode 嗎?
是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。
Scandit SDK 和 IronBarcode 的價格有什麼不同?
IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。
從 Scandit SDK 遷移到 IronBarcode 是否簡單?
從 Scandit SDK 遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板程式碼以及更新結果屬性名稱。大多數遷移工作都是減少程式碼,而不是增加程式碼。
IronBarcode 能產生帶有 logo 的二維碼嗎?
是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

