跳至頁尾內容
與其他組件的比較

Accusoft BarcodeXpress 與 IronBarcode:C# 條碼庫比較

BarcodeLib vs IronBarcode:開源生成器的極限

BarcodeLib 是一個由來已久的開源 .NET 程式庫,大多數開發者最終發現它僅能用於建立條碼。 部分人會發現 SkiaSharp 版本衝突——通常是在最糟糕的時刻,當他們剛剛將BarcodeLib新增到已經依賴 SkiaSharp 的 MAUI 或 Blazor 專案中時,並且生成開始拋出 NU1608 警告。 本文涵蓋了這兩個問題。BarcodeLib是一個合法的程式庫,有明確的用途。 了解它的極限是一個實際問題。

了解 BarcodeLib

BarcodeLib 是一個用於 .NET 的開源條碼圖像生成程式庫,由 Brad Barnhill 在 GitHub 上維護。 自 2007 年以來一直活躍,支持大約 30 種一維符號變體。 Apache 2.0 協議使其可免費用於商業用途。 對於純粹的線性條碼生成——從字串建立圖像——它運行可靠,並且在多年的活躍使用中很好地完成了這一目的。

API 是基於實例的。 您建立一個 Barcode 物件,設置屬性,然後使用型別常數、資料字串和像素尺寸調用 Encode()。 結果是一個 SKImage(SkiaSharp),然後您可以根據需要編碼並保存或流式傳輸。 此工作流程是可接近的,對於需求是嚴格列印線性條碼圖像的專案——如運輸標籤、庫存標籤、零售價格標籤,它是足夠的。

BarcodeLib 的關鍵架構特性:

  • 僅生成範圍: 該程式庫沒有任何型別的讀取或解碼 API; 其整個公共表面區域都是用於從資料字串生成圖像的
  • 基於實例的 API: 每次操作都需要實例化一個 Barcode 物件,並在調用 Encode() 之前設定標籤和字型屬性
  • 返回 SKImage 輸出是一個 SkiaSharp 圖像物件,需要一個 SKEncodedImageFormat 步驟和流來生成文件或字節陣列
  • 僅用於一維符號: 支持大約 30 種線性格式,包括 Code128、EAN-13、UPC-A 和 Code39; 當前 3.x 源碼中的 BarcodeStandard.Type 枚舉不包括 QR Code、Data Matrix、PDF417、Aztec 或其他 2D 項目
  • SkiaSharp 依賴(v3.x): 3.x 系列用 SkiaSharp 替代了 System.Drawing.Common,以支持跨平台; 這引入了在項目中的其他包也依賴於 SkiaSharp 時的版本衝突風險
  • 免費,無需許可金鑰: Apache 2.0 協議涵蓋商業用途,無需運行金鑰或激活

BarcodeLib核心生成模式

標準的BarcodeLib生成工作流程需要建立一個實例,配置屬性,並使用尺寸調用 Encode()

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();
b.IncludeLabel = true;
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);

using var stream = File.OpenWrite("barcode.png");
img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream);
Imports BarcodeStandard
Imports SkiaSharp

Dim b As New Barcode()
b.IncludeLabel = True
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)

Using stream = File.OpenWrite("barcode.png")
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(stream)
End Using
$vbLabelText   $csharpLabel

這是完整的生成工作流程。 屬性設置模式是設計:配置在調用 Encode() 之前發生,返回值是一個 SKImage,必須編碼並寫入流。

理解IronBarcode

IronBarcode 是一個商業的 .NET 條碼程式庫,涵蓋生成和讀取於一個包中。 它通過 NuGet 安裝,運行於 .NET Framework 4.6.2 至 .NET 9,並能在 Windows、Linux、macOS、Docker、Azure 和 AWS Lambda 上運行。 此程式庫由 Iron Software 開發和維護,具有商業支持模型。

生成 API 是靜態且流暢的——無需建立實例,在主調用之前無需設置屬性。 配置選項連結到 BarcodeWriter.CreateBarcode()QRCodeWriter.CreateQrCode() 的結果。 在鏈末尾的輸出方法——.SaveAsPng().ToPngBinaryData().ToAnyImageData()——消除了BarcodeLib所需的中介 MemoryStream 模式。 讀取是同一個包的一部分,不需要維護單獨的程式庫或 ZXing.Net 的整合。

