Barcoder 與 IronBarcode:C# 條碼庫對比
要使用 條碼 產生單一 PNG,您需要安裝兩個軟體包,匯入三個命名空間,使用特定格式的類別進行編碼,建立一個帶有選項物件的渲染器,打開一個串流,渲染到該串流中,然後釋放該串流。 這就是全部的幸福之路——而且它只涵蓋寫作。 條碼器根本沒有讀取 API。 該程式庫的 MIT 授權和開源特性使其乍看之下就很有吸引力,尤其對於試圖避免商業依賴的團隊而言。 但是,這種碎片化的架構——至少需要兩個 NuGet 包,每個條碼格式都需要一個不同的編碼器類,並且渲染器管道將編碼和輸出完全分開——一旦需求超出最簡單的單一格式生成場景,就會造成真正的摩擦。
條碼的理解
Barcoder 是一個開源的 .NET 條碼產生函式庫,可在 NuGet 上以 MIT 授權取得。 它可以將資料編碼成條碼格式,包括 Code128、QR、DataMatrix、EAN-13、PDF417 等。 此設計理念將編碼與渲染完全分離-核心庫產生一個 IBarcode 物件(一種資料結構),而一個單獨的渲染器包將該物件轉換為圖像。
這種設計的實際效果在第一次安裝後就顯現出來了。 要進行任何 PNG 輸出,需要兩個 NuGet 套件:Barcoder 用於編碼,Barcoder.Renderer.Image 用於渲染。 如果還需要 SVG 輸出,則必須新增第三個軟體包 — Barcoder.Renderer.Svg —。 這些軟體包的版本是獨立的,這意味著對其中一個軟體包的更新不會自動與另一個軟體包同步,因此在整個專案中保持它們同步將成為重複性的維護任務。
條碼器的關鍵架構特徵:
- PNG 輸出需要兩個 NuGet 套件:
Barcoder用於編碼,Barcoder.Renderer.Image用於渲染為圖片格式 -特定格式的編碼器類別:每種條碼類型都有自己的編碼器,位於其自身的命名空間中—例如Code128Encoder、QrEncoder、DataMatrixEncoder@ 等等。 IBarcode沒有輸出方法:編碼結果是一個普通的資料物件。 渲染器必須單獨構造,流必須開啟、渲染到流中,然後關閉。 -映像渲染器不再支援 .NET Framework:基於.NET Framework的 Teams 無法使用映像渲染器包 -無讀取功能:條碼編碼器無法解碼來自影像、檔案或任何其他來源的條碼。 -獨立軟體包版本控制:Barcoder和Barcoder.Renderer.Image在依賴項更新期間可能會出現版本差異
多包生成工作流程
安裝過程立刻就能說明範圍上的差異。 使用 條碼 時,基本的 PNG 輸出需要兩個單獨的軟體包:
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
產生 Code128 條碼並將其儲存為 PNG 格式的完整工作流程需要三個命名空間匯入、一個特定格式的編碼器呼叫、一個帶有選項物件的渲染器建構、一個檔案流和一個渲染呼叫:
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End Using
切換條碼格式不是參數變更-它需要匯入不同的命名空間並呼叫不同的類別。 Code128Encoder.Encode 接受一個布林值,includeChecksum,QrEncoder.Encode 接受一個糾錯層級和兩個附加的布林值,而 DataMatrixEncoder.Encode 只接受一個字串。 目前還沒有統一的介面來創建指定格式的條碼。
了解 IronBarcode
IronBarcode 是一個商業的 .NET 條碼庫,它透過一個 NuGet 套件實現了條碼的產生和讀取。 它使用圍繞兩個主要類別構建的靜態 API 模型——BarcodeWriter 用於生成,BarcodeReader 用於讀取——並將所有格式選擇路由到 BarcodeEncoding 枚舉,而不是透過特定於格式的類別或命名空間。
該程式庫旨在最大限度地縮短從編寫第一行條碼程式碼到獲得有效輸出之間的距離。 生成、讀取、PDF 支援、帶有嵌入式徽標的二維碼以及所有輸出類型都包含在一個軟體包中,只需追蹤一個版本即可。
IronBarcode的主要特點:
-單一 NuGet 套件: IronBarcode 涵蓋所有功能—生成、讀取、PDF 和所有輸出格式
-統一格式選擇:所有條碼類型透過 BarcodeEncoding 枚舉值進行定址; 沒有特定格式的匯入或類別
-結果物件上的輸出方法: GeneratedBarcode 直接公開 SaveAsPng、ToPngBinaryData、ToStream、SaveAsSvg 及 @
-原生讀取功能: BarcodeReader.Read() 無需輔助庫即可解碼影像檔案、位元組陣列、流和 PDF 檔案。
-支援 MAUI、Docker、AWS Lambda 和 Azure:文件記錄了除標準桌面和伺服器場景之外的部署目標
-全面支援.NET Framework和現代 .NET 版本:.NET Framework4.6.2 至 .NET 9
功能比較
| 特點 | 條碼 | IronBarcode |
|---|---|---|
| 需要 NuGet 套件 | 至少 2 人 | 1 |
| 條碼生成 | 是 | 是 |
| 條碼讀取 | 無 | 是 |
| 執照 | 麻省理工學院(開源) | 商業的 |
| .NET Framework 支持 | 影像渲染器中已刪除 | .NET Framework4.6.2+ |
| PDF閱讀 | 無 | 是 |
| 帶有徽標的二維碼 | 無 | 是 |
詳細功能比較
| 特點 | 條碼 | IronBarcode |
|---|---|---|
| 世代 | ||
| Code128生成 | 是 | 是 |
| 二維碼生成 | 是 | 是 |
| DataMatrix 生成 | 是 | 是 |
| EAN-13,PDF417 | 是 | 是 |
| 帶有嵌入式徽標的二維碼 | 無 | 是的 — .AddBrandLogo(path) |
| 透過枚舉選擇格式 | 不——每種格式都有單獨的編碼器類 | 是的 — BarcodeEncoding 枚舉 |
| 輸出 | ||
| PNG 輸出 | 是的(透過 Barcoder.Renderer.Image) | 是的 — .SaveAsPng() |
| SVG 輸出 | 是(透過 Barcoder.Renderer.Svg) | 是的 — .SaveAsSvg() |
| 二進位數據輸出 | 是的(透過 MemoryStream) | 是的 — .ToPngBinaryData() |
| 串流輸出 | 是的(手動流管理) | 是的 — .ToStream() |
| 直接調整大小 API | 否 — PixelSize 僅縮放因子 |
是的 — .ResizeTo(width, height) |
| 閱讀 | ||
| 從圖像檔案中讀取 | 無 | 是 |
| 從PDF文件閱讀 | 無 | 是 |
| 從流中讀取 | 無 | 是 |
| 多條碼檢測 | 無 | 是的 — ExpectMultipleBarcodes |
| 閱讀速度控制 | 無 | 是的 — ReadingSpeed 枚舉 |
| 平台 | ||
| .NET Core / .NET 5+ | 是 | 是 |
| .NET Framework | 影像渲染器中已刪除 | .NET Framework4.6.2+ |
| .NET 9 | 活動不明/有限 | 是 |
| MAUI(iOS、Android、Windows、macOS) | 無 | 是 |
| Docker / Azure / AWS Lambda | 未記錄。 | 是 |
| 包裝 | ||
| 獨立軟體包版本控制風險 | 是 | 不——單一包裹 |
| 每個格式的命名空間 | 是 | 不 — 單一 using IronBarCode |
| 授權 | ||
| 許可模式 | 麻省理工學院(開源) | 商業的 |
| 定價 | 自由的 | Lite版 749美元,Plus版 1499美元,Professional版 2999美元,Unlimited版 5999美元 |
格式選擇和產生 API
條碼格式選擇的結構方式會對產生條碼的程式碼庫的每個部分產生下游影響。
條碼法
條碼器透過不同命名空間中的不同編碼器類別來選擇格式。 切換格式意味著新增一個新的 using 指令,並使用具有不同方法簽名的不同類別:
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix
' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)
' QR Code — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix — different namespace, different class again
barcode = DataMatrixEncoder.Encode("data")
每個編碼器都有自己的參數合約。 在現有專案中新增格式並非簡單的文字變更-它需要匯入新的命名空間、學習新的類別並理解新的參數。
IronBarcode方法
IronBarcode 以統一的 BarcodeWriter 類別上的 BarcodeEncoding 枚舉路由所有格式選擇。 新增格式只需對枚舉值進行一個單字的變更:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
Imports IronBarCode
' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")
' DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")
' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
生產環境使用時,請在應用程式啟動時新增許可證密鑰:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
IronBarcode 條碼產生文件涵蓋了所有產生選項,包括樣式、邊距和顏色自訂。
渲染和輸出選項
將條碼輸出轉換為不同的格式(檔案、二進位資料、流)是一個常見的需求,但每個函式庫的處理方式都大不相同。
條碼法
Barcoder 將編碼與渲染分離的架構理念是合理的,但每次輸出格式變更都會產生額外的開銷。 儲存到檔案需要開啟 FileStream。 取得二進位資料需要開啟一個 MemoryStream 並呼叫 ToArray()。 每種輸出場景都需要建立一個帶有選項物件的渲染器:
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
尺寸控制是間接的:PixelSize 是條碼模組尺寸的縮放倍數,而不是直接的寬度和高度規格。
IronBarcode方法
IronBarcode 傳回一個 GeneratedBarcode 對象,可以透過鍊式方法呼叫存取任何輸出形式。 無需渲染器構建,無需流管理:
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
' File
barcode.SaveAsPng("barcode.png")
' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()
' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
.ResizeTo(width, height) 接受顯式像素尺寸,並與同一物件上的任何輸出方法連結。
讀取條碼
Barcoder 中缺少讀取 API 是一個硬性的架構限制,而不是設定選擇。
條碼法
條碼器不具備讀取或解碼功能。 目前沒有 API,也沒有計畫推出 API,函式庫中也沒有任何變通方法。 如果應用程式需要讀取條碼,則必須將第二個程式庫(一個單獨的 NuGet 依賴項,具有自己的 API 介面和自己的版本追蹤)與 條碼 一起新增。 這意味著至少需要兩個與讀取相關的依賴項:用於產生的條碼,以及用於讀取的其他東西。
IronBarcode方法
IronBarcode 使用相同軟體包和一致的 API 模式,同時支援條碼產生和讀取。 BarcodeReader.Read() 方法原生支援圖像檔案、位元組數組、流和 PDF 檔案:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// 從PDF文件閱讀 — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// 從PDF文件閱讀 — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Console.WriteLine(result.Format)
Next
' 從PDF文件閱讀 — no conversion step, no extra dependency
Dim pdfResults = BarcodeReader.Read("document.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
讀取 PDF 檔案是原生操作-無需中間影像擷取、轉換庫或額外軟體包。 IronBarcode 條碼讀取文件涵蓋多頁 PDF、感興趣區域讀取和效能調優。
API 對應參考。
| 條碼 | IronBarcode |
|---|---|
Code128Encoder.Encode("data", false) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) |
QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... }) |
不需要-輸出來自 GeneratedBarcode |
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode(資料結構,無輸出方法) |
GeneratedBarcode(含 SaveAsPng、ToPngBinaryData、ToStream、ResizeTo. 等) |
Barcoder + Barcoder.Renderer.Image (2 個軟體包) |
IronBarcode (1 個軟體包) |
using Barcoder.Code128 |
using IronBarCode(單命名空間,所有格式) |
using Barcoder.Qr |
using IronBarCode |
using Barcoder.DataMatrix |
using IronBarCode |
| 無讀取 API | BarcodeReader.Read(path / bytes / stream / pdf) |
| 沒有.NET Framework映像渲染器 | .NET Framework4.6.2+ |
PixelSize + BarHeightFor1DBarcode 選項 |
.ResizeTo(width, height) |
當團隊考慮從 條碼 遷移到IronBarcode時
閱讀被列入要求中。
許多項目最初都是純粹的生成流程——列印標籤、產生文件代碼、在報告中嵌入條碼。 條碼 為這些項目提供初始支援。 當同一個應用程式稍後需要驗證傳入的條碼、處理掃描的文件或解碼上傳的 PDF 中的條碼時,Barcoder 無法提供任何解決方案。 團隊必須評估第二個函式庫,了解其 API,單獨管理其 NuGet 版本,並處理兩個庫之間的整合介面。 達到這一步驟的團隊通常會合併到一個可以處理雙方的庫中,而不是維護兩個獨立的條碼依賴項。
.NET Framework相容性中斷
Barcoder.Renderer.Image 已放棄對.NET Framework的支援。 在.NET Framework4.x 上維護服務或桌面應用程式的團隊,如果在例行相依性維護期間更新映像渲染器包,則會遇到產生失敗。 這不是配置錯誤——這是庫的平台支援決定。IronBarcode支援.NET Framework4.6.2 至 .NET 9,無需針對不同目標進行特殊打包或條件依賴。
軟體包版本漂移導致協調問題
由於 Barcoder 和 Barcoder.Renderer.Image 是獨立版本化的,在依賴項刷新期間,如果只更新其中一個而不更新另一個,可能會引入細微的不相容性。 在一個包含多個專案的儲存庫中——每個專案都使用不同版本的渲染器套件——確保跨專案的行為一致就變成了一個協調問題,而且這個問題會隨著團隊規模的擴大而加劇。 使用IronBarcode整合團隊後發現,管理軟體包和一個版本可以徹底消除此類問題。
格式覆蓋範圍隨時間擴大
一個專案可能從 Code128 標籤開始,之後添加二維碼作為面向客戶的鏈接,然後添加 DataMatrix 以滿足合規性要求。 使用 條碼 時,每增加一種格式都意味著需要匯入一個新的命名空間,一個具有不同方法參數的不同編碼器類,並且可能需要一個新的 NuGet 套件。 使用 IronBarcode,新增格式是對現有呼叫中 BarcodeEncoding 枚舉值的變更。 對於規劃擴展條碼格式覆蓋範圍的團隊來說,基於枚舉的模型更容易維護。
MAUI 和跨平台部署要求
Barcoder 沒有提供 MAUI、Docker、AWS Lambda 或 Azure 部署的支援文件。 建立跨平台 MAUI 應用程式或將條碼處理部署到無伺服器基礎架構的團隊發現,Barcoder 的文件和測試並未涵蓋這些目標。IronBarcode提供文件並積極測試在 iOS、Android、Windows、macOS MAUI 目標、Docker 容器和主要雲端平台上的部署。
常見的遷移考量
將 IBarcode 改為 GeneratedBarcode 類型更改
儲存 IBarcode 變數並將其傳遞給渲染器的條碼程式碼必須進行重構。 在IronBarcode中,GeneratedBarcode 有其自身的輸出方法—沒有單獨的渲染步驟。任何目前接受 IBarcode 的方法簽名都應該更改為接受 GeneratedBarcode,並且該方法內部的渲染調用應該改為直接調用,例如 .SaveAsPng() 或 @@--CODE-93508-- .SaveAsPng() 或 @@--CODE@@。 類型系統會在編譯期間顯示所有需要更新的位置-刪除 條碼 套件後,IBarcode 將無法解析。
PixelSize 沒有直接等效項
條碼的 PixelSize 是條碼自然模組尺寸的縮放倍數,而不是顯式的像素尺寸。 輸出寬度取決於條碼內容、格式和倍數的組合。IronBarcode使用 .ResizeTo(width, height),並明確指定像素尺寸。 遷移過程中,測量現有條碼程式碼實際輸出的尺寸,並在 .ResizeTo() 呼叫中使用這些值:
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ResizeTo(300, 80) _
.SaveAsPng("barcode.png")
命名空間合併
條碼項目會累積 using Barcoder.* 語句-每個使用的格式一個語句。 在遷移過程中,所有這些都合併為一個 using IronBarCode;。 在解決方案中搜尋 using Barcoder 將找到所有需要更新的檔案。 受影響的文件數量通常比團隊預期的要多,因為每個涉及條碼格式的文件都會匯入其自身特定於格式的命名空間。
SVG 輸出路徑更改
使用 Barcoder.Renderer.Svg 和 SvgRenderer 類別的項目將渲染器管道替換為對 GeneratedBarcode 的直接方法呼叫:
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
Imports System.IO
' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")
所有 SVG 渲染站點遷移完畢後,即可刪除 Barcoder.Renderer.Svg 軟體包。
IronBarcode的其他功能
除了上述比較點之外,IronBarcode 還包含 條碼 所沒有的功能:
-帶有嵌入式標誌的二維碼: .AddBrandLogo(path) 將品牌圖像嵌入二維碼中心,而不會影響掃描功能
-原生 PDF 條碼讀取: BarcodeReader.Read("document.pdf") 直接處理 PDF 文件,無需先擷取影像。
-多條碼檢測: ExpectMultipleBarcodes 選項透過一次呼叫讀取單一影像或 PDF 頁面中的所有條碼
-讀取速度控制: ReadingSpeed.Balanced、Faster 和 Slower 針對不同的使用場景調整精度和速度之間的權衡
- MAUI 跨平台部署: iOS、Android、Windows 和 macOS 平台的 MAUI 目標平台均經過積極測試並有文件記錄。
- Docker 和雲端部署: Docker 容器、AWS Lambda 和 Azure Functions 的部署路徑文檔
-條碼樣式和自訂:
GeneratedBarcode的顏色、邊距、註解文字和背景自訂
.NET相容性與未來準備
IronBarcode 支援.NET Framework4.6.2、.NET Core 2.x、.NET 5、.NET 6、.NET 7、.NET 8 和 .NET 9。該專案仍在積極開發中,定期更新,並且已將相容於 .NET 10(預計於 2026 年底發布)納入已公佈的路線圖。 條碼 的映像渲染器已停止支援 .NET Framework,並且最近幾個版本中該程式碼庫的更新活動有限,因此該程式庫對 .NET 9 及未來版本的兼容性尚不明確。 對於需要較長支援期和與即將推出的 .NET 版本可預測相容性的團隊而言,IronBarcode 積極的發布節奏提供了更大的保障。
結論
Barcoder 和IronBarcode的功能範圍截然不同。 條碼 是一個僅用於產生資料的函式庫,它在編碼和渲染之間實現了原則性的分離——資料結構和渲染管線在設計上是兩個獨立的層。IronBarcode是一個完整的條碼庫,其中產生和讀取共享一個軟體包、一個命名空間和一致的靜態 API。 當需求擴展時,架構上的差異就顯得最為明顯:Barcoder 的多包、多命名空間、無讀取設計使得每次添加都是一項結構性任務,而IronBarcode將新格式或功能的添加視為配置更改。
如果一個專案確實只需要產生條碼,並且僅面向 .NET Core,只會使用少量條碼格式,而 MIT 授權是硬性要求,那麼 條碼 就是正確的選擇。 該程式庫在這些範圍內按文件所述運行,對於沒有讀取要求且沒有.NET Framework目標的嚴格範圍專案而言,零成本的開源選項是合理的。
如果專案需要讀取和產生條碼,目標平台是.NET Framework或跨平台 MAUI 部署,預計會隨著時間推移添加條碼格式,或者需要在 Docker 或雲端環境中部署,那麼IronBarcode是正確的選擇。 單包模型和基於枚舉的格式選擇消除了隨著專案範圍擴大而使用 條碼 累積的開銷。
實際的決定取決於發展軌跡。 對於一個確定只是簡單的單一格式產生器且沒有讀取要求的項目來說,條碼器可以很好地滿足需求。 如果一個專案的條碼需求有任何模糊之處——例如添加格式、添加讀取功能、跨平台部署——那麼該專案將會比預期更快地遇到 條碼 的架構限制。 這兩個庫都是可靠的工具; 問題是,哪一個比較符合實際的工作範圍。
常見問題解答
什麼是條碼?
Barcoder 是一個 .NET 條碼庫,用於在 C# 應用程式中產生和讀取條碼。它是開發人員在為 .NET 專案選擇條碼解決方案時評估的幾個替代方案之一。
Barcoder 和 IronBarcode 的主要差異是什麼?
IronBarcode 使用靜態、無狀態的 API,無需實例管理,而 Barcoder 通常需要在使用前建立實例並進行設定。 IronBarcode 還提供原生 PDF 支援、自動格式偵測以及跨所有環境的單金鑰許可。
IronBarcode 的授權比 Barcoder 容易嗎?
IronBarcode 使用單一授權金鑰,同時涵蓋開發和生產部署。與將 SDK 金鑰與執行時間金鑰分開的授權系統相比,這簡化了 CI/CD 管線和 Docker 配置。
IronBarcode是否支援Barcoder支援的所有條碼格式?
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 與 Barcoder 相比,在大量處理方面有何不同?
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 安裝程式或運行時檔案。
與 Barcoder 不同,我可以在購買前評估 IronBarcode 嗎?
是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。
Barcoder 和 IronBarcode 的價格差異是多少?
IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。
從 Barcoder 遷移到 IronBarcode 是否很簡單?
從 Barcoder 遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板程式碼以及更新結果屬性名稱。大多數遷移都是減少程式碼,而不是增加程式碼。
IronBarcode 能產生帶有 logo 的二維碼嗎?
是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

