Spire.Barcode 與 IronBarcode:C# 條碼庫比較
Spire.Barcode 讀取條碼時需要條碼類型:scanner.Scan(path, BarCodeType.Code128)。 如果您正在處理條碼格式不限的文檔,則必須先編寫格式檢測循環才能提取值。 這項 API 決策決定了您使用 Spire.Barcode 建立條碼掃描工作流程的方方面面,因此在您決定採用它之前,有必要了解它。
了解 Spire.Barcode
Spire.Barcode 是一個商業 .NET 條碼庫,由中國軟體公司 E-iceblue 開發,該公司還生產 Spire.Doc、Spire.XLS 和 Spire.PDF 產品線。 該庫支援對各種一維和二維條碼進行生成和讀取,並且旨在與更廣泛的 E-iceblue 文件處理生態系統整合。
E-iceblue 發布了兩個軟體包:FreeSpire.Barcode(免費)和 Spire.Barcode(商業產品)。 免費套餐是永久限量產品,並有意設定了許多限制,而不是限時試用。 商業版軟體包解鎖了完整的符號集,並取消了免費版中的限制,但需要單獨購買許可證才能使用任何其他 Spire 產品。
Spire.Barcode 的主要架構特徵包括:
-必要的 BarCodeType 參數:每次呼叫 BarcodeScanner.Scan() 都需要一個 BarCodeType 枚舉值。 沒有隻接受檔案路徑並執行自動格式偵測的過載函數。
-設定物件產生模型:條碼產生以可變的 BarcodeSettings 物件為中心,該物件被傳遞給 BarCodeGenerator 實例,在產生任何輸出之前需要進行多個屬性賦值。
-不支援原生 PDF: Spire.Barcode 無法直接從 PDF 檔案讀取條碼。 基於 PDF 的工作流程需要單獨的 Spire.PDF 軟體包、單獨的許可證,以及開發者編寫的手動頁面和圖像提取程式碼。
- FreeSpire.Barcode 免費版限制:免費版會在產生的條碼上套用大型評估浮水印,故意降低掃描效能,限制可用的符號集,並且需要從 E-iceblue 取得註冊金鑰才能抑制警告對話框。
- E-iceblue 生態系統整合:已經使用 Spire.Doc 或 Spire.XLS 的團隊可能會發現 API 的熟悉性和潛在的捆綁定價很有益處。 單獨使用 Spire.Barcode 的團隊需要承擔完整的產品授權費用,而無法享受生態系統帶來的好處。
-回傳類型:
BarcodeScanner.Scan()傳回string[],不包含任何格式元資料。 偵測到的類型未包含在結果中。
類型規格要求
Spire.Barcode 的 BarcodeScanner.Scan() 沒有隻接受檔案路徑的重載。 每次讀取操作都要求呼叫程式碼預先聲明條碼格式。 對於單一格式的工作流程,這種方法是可行的,但對於混合格式的文件處理,它會產生一個候選迭代循環:
// Spire.Barcode: multi-format detection requires a guessing loop
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: multi-format detection requires a guessing loop
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 是由 Iron Software 開發的商業 .NET 條碼庫。 它透過靜態 API 模型提供條碼讀取和產生功能,無需實例管理。 該庫以單一 NuGet 套件的形式提供,包含原生 PDF 和圖像處理支持,無需額外的依賴項。
IronBarcode 的讀取引擎可在一次掃描過程中自動偵測 50 多種條碼格式。 BarcodeReader.Read() 傳回的結果物件包括偵測到的條碼類型、解碼值以及上下文元數據,例如 PDF 來源的頁碼和來源影像中的邊界座標。
IronBarcode的主要特點包括:
-自動格式偵測: BarcodeReader.Read() 不需要型別參數。 該庫在掃描過程中識別符號系統,並將其包含在結果物件中。
-單包 PDF 支援: BarcodeReader.Read() 直接接受 PDF 文件,無需任何額外的 NuGet 套件、許可證或手動頁面提取程式碼。
- Fluent 產生 API:
BarcodeWriter.CreateBarcode()是靜態工廠方法,它傳回可鍊式對象,用於在單一表達式中設定大小、樣式和儲存。 -試用模式功能齊全:IronBarcode試用版與授權產品使用相同的軟體包,提供完整的讀取速度、完整的符號系統支援和完整的功能集。 試用模式下產生的輸出帶有一個小的邊緣浮水印; 閱讀行為不受影響。 BarcodeReaderOptions用於調整:讀取速度、多條碼偵測、影像預處理和預期符號濾鏡均可配置,無需切換庫產品。 -帶有元資料的結果物件:BarcodeResults集合中的每個結果都公開Value、BarcodeType、PageNumber和影像區域資料。
功能比較
下表總結了 Spire.Barcode 和IronBarcode之間的主要差異:
| 特點 | Spire.Barcode | IronBarcode |
|---|---|---|
| 條碼讀取 | 是的(需要 BarCodeType 類型) | 是的(自動檢測) |
| 條碼生成 | 是 | 是 |
| 自動格式偵測 | 無 | 是 |
| 原生 PDF 支援 | 否(需要 Spire.PDF) | 是 |
| 免費套餐 | FreeSpire.條碼(受限) | 試用模式(完整功能) |
| 符號計數 | 39+(商業) | 50歲以上 |
| 許可模式 | 按席位分級和訂閱 | 永久支援(可選) |
詳細功能比較
| 特點 | Spire.Barcode | IronBarcode |
|---|---|---|
| 閱讀 | ||
| 自動格式偵測 | 無 | 是 |
| 條碼類型必填 | 是 | 無 |
| 返回格式元數據 | 無 | 是 |
| 每張圖片包含多個條碼 | 是 | 是 |
| 閱讀速度控制 | 無 | 是的(條碼讀取器選項) |
| 機器學習輔助糾錯 | 無 | 是 |
| 世代 | ||
| API模型 | 設定物件 + 生成器 | 具有流暢鏈的靜態工廠 |
| 帶有自訂徽標的二維碼 | 限商業層級 | 所有等級 |
| 輸出格式 | 圖片(PNG、JPEG、BMP) | PNG、JPEG、BMP、SVG、HTML、串流媒體 |
| 流暢的鍊式 | 無 | 是 |
| PDF 支援 | ||
| 從 PDF 讀取條碼 | 需要 Spire.PDF | 原生應用,無需額外軟體包 |
| 結果中的頁碼 | 手動追蹤 | 是 |
| 需要額外許可證 | 是的(Spire.PDF) | 無 |
| 平台 | ||
| .NET Framework | 是 | 是 |
| .NET Core / .NET 5+ | 是 | 是 |
| Docker / Linux | 是 | 是 |
| 符號學 | ||
| 一維條碼(Code128、Code39、EAN、UPC) | 是 | 是 |
| 二維碼(QR碼、DataMatrix碼、PDF417碼) | 是 | 是 |
| 符號總數 | 39+(商業) | 50歲以上 |
| 授權 | ||
| 免費套餐 | FreeSpire.條碼(含浮水印,影像品質下降) | 試用模式(全速播放,小浮水印) |
| 免費套餐需註冊 | 是 | 無 |
| 許可模式 | 按席位永久使用權 + 訂閱 | 永久有效,可續期。 |
| 定價切入點 | 349 美元(單一開發者) | $749 (Lite) |
條碼讀取
Spire.條碼方法
Spire.Barcode 的 BarcodeScanner.Scan() 每次呼叫都需要一個 BarCodeType 參數。 當格式已知且有保證時,單一類型呼叫是適當的:
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);
foreach (string value in results)
{
Console.WriteLine(value);
}
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);
foreach (string value in results)
{
Console.WriteLine(value);
}
Imports Spire.Barcode
Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("barcode.png", BarCodeType.Code128)
For Each value As String In results
Console.WriteLine(value)
Next
當格式事先未知時,唯一可行的方法是遍歷候選類型。每次遍歷都是一次完整的掃描,任何不在清單中的格式都會被忽略。 結果是一個 string[],它不攜帶任何類型信息,因此基於格式的下游路由需要呼叫者進行額外的狀態管理。
IronBarcode方法
IronBarcode 的 BarcodeReader.Read() 不需要型別參數。 該庫只需一次掃描即可自動偵測所有受支援符號體系的格式。 無論來源影像包含多少種不同的條碼格式,從影像中讀取條碼都只需要一次方法呼叫:
//IronBarcode— auto-detection built in
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
//IronBarcode— auto-detection built in
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
Imports IronBarcode
'IronBarcode— auto-detection built in
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
每個結果物件包含 BarcodeType、Value 和位置元資料。 基於格式的下游路由不需要額外的狀態-類型本身就存在於結果中。
免費套餐限制
Spire.Barcode 免費層
FreeSpire.Barcode 會在產生的條碼影像上套用大型評估浮水印。 水印覆蓋了條碼,使其不適合生產使用,並妨礙了對生產品質的有效評估。 免費版有意降低了掃描效能,這意味著評估期間進行的吞吐量測量並不能代表 Spire.Barcode 的商業效能。 免費版軟體套件還需要從 E-iceblue 取得註冊金鑰,才能在執行過程中抑制警告對話方塊。 免費版提供的符號集是商業版符號集的子集。 這些限制共同意味著,基於 FreeSpire.Barcode 進行的評估並不能準確反映商業產品的功能。
IronBarcode試用模式
IronBarcode 的試用版是無需許可證金鑰即可使用的授權軟體包。 閱讀功能以全速運行,支援所有符號,且無行為限制。 閱讀速度和準確度選項在試用模式和授權模式下表現完全相同。 試用模式下產生的條碼輸出影像邊緣帶有一個小浮水印; 它不會遮擋條碼本身。IronBarcode評估期間測量的行為是最終部署到生產環境中的行為。
| 範疇 | FreeSpire.Barcode | IronBarcode試用 |
|---|---|---|
| 生成輸出上的浮水印 | 大號,覆蓋條碼 | 僅影像邊緣很小 |
| 閱讀表現 | 故意降低 | 全速 |
| 符號學支持 | 有限子集(約20種類型) | 全套(50多種) |
| 需要註冊 | 是的(E-iceblue提供的免費鑰匙) | 無 |
| 可用功能 | 有限子集 | 完整功能集 |
| 時限 | 無 | 30天 |
PDF條碼支持
Spire.條碼方法
Spire.Barcode本身不具備PDF讀取功能。 要從 PDF 文件中提取條碼,開發人員必須安裝單獨的 Spire.PDF 軟體包,購買單獨的 Spire.PDF 許可證,並編寫手動頁面迭代和圖像提取程式碼,然後才能開始條碼掃描:
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;
var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");
var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
var images = page.ExtractImages();
foreach (var image in images)
{
// BarCodeType is still required even here
string[] results = scanner.Scan(image, BarCodeType.QRCode);
}
}
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;
var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");
var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
var images = page.ExtractImages();
foreach (var image in images)
{
// BarCodeType is still required even here
string[] results = scanner.Scan(image, BarCodeType.QRCode);
}
}
Imports Spire.Pdf
Dim pdf As New PdfDocument()
pdf.LoadFromFile("document.pdf")
Dim scanner As New BarcodeScanner()
For Each page As PdfPageBase In pdf.Pages
Dim images = page.ExtractImages()
For Each image In images
' BarCodeType is still required even here
Dim results As String() = scanner.Scan(image, BarCodeType.QRCode)
Next
Next
此模式需要兩個 NuGet 套件、兩份授權協議以及開發人員編寫的頁面管理程式碼。 如果條碼嵌入在 PDF 的向量內容中而不是柵格圖像中,則圖像提取方法可能會完全錯過它們。
IronBarcode方法
IronBarcode 可原生處理 PDF 文件,無需任何額外依賴。 從 PDF 文件中讀取條碼只需呼叫一個方法,使用與圖像檔案相同的 BarcodeReader.Read() API。 每個結果物件中都包含頁碼:
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
Imports IronBarcode
Dim results = BarcodeReader.Read("document.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}")
Next
無需手動提取頁面,無需二級軟體包,也無需額外購買許可證。
產生 API
Spire.條碼方法
Spire.Barcode 的生成模型以可變的 BarcodeSettings 配置物件為中心。 開發人員實例化設置,分別分配屬性,將設定物件傳遞給 BarCodeGenerator,然後呼叫 GenerateImage():
// Spire.Barcode generation
using Spire.Barcode;
BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;
BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
// Spire.Barcode generation
using Spire.Barcode;
BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;
BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging
Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "12345678"
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("barcode.png", ImageFormat.Png)
由於設定物件是可變的,因此當在多個生成操作中重複使用單一實例時,配置可能會意外地在多個呼叫之間共用。 生成器類別增加了一個額外的實例化步驟,該步驟本身不包含任何配置邏輯。
IronBarcode方法
IronBarcode 使用靜態工廠方法,並可選擇進行流暢的鍊式呼叫。 沒有設定對象,也沒有生成器實例需要管理:
//IronBarcodegeneration
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
//IronBarcodegeneration
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' IronBarcode generation
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
' With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
所有IronBarcode許可等級均提供帶有自訂徽標的二維碼:
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-with-logo.png")
定價
Spire.Barcode 的定價結構包括四個等級:
| 許可證 | 價格 |
|---|---|
| 單一開發商 | $349 |
| 站點許可 | $1,398 |
| 原廠設備製造商 | $6,990 |
| 訂閱 | 每年999美元 |
永久層級涵蓋特定版本。 除了永久許可證外,持續更新和支援還需要有效的訂閱。 團隊從一名開發人員增加到兩名開發人員,則直接從 349 美元的單開發人員級別升級到 1398 美元的站點許可證。 如果還需要 Spire.PDF 來進行 PDF 條碼提取,則該許可證需要額外付費。
IronBarcode 的授權許可有三種永久授權等級:
| 許可證 | 價格 | 開發者 |
|---|---|---|
| 一點 | $749 | 1 |
| 專業 | $1,499 | 10 |
| 無限制 | $2,999 | 無限制 |
所有等級均為永久有效,並可選擇新增年度支援和更新訂閱。 Spire.Barcode 的網站許可證(1398 美元)加上一年的訂閱費(999 美元),一個五人開發團隊第一年的總費用為 2397 美元,與 IronBarcode專業的一次性購買價格 1499 美元(無需第二年費用)相當。
API 對應參考。
| Spire.Barcode | IronBarcode |
|---|---|
new BarcodeScanner() |
靜態 BarcodeReader.Read() |
scanner.Scan(path, BarCodeType.X) |
BarcodeReader.Read(path) |
BarCodeType.Code128(必填參數) |
自動檢測; 無需等效物 |
string[] results |
BarcodeResults 集合 |
results[0](字串) |
results[0].Value(字串) |
new BarcodeSettings() |
參數至 BarcodeWriter.CreateBarcode() |
settings.Type = BarCodeType.Code128 |
BarcodeEncoding.Code128 作為第二個參數 |
settings.Data = "value" |
CreateBarcode() 的第一個參數 |
new BarCodeGenerator(settings) |
不需要; 靜態工廠取代了這一點 |
generator.GenerateImage() + image.Save() |
.SaveAsPng(path) 或 .SaveAsJpeg(path) |
Spire.PDF(用於閱讀PDF) |
不需要; 內建原生PDF支持 |
BarcodeSettings.ApplyKey("key") |
IronBarCode.License.LicenseKey = "key" |
Spire.License.LicenseProvider.SetLicenseKey("key") |
IronBarCode.License.LicenseKey = "key" |
當團隊考慮從 Spire.Barcode 遷移到IronBarcode時
混合格式文件處理
最初只使用一種條碼格式的團隊,往往會發現隨著時間的推移,其條碼格式會變得越來越多樣化。例如,一個最初使用 Code128 標籤的倉儲應用,現在可能會收到供應商使用 DataMatrix、GS1-128 或二維碼的貨物。 每次有新格式進入工作流程時,都需要更新類型猜測循環中的候選數組,重新測試偵測邏輯,並確認迭代順序不會改變現有格式。 當格式多樣性達到一定程度,使得該循環的維護開銷成為持續的開發成本時,團隊會評估自動檢測是否可以完全消除這種負擔。
PDF集成
文件密集型應用程式經常會遇到需要從 PDF 文件而不是獨立圖像中提取條碼的情況。 在 Spire.Barcode 工作流程中,這種轉變需要獲得 Spire.PDF 許可證,整合第二個軟體包,並編寫頁面迭代和圖像提取基礎架構,然後才能進行任何條碼讀取。 如果團隊在最初購買時沒有預料到這一要求,他們就會發現自己需要管理兩個產品許可證和兩個 API 接口,而這項任務在概念上屬於條碼讀取。 發現 PDF 支援需要單獨購買,是促使用戶重新評估產品選擇的常見原因。
免費層級評估限制
評估過 FreeSpire.Barcode 並購買了商業許可證的團隊有時會反映,商業產品的實際表現與他們的評估結果有所不同。 這是有意為之:免費層級故意降低讀取效能並限制符號集,這意味著在評估期間進行的基準測試和格式覆蓋率測試無法轉移到商業部署中。 當團隊在購買後發現這種差異時,他們通常會尋找替代品,這些替代品的試用行為能夠代表生產行為。
減少產品數量
對技術堆疊進行標準化的組織有時會將 Spire.Barcode 視為不斷成長的 E-iceblue 產品庫中的一個元件,每個元件都有自己的授權費用和續約週期。 如果 Spire.Barcode 的主要驅動力是在文件處理流程中讀取條碼,而不是與 Spire.Doc 或 Spire.XLS 深度集成,那麼團隊會評估一個獨立的條碼庫是否可以降低許可複雜性和支援範圍。
常見的遷移考量
移除 BarCodeType 參數
Spire.Barcode 程式碼庫中的每個 scanner.Scan() 呼叫都帶有一個 BarCodeType 參數。 將這些呼叫替換為 BarcodeReader.Read() 可以完全移除型別參數。 類型猜測迴圈(遍歷候選 BarCodeType 值的 foreach 區塊)可以完全刪除; 一次呼叫 BarcodeReader.Read() 即可替換整個循環。
更新退貨類型
Spire.Barcode 的 Scan() 回傳 string[]。IronBarcode回傳一個 BarcodeResults 集合。 呼叫指派給 string[] 或將結果傳遞給期望該類型的方法的網站需要更新。 將值提取為數組使用 .Select(r => r.Value).ToArray(); 訪問第一個結果使用 .First()?.Value。
移除 Spire.PDF 包
如果安裝 Spire.PDF 只是為了支援從 PDF 檔案中提取條碼,那麼在遷移到IronBarcode後可以將其刪除。 所有 using Spire.Pdf; 導入和手動頁面迭代塊都被單一 BarcodeReader.Read("file.pdf") 呼叫所取代。 如果 Spire.PDF 用於條碼擷取以外的其他文件操作,則應保留該條碼,並且僅替換與條碼相關的程式碼路徑。
命名空間變更
將 using Spire.Barcode; 替換為 using IronBarCode;。 枚舉 BarCodeType 被 BarcodeEncoding 替換以進行生成,讀取時不需要等效項。 許可證初始化從 BarcodeSettings.ApplyKey() 或 Spire.License.LicenseProvider.SetLicenseKey() 更改為在應用程式啟動時分配單一 IronBarCode.License.LicenseKey 屬性。
IronBarcode的其他功能
以上對比未涵蓋以下IronBarcode功能:
-批次影像讀取: BarcodeReader.Read() 接受檔案路徑陣列、Stream 物件和 Bitmap 實例,無需手動遍歷輸入集合即可進行批次處理。
- BarcodeReaderOptions :讀取速度、多條碼偵測、最大候選數和影像增強預處理均可透過傳遞至
Read()的單一選項物件進行設定。 - SVG 和 HTML 輸出:除了光柵圖片格式外,
BarcodeWriter.CreateBarcode()也支援.SaveAsSvg()和.SaveAsHtmlFile(),從而實現可嵌入網頁的條碼輸出。 -帶有徽標的二維碼:QRCodeWriter.CreateQrCode()支援所有許可等級的AddBrandLogo(),允許將自訂影像合成到二維碼中心,而不會在適當的糾錯等級下影響掃描可靠性。 -流與位元組數組輸出:產生的條碼可以匯出為Stream或byte[],以便直接儲存或寫入 HTTP 回應,而無需中間檔案。 - GS1-128 和結構化符號系統:IronBarcode包含對結構化 GS1 符號系統的支持,而 Spire.Barcode 商業版則不包含這些支援。
.NET相容性與未來準備
IronBarcode 支援.NET Framework4.6.2 及更高版本、.NET Core 3.1 以及所有版本的 .NET 5 至 .NET 9,預計隨著 .NET 10 發布計劃的逐步完善,將在 2026 年前推出對 .NET 10 的兼容性更新。該程式庫已在 Windows、Linux 和 macOS 上進行測試,並且可以在 Docker 容器中運行,無需額外的本機相依性配置。 Spire.Barcode 也支援跨平台 .NET 部署,但其 Linux 和 Docker 配置可能需要根據所使用的版本進行額外的本機程式庫設定。IronBarcode的定期發布節奏確保了新的 C# 語言特性和 .NET 運行時改進與平台相容性更新一起納入其中。
結論
Spire.Barcode 和IronBarcode根本上不同的角度看待條碼讀取問題。 Spire.Barcode 將格式知識置於呼叫者身上-每次掃描操作都需要開發人員預先聲明符號體系,這在封閉格式的工作流程中是一個可行的限制,但在開放格式的工作流程中則是一個維護負擔。IronBarcode將格式偵測功能放在庫內部,不需要型別參數,並將偵測到的格式作為結果的一部分傳回。
Spire.Barcode 對於處理單一有保證的條碼格式的應用程式來說是一個合理的選擇,特別是當團隊已經投入 E-iceblue 產品生態系統時。 設定物件生成模型對於喜歡明確配置的開發者來說很熟悉,而且商業授權對於單一開發者的專案來說也很有競爭力。 能夠保證每次調用都使用 BarCodeType.Code128 的團隊,實際上無需為強制性類型參數支付任何成本。
IronBarcode 更適合格式多樣性不可預測或不斷增長的應用,PDF 條碼提取是首要要求,以及評估準確性很重要的應用。 試驗以全生產速度和全套符號集運行,使得評估期間進行的性能基準測試和格式覆蓋率測試可以直接應用於生產部署。 原生 PDF 支援省去了對輔助庫的需求以及相關的授權費用。 對於正在考慮使用IronBarcode作為 Spire.Barcode 替代方案的團隊, Spire.Barcode 替代方案概述提供了更多有關比較的背景資訊。
最終的決定取決於格式的可預測性和工作流程的範圍。 對於採用固定 Code128 標籤標準且沒有 PDF 原始檔的倉庫系統而言,沒有實際理由優先選擇IronBarcode的自動偵測功能。 對於從外部供應商接收條碼、處理混合符號系統並讀取 PDF 附件的文件處理流程而言,強制性的類型參數和雙庫 PDF 要求會帶來持續的維護成本,而IronBarcode可以消除這些成本。
常見問題解答
Spire.Barcode是什麼?
Spire.Barcode 是一個 .NET 條碼庫,用於在 C# 應用程式中產生和讀取條碼。它是開發人員在為 .NET 專案選擇條碼解決方案時評估的幾個替代方案之一。
Spire.Barcode 和 IronBarcode 的主要差異是什麼?
IronBarcode 使用靜態、無狀態的 API,無需實例管理,而 Spire.Barcode 通常需要在使用前建立和設定實例。 IronBarcode 還提供原生 PDF 支援、自動格式偵測以及跨所有環境的單金鑰許可。
IronBarcode 的授權比 Spire.Barcode 更容易嗎?
IronBarcode 使用單一授權金鑰,同時涵蓋開發和生產部署。與將 SDK 金鑰與執行時間金鑰分開的授權系統相比,這簡化了 CI/CD 管線和 Docker 配置。
IronBarcode 是否支援 Spire.Barcode 支援的所有條碼格式?
IronBarcode 支援超過 30 種條碼符號體系,包括 QR 碼、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1 等等。格式自動偵測功能意味著無需明確枚舉格式。
IronBarcode是否支援原生PDF條碼讀取?
是的。 IronBarcode 可以直接從 PDF 檔案讀取條碼,使用 `BarcodeReader.Read("document.pdf")` 方法,無需單獨的 PDF 渲染庫。每頁的讀取結果包括頁碼、條碼格式、數值和置信度評分。
IronBarcode 與 Spire.Barcode 相比,在大量處理方面有何不同?
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 安裝程式或運行時檔案。
與 Spire.Barcode 不同,我可以在購買前評估 IronBarcode 嗎?
是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。
Spire.Barcode 和 IronBarcode 的價格有什麼不同?
IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。
從 Spire.Barcode 遷移到 IronBarcode 是否簡單?
從 Spire.Barcode 遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板程式碼以及更新結果屬性名稱。大多數遷移都是減少程式碼,而不是增加程式碼。
IronBarcode 能產生帶有 logo 的二維碼嗎?
是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