IronBarcode的關鍵特性:

  • 生成和讀取於一個包中: BarcodeWriter 負責生成; BarcodeReader 負責讀取; 兩者都在同一個 NuGet 安裝中提供
  • 靜態流暢的 API: 無需實例化; 使用流暢的方法在 CreateBarcode() 之後配置鏈
  • 直接字節陣列輸出: .ToPngBinaryData() 返回 byte[],無需 MemoryStream 步驟
  • PDF 支持雙端: BarcodeReader.Read() 原生接收 PDF 文件; 生成輸出可以嵌入到 PDF 中
  • 無 SkiaSharp 依賴: 獨立於 SkiaSharp 版圖,消除了在 MAUI 和其他專案中的 NU1608 衝突
  • 商業許可,附 SLA: 價格為 $749–$5,999 永久; 包括商業支持和保證的更新節奏
  • ReadingSpeed 調整: BarcodeReaderOptions 容許為性能而在容量上調整掃描徹底性

特性比較

特性 BarcodeLib IronBarcode
條碼生成 是(僅一維) 是(一維和二維)
條碼讀取
二維符號(QR,Data Matrix,PDF417,Aztec)
PDF 條碼讀取
圖依賴 SkiaSharp 是 (v3.x)
流暢的鏈式API
許可 Apache 2.0 (免費) $749–$5,999 永久

詳細特性比較

特性 BarcodeLib IronBarcode
生成
Code128生成
EAN-13 / UPC-A生成
QR Code 生成 是(含標誌嵌入)
Data Matrix / PDF417 / Aztec
一維符號廣度 ~30 個變體 30+ 個變體
流暢可連結的生成 API
直接 byte[] 輸出 手動(流體編碼) .ToPngBinaryData()
PDF 生成輸出
讀取
從圖像讀取條碼 是 (BarcodeReader.Read())
從 PDF 讀取條碼 是(原生,無需額外的程式庫)
多條碼檢測 是 (ExpectMultipleBarcodes)
讀取速度調整 不適用 是 (ReadingSpeed 枚舉)
平台
Windows
Linux / macOS 部分 (依賴於 SkiaSharp) 全力
Docker / container 需要配置
MAUI 項目相容性 衝突風險 (NU1608) 無衝突
.NET Framework 4.6.2+
.NET 6–9 是(需要 SkiaSharp 3.x)
授權
開源 / 免費 是 (Apache 2.0)
商業支持 / SLA
需要許可金鑰
定價 免費 $749–$5,999 永久

條碼生成 API

生成 API 代表了不同的設計理念:BarcodeLib 使用可變實例配置,而IronBarcode使用基於靜態輸入點的流暢鏈。

BarcodeLib方法

BarcodeLib 需要構建一個實例並在使用尺寸調用 Encode() 之前設置屬性。 輸出是 SKImage

using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
using BarcodeStandard;
using SkiaSharp;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    SKImage img = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100);

    using var ms = new MemoryStream();
    img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms);
    return ms.ToArray();
}
Imports BarcodeStandard
Imports SkiaSharp

Public Function GenerateCode128(data As String) As Byte()
    Dim b As New Barcode()
    b.IncludeLabel = True
    Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, data, 300, 100)

    Using ms As New MemoryStream()
        img.Encode(SKEncodedImageFormat.Png, 100).SaveTo(ms)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

SKImage 返回型別意味著字節陣列輸出需要 SKEncodedImageFormat 編碼調用和 MemoryStreamIncludeLabel 屬性是布尔開關——BarcodeLib 將編碼資料字串渲染為條形下方的可見標籤。

IronBarcode方法

IronBarcode 的生成是完全靜態的。 配置在 CreateBarcode() 之後連結,輸出方法直接終止鏈:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;

public byte[] GenerateCode128(string data)
{
    return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(300, 100)
        .AddBarcodeValueTextBelowBarcode()
        .ToPngBinaryData();
}
Imports IronBarCode

Public Function GenerateCode128(data As String) As Byte()
    Return BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .ResizeTo(300, 100) _
        .AddBarcodeValueTextBelowBarcode() _
        .ToPngBinaryData()
End Function
$vbLabelText   $csharpLabel

.ToPngBinaryData() 直接返回字節陣列——無中介 ImageMemoryStream 物件。 .AddBarcodeValueTextBelowBarcode() 將編碼資料字串作為標籤渲染在條形下方。 對於高級生成方案,請參閱IronBarcode 條碼生成文件

條碼讀取能力

讀取是這兩個程式庫之間最重要的功能界限。BarcodeLib沒有讀取功能;IronBarcode在同一包中包含完整的讀取引擎。

BarcodeLib方法

BarcodeLib 沒有讀取 API。 沒有 Decode()Scan()ReadBarcode() 方法。 讀取從未是該程式庫設計的一部分。 任何嘗試調用解碼方法的操作都會導致編譯錯誤:

using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
using BarcodeStandard;
using SkiaSharp;

var b = new Barcode();

// There is no Decode, Scan, or Read method on Barcode.
// b.Decode("barcode.png");      // does not exist
// b.Scan("barcode.png");        // does not exist
// b.ReadBarcode("barcode.png"); // does not exist

// The only public operation is generation:
SKImage img = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100);
Imports BarcodeStandard
Imports SkiaSharp

Dim b = New Barcode()

' There is no Decode, Scan, or Read method on Barcode.
' b.Decode("barcode.png")      ' does not exist
' b.Scan("barcode.png")        ' does not exist
' b.ReadBarcode("barcode.png") ' does not exist

' The only public operation is generation:
Dim img As SKImage = b.Encode(BarcodeStandard.Type.Code128, "PRODUCT-12345", 300, 100)
$vbLabelText   $csharpLabel

需要同時生成和讀取以及BarcodeLib的團隊必須新增第二個程式庫——通常是 ZXing.Net——這引入了其自身的依賴管理負擔以及要維護的第二 API 表面。

IronBarcode方法

BarcodeReader.Read() 接受圖像文件、PDF 文件、流和 System.Drawing.Bitmap 物件。 從 PDF 讀取不需要額外的程式庫:

using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;

// Read from an image
var results = BarcodeReader.Read("barcode.png");
Console.WriteLine(results.First().Value);  // "PRODUCT-12345"

// Read all barcodes from a PDF — no separate PDF library needed
var pdfResults = BarcodeReader.Read("invoice-batch.pdf");
foreach (var result in pdfResults)
{
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
}

// Tune reading for speed vs. thoroughness
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode

' Read from an image
Dim results = BarcodeReader.Read("barcode.png")
Console.WriteLine(results.First().Value)  ' "PRODUCT-12345"

' Read all barcodes from a PDF — no separate PDF library needed
Dim pdfResults = BarcodeReader.Read("invoice-batch.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next

' Tune reading for speed vs. thoroughness
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-scan.png", options)
$vbLabelText   $csharpLabel

ReadingSpeed 枚舉允許調整高容量場景的掃描性能。 有關讀取配置的指導,請參閱IronBarcode 讀取文件

SkiaSharp 依賴衝突

BarcodeLib 3.x 中引入的 SkiaSharp 依賴創造了一種在IronBarcode中不存在的衝突。

BarcodeLib方法

從BarcodeLib3.x 開始,該程式庫引入 SkiaSharp 作為圖形後端以取代System.Drawing.Common,後者在 .NET 6 後成為僅限 Windows。BarcodeLib 3.1.5 宣告 SkiaSharp >= 2.88.8。 若專案透過其他依賴已經使用 SkiaSharp — 在使用 SkiaSharp.Views.MauiMicrosoft.Maui.Graphics 的 MAUI 專案中很常見,這些往往趨向於 SkiaSharp 3.x — 解決的版本可能無法收歛。 結果至少是 NU1608 警告,最壞情況下是運行時程式集綁定失敗:

warning NU1608: Detected package version outside of dependency constraint:
BarcodeLib 3.1.5 requires SkiaSharp (>= 2.88.8) but
version SkiaSharp 3.116.1 was resolved.

透過顯式包引用強制解決是一種途徑,但不保證運行時的相容性:

<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
<ItemGroup>
  <PackageReference Include="BarcodeLib" Version="3.1.5" />
  <PackageReference Include="SkiaSharp" Version="3.116.1" />
  <PackageReference Include="SkiaSharp.Views.Maui.Controls" Version="3.116.1" />
</ItemGroup>
XML

即便有顯式覆寫,相容性取決於BarcodeLib的內部 API 調用與解析的 SkiaSharp 版本所暴露的一致性。 作為社區維護的專案,BarcodeLib 的發佈節奏未附商業支持合約。

IronBarcode方法

IronBarcode 不與應用程式碼共用 SkiaSharp 依賴圖譜。 無需管理版協調,無需診斷 NU1608,也無時間 SkiaSharp 版本解析綁定風險。 MAUI 專案、Blazor 專案及任何其他依賴 SkiaSharp 的應用程式可以安裝 IronBarcode,無任何版本衝突。 有關 MAUI 特定整合模式,請參閱IronBarcode MAUI 文件

API對映參考

BarcodeLib IronBarcode
new Barcode() 靜態 API — 無需實例
b.Encode(BarcodeStandard.Type.Code128, "data", 300, 100) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).ResizeTo(300, 100)
b.IncludeLabel = true .AddBarcodeValueTextBelowBarcode()
返回 SKImage .SaveAsPng(path) / .ToPngBinaryData()
BarcodeStandard.Type.Code128 BarcodeEncoding.Code128
BarcodeStandard.Type.Code39 BarcodeEncoding.Code39
BarcodeStandard.Type.Ean13 BarcodeEncoding.EAN13
BarcodeStandard.Type.UpcA BarcodeEncoding.UPCA
不支持(BarcodeLib 中無 2D) BarcodeEncoding.QRCode(也為 QRCodeWriter
無讀取API BarcodeReader.Read(path)
依賴圖中含 SkiaSharp 無 SkiaSharp 依賴

當團隊考慮從BarcodeLib遷移到IronBarcode時

出現讀取需求

已生成運輸標籤數月的系統收到新需求:應用程式還必須處理來自供應商的退回標籤。 倉庫整合需要解析入境運輸清單的條碼。 文件管理系統需要索引掃描 PDF 上的條碼。BarcodeLib無法滿足這些需求 — 不存在讀取 API。團隊評估將 ZXing.Net 新增為BarcodeLib的配套,權衡雙程式庫維護負擔和兩個獨立依賴圖,並決定更乾淨的途徑是涵蓋生成和讀取的單個 NuGet 安裝的程式庫。

MAUI 專案中的 SkiaSharp 衝突

團隊將BarcodeLib新增到現有 MAUI 應用程式中,並在恢復期間立即遇到 NU1608 警告。 他們調查並找出BarcodeLib預期的 SkiaSharp 範圍與 MAUI 所需版本之間的不匹配,新增顯式 <PackageReference> 覆蓋以強制解決,並通過構建。 然後他們在裝置上運行時遇到當 SkiaSharp 的原生二進製載入錯誤版本時的崩潰。 此問題需要更深入調查程式集綁定日誌。 切換到IronBarcode從根源消除了衝突——不是透過找到相容的 SkiaSharp 版本,而是透過完全消除共用依賴。

需要 PDF 條碼處理

生成嵌入條碼的 PDF 文件的應用——如發票、工單、運輸清單——有時需要在下游處理時再次讀取這些條碼。BarcodeLib生成條碼圖像但在任何一端都不支持 PDF。 要從 PDF 中讀取條碼,需要使用單獨的 PDF 程式庫先將其渲染為圖像,然後再將這些圖像傳遞給單獨的讀取程式庫。IronBarcode原生處理完整鏈:BarcodeReader.Read("file.pdf") 遍歷每頁並返回所有檢測到的條碼,無需中介渲染步驟。

出現 QR Code 或其他 2D 符號需求

最初僅需線性條碼的專案常常演變為需要 QR Code、Data Matrix、PDF417 或 Aztec 輸出。BarcodeLib在其 3.x 系列中不生成任何 2D 符號——BarcodeStandard.Type 枚舉不包含 QR Code 或其他 2D 項目——因此任何 2D 需求意味著新增第二個程式庫或直接取代 BarcodeLib。IronBarcode的 QRCodeWriterBarcodeWriter 涵蓋 QR Code(含標誌嵌入、顏色控制和錯誤校正調整)、Data Matrix、PDF417 和 Aztec,皆透過相同的流暢 API。 符號需求移入 2D 的團隊發現此差距驅動了遷移決策。

常見的遷移考慮因素

實例 API 到靜態流暢 API

BarcodeLib 程式碼使用可變物件模式:建立一個 Barcode 實例,設置屬性,調用 Encode()。IronBarcode使用靜態流暢模式:調用 BarcodeWriter.CreateBarcode(),連結配置方法,使用輸出方法終止。 現有的程式碼中將 Barcode 實例作為字段儲存或在方法之間傳遞將需要重構。 典型的變更是用方法鏈取代屬性設置塊:

// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
// The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .AddBarcodeValueTextBelowBarcode()
    .SaveAsPng(outputPath);
' The property setters on b become chained methods
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(300, 100) _
    .AddBarcodeValueTextBelowBarcode() _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

從 SKImage 到直接輸出

BarcodeLib 3.x 返回 SKImage,需要 SKEncodedImageFormat 和流來生成字節。 任何型別於 SKImage 或通過 image.Encode(...).SaveTo(stream) 的程式碼需要更新。IronBarcode的流暢鏈直接以所需輸出格式終止——.SaveAsPng().ToPngBinaryData().ToAnyImageData()——消除了中介圖像物件和編碼到流的步驟。

型別枚舉到條碼編碼枚舉

BarcodeLib 3.x 使用含 PascalCase 值如 BarcodeStandard.Type 的枚舉。IronBarcode使用具有值如 BarcodeEncoding.Code128 的枚舉。 一維值直接映射:Code128Code128Ean13EAN13UpcAUPCACode39Code39。 通過 BarcodeStandard.Type..cs 文件中進行 grep,識別需要更新的所有出現。

SkiaSharp 參考清理

專案中只為解決BarcodeLib的 NU1608 警告而新增顯式 <PackageReference Include="SkiaSharp"> 條目的專案可以在切換到IronBarcode後移除這些覆蓋。 dotnet list package --include-transitive 命令確認專案中其他包是否仍需要 SkiaSharp,然後再將其移除。

額外的IronBarcode能力

除了直接的生成和讀取比較,IronBarcode 還包含BarcodeLib未解決的能力:

  • QR code 標誌嵌入 QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") 將品牌標誌嵌入 QR code 中心,並自動調整錯誤校正
  • 提取 PDF 條碼 BarcodeReader.Read("file.pdf") 從 PDF 文件每頁讀取條碼,無需單獨的 PDF 渲染程式庫
  • 多條碼檢測 BarcodeReaderOptions.ExpectMultipleBarcodes = true 檢測並返回單一圖像中所有的條碼
  • 可配置讀取速度 ReadingSpeed.FasterReadingSpeed.BalancedReadingSpeed.ExtremeDetail 調整掃描引擎的吞吐量與準確度
  • 樣式化 QR code 生成 顏色、尋找圖案樣式和錯誤校正等級可通過鏈式方法 QRCodeWriter 配置
  • 流和點陣圖輸入讀取 BarcodeReader.Read() 接受文件路径、流、System.Drawing.BitmapAnyBitmap 輸入

.NET相容性和未來準備

IronBarcode 支持 .NET Framework 4.6.2 至 .NET 9,並保持與微軟的 .NET 發佈計劃一致的定期發行。 隨著 .NET 10 透過 2026 年增加採用,IronBarcode 的活躍開發保證了向前相容性而無需修改專案。 此程式庫能無需修改地在 Windows、Linux、macOS、Docker、Azure 和 AWS Lambda 上運行。BarcodeLib也保持活躍的社區開發,不過其 3.x 系列的跨平臺支援取決於比較部分所述的 SkiaSharp 版本相容性。 對於目標現代 .NET 的 Linux 或容器專案,IronBarcode 的無依賴跨平臺架構避免了BarcodeLib的 SkiaSharp 後端引入的版本協調。

結論

BarcodeLib 和IronBarcode代表了 .NET 中條碼工作的不同範疇的解決方案。BarcodeLib是一個專注的、免費的、僅生成的程式庫,已近二十年可靠地服務於其定義用途。IronBarcode是一個商業程式庫,涵蓋生成和讀取,擁有靜態流暢的 API 並無 SkiaSharp 依賴。 這不是在共享範疇內的質量差異,而是範疇本身的差異。

對於在Windows上或在 SkiaSharp 版本環境受控的環境中具有穩定、僅線性生成需求的專案,BarcodeLib 仍是合適選擇。 其 Apache 2.0 許可、零成本和簡易的 API 使其對於運輸標籤系統、庫存標籤生成器和類似的永遠不需要掃描條碼或生成 2D 符號的應用來說是一個實用的解決方案。

當需求超越線性圖像生成時,IronBarcode 成為更務實的選擇:當需要讀取功能時,當專案是 MAUI 或跨平台應用中 SkiaSharp 版本衝突可能性很大時,當 PDF 條碼處理在路線圖上或當需要任何 2D 符號 (QR Code、Data Matrix、PDF417、Aztec) 時。 商業許可費用是門檻問題——對於那些需求與IronBarcode比起BarcodeLib增加的內容相符的團隊,單包解決方案和商業支持是價值交換。

公平的評估是大多數團隊並不在一開始就選擇 IronBarcode。 他們開始時使用 BarcodeLib,因為它是免費且足夠的。 當他們的需求超越BarcodeLib的僅生成範圍支持時,他們遷移到 IronBarcode。 此過程被充分記錄,並且 API 表面變化是可預測的。 了解BarcodeLib的極限的位置——特別是它在生成處停下來——是正確做出此時機決定所需的實用資訊。

常見問題

什麼是 BarcodeLib?

BarcodeLib 是一個 .NET 條碼程式庫,用於在 C# 應用程式中生成和讀取條碼。它是開發者在選擇用於 .NET 專案的條碼解決方案時評估的幾個替代方案之一。

BarcodeLib 和 IronBarcode 之間的主要差異是什麼?

IronBarcode 使用靜態、無狀態的 API,無需實例管理,而 BarcodeLib 通常需要在使用前建立和配置實例。IronBarcode 還提供原生 PDF 支持、自動格式檢測,以及在所有環境中使用單一金鑰授權。

IronBarcode 比 BarcodeLib 更容易授權嗎?

IronBarcode使用一個覆蓋開發和生產部署的單一授權金鑰。相比於將SDK金鑰與運行時金鑰分開的授權系統,這簡化了CI/CD管道和Docker配置。

IronBarcode 支持 BarcodeLib 支持的所有條碼格式嗎?

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渲染程式庫。每頁結果包括頁碼、條碼格式、值和置信分數。

IronBarcode 相對於 BarcodeLib 如何處理批量處理?

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,與 BarcodeLib 不同嗎?

可以。IronBarcode的試用模式返回完整解碼的條碼值——只有生成的輸出圖像上有水印。您可以在自己的文件上評估讀取準確性,然後再決定購買。

BarcodeLib 和 IronBarcode 之間的價格差異是什麼?

IronBarcode起價為$749,為單開發者所適用的永久授權,覆蓋開發和生產。價格詳情和批量選項可在IronBarcode授權頁面獲得。無需單獨的運行時授權。

從 BarcodeLib 遷移到 IronBarcode 是否很簡單?

從 BarcodeLib 遷移到 IronBarcode 主要涉及用 IronBarcode 的靜態方法替換基於實例的 API 調用,移除授權樣板,並更新結果屬性名稱。大多數遷移涉及減少程式碼而不是增加程式碼。

IronBarcode可以生成帶有Logo的QR碼嗎?

可以。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") 可以原生嵌入品牌圖像進QR碼,並可配置錯誤更正。也支持通過ChangeBarCodeColor() 生成彩色QR碼。

Curtis Chau
技術作家

Curtis Chau擁有Carleton大學的電腦科學學士學位,專精於前端開發,擁有Node.js、TypeScript、JavaScript和React的專業知識。Curtis熱衷於建立直觀且美觀的使用者介面,喜愛使用現代框架並建立結構良好、視覺吸引力的手冊。

除了開發,Curtis對物聯網(IoT)有濃厚的興趣,探索創新的方法來整合硬體和軟體。在空閒時間,他喜歡玩遊戲和建立Discord機器人,結合他對技術的熱愛與創造力。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話