跳過到頁腳內容
與其他組件的比較

BarcodeLib 與 IronBarcode:C# 條碼庫對比

BarcodeLib 的下載量已超過 1,200 萬次。 大多數開發者最終發現它只能創建條碼。 他們中的很大一部分人還發現了 SkiaSharp 衝突——通常是在最糟糕的時刻,當他們剛剛將 條碼庫 添加到已經依賴於 SkiaSharp 的 MAUI 或 Blazor 項目中時,構建開始拋出他們意想不到的 NU1608 警告,而他們當天下午卻沒想到要調試這些警告。 本文客觀地探討了這兩個問題。 條碼庫 是一個合法的函式庫,有明確的用途。 了解它的極限在哪裡是一個實際問題。

了解條碼庫

BarcodeLib 是一個用於 .NET 的開源條碼圖像生成庫,由 Brad Barnhill 在 GitHub 上維護。 它自 2007 年以來一直活躍,並支援超過 25 種條碼符號體系。 Apache 2.0 許可證允許其免費用於商業用途。 對於純粹的條碼生成(即從字串創建圖像),它運行可靠,並在多年的積極使用中很好地滿足了這一目的。

該API是基於實例的。 您建立一個 Barcode 對象,設定屬性,並使用類型常數和資料字串呼叫 Encode()。 然後,您可以根據需要儲存或串流 System.Drawing.Image。 這個工作流程簡潔易懂,對於僅需列印條碼圖像的項目(例如運輸標籤、庫存標籤、零售價格標籤)來說,就足夠了。

BarcodeLib 的主要架構特徵:

-僅產生範圍:該庫沒有任何讀取或解碼 API; 它的整個公共區域都面向利用資料字串產生圖像。 -基於實例的 API:每個操作都需要實例化一個 Barcode 對象,並在調用 Encode() 之前設定寬度、高度和標籤屬性。 傳回 System.Drawing.Image輸出為 GDI+ 映像對象,需要 MemoryStream 中間步驟才能產生用於 HTTP 回應或資料庫儲存的位元組數組輸出。 -僅支援產生一維和二維碼:支援超過 25 種條碼類型,包括 Code128、EAN-13、UPC-A、Code39 和二維碼,但不具備二維碼讀取功能。

  • SkiaSharp 依賴項(v3.x): 3.x 系列以 SkiaSharp 取代了 System.Drawing.Common,以實現跨平台支援; 當專案中其他軟體包也依賴 SkiaSharp 時,這會引入版本衝突風險。 -免費,無需許可證金鑰: Apache 2.0 授權涵蓋商業用途,無需執行時間金鑰或啟動。

條碼庫核心產生模式

標準的 條碼庫 產生工作流程需要建立實例、配置屬性並呼叫 Encode():

// BarcodeLib
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;

var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");
img.Save("barcode.png", ImageFormat.Png);
// BarcodeLib
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;

var b = new Barcode();
b.IncludeLabel = true;
b.Width = 300;
b.Height = 100;
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");
img.Save("barcode.png", ImageFormat.Png);
Imports BarcodeLib
Imports System.Drawing
Imports System.Drawing.Imaging

Dim b As New Barcode()
b.IncludeLabel = True
b.Width = 300
b.Height = 100
Dim img As Image = b.Encode(TYPE.CODE128, "PRODUCT-12345")
img.Save("barcode.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

這是完整的生成工作流程。 屬性設定器模式的設計是:所有配置都在實例上進行,在呼叫 Encode() 之前完成,傳回值是一個 System.Drawing.Image,必須單獨儲存或轉換為位元組。

了解 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() — 消除了 條碼庫 所需的中間 MemoryStream 模式。 讀取功能是相同軟體包的一部分,無需維護單獨的庫或 ZXing.Net 整合。

IronBarcode的主要特點:

-生成和讀取在一個套件中: BarcodeWriter 處理生成; BarcodeReader 處理讀取; 兩者都包含在同一個 NuGet 安裝套件中 -靜態流暢 API:無需實例化; 使用流暢方法後的配置鏈 CreateBarcode() -直接位元組數組輸出: .ToPngBinaryData() 返回 byte[],不包含 MemoryStream 步驟 -兩端皆支援 PDF: BarcodeReader.Read() 原生接受 PDF 檔案; 產生的輸出可以嵌入到PDF文件中。 -無 SkiaSharp 依賴:獨立於 SkiaSharp 版本圖,消除了 MAUI 和其他專案中的 NU1608 衝突 -附帶服務等級協議的商業許可:永久價格為 749 美元至 5,999 美元; 包括商業支援和保證的更新頻率

  • ReadingSpeed 調優: BarcodeReaderOptions 允許在交易量下犧牲掃描的徹底性來換取效能。

功能比較

特點 條碼庫 IronBarcode
條碼生成
條碼讀取
PDF條碼讀取
SkiaSharp依賴衝突 是的(v3.x)
流暢的鍊式 API
許可證 Apache 2.0 (免費) 749美元至5999美元永久

詳細功能比較

特點 條碼庫 IronBarcode
世代
Code128生成
EAN-13 / UPC-A 代
二維碼生成 是的(基本) 是的(高級版,支援嵌入徽標)
25+種符號體系
流暢的鍊式產生 API
直接輸出 byte[] 手動(MemoryStream .ToPngBinaryData()
PDF 產生輸出
閱讀
從影像中讀取條碼 是的(BarcodeReader.Read()
從 PDF 讀取條碼 是的(原生支持,無需額外函式庫)
多條碼檢測 是的(ExpectMultipleBarcodes
閱讀速度調整 不適用 是的(ReadingSpeed枚舉)
平台
視窗
Linux / macOS 部分(依賴 SkiaSharp) 全文
Docker/容器 需要配置
MAUI 專案相容性 衝突風險(NU1608) 無衝突
.NET Framework 4.6.2+
.NET 6–9 是的(需要 SkiaSharp 3.x)
授權
開源/免費 是的(Apache 2.0)
商業支援/服務等級協議
需要許可證密鑰
定價 自由的 749美元至5999美元永久

條碼產生 API

產生 API 代表了不同的設計概念:BarcodeLib 使用可變實例配置,而IronBarcode則使用不可變流暢鏈。

條碼庫方法

BarcodeLib 需要先建構一個實例並設定屬性,然後再呼叫 Encode()。 輸出是一個 System.Drawing.Image 物件:

using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    b.Width = 300;
    b.Height = 100;
    Image img = b.Encode(TYPE.CODE128, data);

    using var ms = new MemoryStream();
    img.Save(ms, ImageFormat.Png);
    return ms.ToArray();
}
using BarcodeLib;
using System.Drawing;
using System.Drawing.Imaging;

public byte[] GenerateCode128(string data)
{
    var b = new Barcode();
    b.IncludeLabel = true;
    b.Width = 300;
    b.Height = 100;
    Image img = b.Encode(TYPE.CODE128, data);

    using var ms = new MemoryStream();
    img.Save(ms, ImageFormat.Png);
    return ms.ToArray();
}
Imports BarcodeLib
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO

Public Function GenerateCode128(data As String) As Byte()
    Dim b As New Barcode()
    b.IncludeLabel = True
    b.Width = 300
    b.Height = 100
    Dim img As Image = b.Encode(TYPE.CODE128, data)

    Using ms As New MemoryStream()
        img.Save(ms, ImageFormat.Png)
        Return ms.ToArray()
    End Using
End Function
$vbLabelText   $csharpLabel

傳回型別 System.Drawing.Image 表示位元組陣列輸出需要 MemoryStream 中間體。 IncludeLabel 屬性是一個布林切換開關 — 條碼庫 會自動將編碼後的資料字串渲染為條形圖下方的可見標籤。

IronBarcode方法

IronBarcode 的產生是完全靜態的。 CreateBarcode() 之後的配置鏈,以及輸出方法直接終止該鏈:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

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

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

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

.ToPngBinaryData() 直接傳回位元組陣列-沒有中間 ImageMemoryStream 物件。 .AddAnnotationTextBelowBarcode() 明確地接受標籤字串,從而控制長條圖下方顯示的文字。 如需進階產生場景,請參閱IronBarcode 條碼產生文件

條碼讀取能力

閱讀是這兩座圖書館之間最重要的功能性界線。 條碼庫 不具備讀取功能;IronBarcode在同一個軟體包中包含了完整的讀取引擎。

條碼庫方法

BarcodeLib 沒有讀取 API。 沒有 Decode()Scan()ReadBarcode() 方法。 這並非版本差異——閱讀從來都不是圖書館設計的一部分。 任何呼叫解碼方法的嘗試都會導致編譯錯誤:

// 條碼庫 — reading does not exist
using BarcodeLib;

var b = new Barcode();

// This will not compile — there is no Decode or Read method
// var value = b.Decode("barcode.png");       // CS1061: no definition
// var value = b.Scan("barcode.png");          // CS1061: no definition
// var value = b.ReadBarcode("barcode.png");   // CS1061: no definition

// The only thing you can do is generate:
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");  // this works
// 條碼庫 — reading does not exist
using BarcodeLib;

var b = new Barcode();

// This will not compile — there is no Decode or Read method
// var value = b.Decode("barcode.png");       // CS1061: no definition
// var value = b.Scan("barcode.png");          // CS1061: no definition
// var value = b.ReadBarcode("barcode.png");   // CS1061: no definition

// The only thing you can do is generate:
Image img = b.Encode(TYPE.CODE128, "PRODUCT-12345");  // this works
Imports BarcodeLib

Dim b As New Barcode()

' This will not compile — there is no Decode or Read method
' Dim value = b.Decode("barcode.png")       ' CS1061: no definition
' Dim value = b.Scan("barcode.png")         ' CS1061: no definition
' Dim value = b.ReadBarcode("barcode.png")  ' CS1061: no definition

' The only thing you can do is generate:
Dim img As Image = b.Encode(TYPE.CODE128, "PRODUCT-12345")  ' this works
$vbLabelText   $csharpLabel

需要 條碼庫 同時具備產生和讀取功能的團隊必須新增第二個函式庫(通常是 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中不存在的衝突。

條碼庫方法

從 條碼庫 3.x 開始,該程式庫引入了 SkiaSharp 作為圖形後端,以取代 System.Drawing.Common,後者在 .NET 6 之後僅支援 Windows。 條碼庫 綁定到特定的 SkiaSharp 版本範圍。 如果一個專案已經透過另一個依賴項使用 SkiaSharp(這在 MAUI 專案中很常見,因為使用了 SkiaSharp.Views.MauiMicrosoft.Maui.Graphics),則解析後的版本可能超出 條碼庫 的預期範圍。 最輕的結果是出現 NU1608 警告,最重的結果是執行時期組件綁定失敗:

警告 NU1608:偵測到軟體包版本超出依賴關係約束:
BarcodeLib 3.1.5 需要 SkiaSharp (>= 2.88.7 && < 2.89.0),但
SkiaSharp 3.116.1 版本問題已解決。

透過顯式套件引用強制解析會增加複雜性,而且無法保證成功:


<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

即使進行了明確覆蓋,相容性也取決於 條碼庫 的內部 API 呼叫是否與固定版本公開的內容相符。 沒有任何支援合約能夠保證在對專案至關重要的進度時間內修復問題。

IronBarcode方法

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

API 對應參考。

條碼庫 IronBarcode
new Barcode() 靜態 API — 無需實例
b.Encode(TYPE.CODE128, "data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
b.IncludeLabel = true .AddAnnotationTextBelowBarcode("text")
b.寬度 = 300; b.高度 = 100 .ResizeTo(300, 100)
返回 System.Drawing.Image .SaveAsPng(path) / .ToPngBinaryData()
TYPE.CODE128 BarcodeEncoding.Code128
TYPE.CODE39 BarcodeEncoding.Code39
TYPE.EAN13 BarcodeEncoding.EAN13
TYPE.UPCA BarcodeEncoding.UPCA
TYPE.QR_Code BarcodeEncoding.QRCode (也 QRCodeWriter)
無讀取 API BarcodeReader.Read(path)
MAUI 中 SkiaSharp 版本衝突 沒有衝突的依賴項

當團隊考慮從 條碼庫 遷移到IronBarcode時

閱讀要求出現

一個已經產生貨運標籤數月的系統迎來了一個新的要求:該應用程式還必須處理供應商退回的標籤。 倉庫整合需要解析入庫貨物清單中的條碼。 文件管理系統需要對掃描的PDF文件中的條碼進行索引。 條碼庫 無法滿足這些要求——它沒有讀取 API。團隊評估了將 ZXing.Net 與 條碼庫 結合使用的方案,權衡了雙庫維護的負擔和兩個獨立的依賴關係圖,最終決定更簡潔的方案是使用一個庫,透過單一 NuGet 安裝即可處理生成和讀取操作。

SkiaSharp 在 MAUI 專案中的衝突

一個團隊將 條碼庫 添加到現有的 MAUI 應用程式中,並在恢復過程中立即遇到 NU1608 警告。 他們進行調查,發現 條碼庫 預期的 SkiaSharp 版本範圍與 MAUI 要求的版本不匹配,添加明確的 <PackageReference> 覆蓋以強制解決此問題,並使建置通過。 然後,當 SkiaSharp 的本機二進位檔案載入了錯誤的版本時,裝置運行時就會崩潰。 修復此問題需要對程序集綁定日誌進行更深入的調查。 切換到IronBarcode可以從根本上消除衝突——不是透過找到相容的 SkiaSharp 版本,而是透過完全消除共享依賴項。

需要進行PDF條碼處理

產生具有嵌入式條碼的 PDF 文件(例如發票、工作單、發貨清單)的應用程式有時需要在下游處理過程中讀取這些條碼。 條碼庫 可以產生條碼影像,但兩端不支援 PDF。 使用 條碼庫 從 PDF 讀取條碼需要先使用單獨的 PDF 庫將 PDF 渲染成圖像,然後將這些圖像傳遞給單獨的讀取庫。IronBarcode原生處理整個鏈:BarcodeReader.Read("file.pdf") 遍歷每一頁並傳回所有偵測到的條碼,而無需中間渲染步驟。

二維碼功能超越了基礎世代

最初只需要產生基本二維碼的項目,往往會發展到需要嵌入徽標、顏色自訂或糾錯層級配置。 條碼庫 支援透過 TYPE.QR_Code 編碼的二維碼,但除了標準的 WidthHeightIncludeLabel 屬性之外,沒有提供其他選項。IronBarcode的 QRCodeWriter 透過鍊式方法揭露徽標嵌入、顏色控制和糾錯調整。 對於那些二維碼需求超出 條碼庫 基本實現支援範圍的團隊來說,功能差距是促使他們做出遷移決定的主要因素。

常見的遷移考量

實例 API 到靜態 Fluent API

BarcodeLib 程式碼使用可變物件模式:建立一個 Barcode 實例,設定屬性,呼叫 Encode()。IronBarcode使用靜態流暢模式:呼叫 BarcodeWriter.CreateBarcode(),連結配置方法,以輸出方法結束。 將 Barcode 實例儲存為欄位或在方法之間傳遞該實例的現有程式碼需要重構。 典型的改動是用方法鏈取代屬性設定器程式碼區塊:

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

系統繪圖影像到直接輸出

BarcodeLib 回傳 System.Drawing.Image,需要 MemoryStream 來產生位元組。 任何輸入到 ImageSystem.Drawing.Image 的程式碼都需要更新。IronBarcode的流暢鏈直接以所需的輸出格式結束 — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() — 無需中間圖像物件和 MemoryStream 步驟。

TYPE Enum to BarcodeEncoding Enum

BarcodeLib 使用 TYPE 類,其中大寫常數為 TYPE.CODE128。IronBarcode使用 BarcodeEncoding 枚舉,其 PascalCase 值如 BarcodeEncoding.Code128。 數值直接對應。 在 .cs 檔案中使用 grep 指令尋找 TYPE\.,即可辨識所有需要更新的實例,然後透過系統性的尋找和替換來覆寫常見格式:CODE128 → @@--CODE-93399--DE-93399--DE-4 EAN13UPCAUPCAQR_CodeQRCode

SkiaSharp 參考清理

僅為了解決 條碼庫 的 NU1608 警告而添加明確 <PackageReference Include="SkiaSharp"> 條目的項目,在切換到IronBarcode後可以刪除這些覆蓋項。 dotnet list package --include-transitive 指令用於確認 SkiaSharp 是否仍被專案中的其他軟體包所需要,然後再刪除。

IronBarcode的其他功能

除了直接產生和讀取比較資料之外,IronBarcode 還包含 條碼庫 沒有具備的功能:

  • QR 碼標誌嵌入 QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") 將品牌標誌嵌入二維碼中心,並具有自動糾錯功能
  • PDF 條碼提取 BarcodeReader.Read("file.pdf") 無需單獨的 PDF 渲染庫即可讀取 PDF 文件每一頁的條碼 -多條碼偵測 BarcodeReaderOptions.ExpectMultipleBarcodes = true 偵測並傳回單一影像中存在的所有條碼 -讀取速度配置 ReadingSpeed.FasterReadingSpeed.BalancedReadingSpeed.ExtremeDetail 調整掃描引擎,以實現吞吐量與準確性的平衡 -樣式化二維碼產生可透過 QRCodeWriter 上的鍊式方法配置顏色、尋找圖案樣式和糾錯級別 -用於讀取的流和點陣圖輸入 BarcodeReader.Read() 接受檔案路徑、流、 System.Drawing.BitmapAnyBitmap 輸入

.NET相容性與未來準備

IronBarcode 支援 .NET Framework 4.6.2 至 .NET 9,並保持與 Microsoft .NET 發布計畫一致的定期發布節奏。 隨著 .NET 10 的普及,IronBarcode 的積極開發確保了向前相容性,而無需對專案進行任何更改。 該程式庫無需修改即可在 Windows、Linux、macOS、Docker、Azure 和 AWS Lambda 上運行。 條碼庫 也保持著活躍的社群開發,儘管其在 3.x 系列中的跨平台支援取決於上面比較部分中討論的 SkiaSharp 版本相容性。 對於面向 Linux 或容器中的現代 .NET 的項目,IronBarcode 的無依賴跨平台架構避免了 條碼庫 的 SkiaSharp 後端引入的版本協商。

結論

BarcodeLib 和IronBarcode代表了 .NET 中條碼處理的不同解決方案範圍。 條碼庫 是一個專注的、免費的、僅用於生成程式碼的函式庫,近二十年來一直可靠地滿足其定義的使用場景。IronBarcode是一個商業庫,涵蓋條碼產生和讀取,具有靜態流暢的 API,不依賴 SkiaSharp。 差別不在於共同範圍內的品質差異,而在於範圍本身。

對於在視窗上具有穩定、僅產生需求的項目,或者在 SkiaSharp 版本格局受到控制的環境中,BarcodeLib 仍然是一個真正合適的選擇。 它的 Apache 2.0 許可證、零成本和簡單易用的 API 使其成為運輸標籤系統、庫存標籤產生器和類似應用程式的實用解決方案,這些應用程式永遠不需要掃描條碼。 1,200 萬次的下載量反映出,很大一部分 .NET 開發人員確實有這樣的使用場景。

當需求超出純粹的圖像生成範圍時,IronBarcode 就成為更實用的選擇:當需要讀取功能時,當項目是 MAUI 或跨平台應用程式(可能會出現 SkiaSharp 版本衝突)時,當 PDF 條碼處理列入路線圖時,或者當需要超出基本生成範圍的 QR 碼功能時。 商業許可費用是關鍵問題——對於那些需求與IronBarcode相對於 條碼庫 所增加的功能相符的團隊來說,單一軟體包解決方案和商業 SLA 就是價值交換。

客觀來說,大多數團隊一開始就不會使用 IronBarcode。 他們首先選擇 BarcodeLib,因為它是免費且功能齊全。 當他們的需求超出 條碼庫 僅產生功能的範圍時,他們就會遷移到 IronBarcode。 遷移過程有詳細的文件記錄,API介面的變化也是可以預測的。 了解 條碼庫 的停止點(特別是它在生成階段停止)是正確做出時間決策所需的實際資訊。

常見問題解答

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 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 在單一 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 安裝程式或運行時檔案。

與 BarcodeLib 不同,我可以在購買前評估 IronBarcode 嗎?

是的。 IronBarcode 的試用模式會傳回完整的解碼條碼值-只有產生的輸出影像才會有浮水印。您可以在購買前,用自己的文件測試讀取準確率。

BarcodeLib 和 IronBarcode 的價格有什麼不同?

IronBarcode 的永久單開發者許可證起價為 749 美元,涵蓋開發和生產環境。定價詳情和大量許可選項請造訪 IronBarcode 授權頁面。無需單獨的運行時許可證。

從 BarcodeLib 遷移到 IronBarcode 是否簡單?

從 BarcodeLib 遷移到 IronBarcode 主要涉及將基於實例的 API 呼叫替換為 IronBarcode 的靜態方法、移除許可相關的樣板程式碼以及更新結果屬性名稱。大多數遷移都是減少程式碼,而不是增加程式碼。

IronBarcode 能產生帶有 logo 的二維碼嗎?

是的。 `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` 可以將品牌圖片原生嵌入二維碼中,並支援設定糾錯功能。此外,它還支援透過 `ChangeBarCodeColor()` 函數建立彩色二維碼。

Jordi Bardia
軟體工程師
Jordi 在 Python、C# 和 C++ 上最得心應手,當他不在 Iron Software 展現技術時,便在做遊戲編程。在分担產品测测试,產品開發和研究的责任時,Jordi 為持续的產品改進增值。他说这种多样化的经验使他受到挑战并保持参与, 而这也是他与 Iron Software 中工作一大乐趣。Jordi 在佛罗里达州迈阿密长大,曾在佛罗里达大学学习计算机科学和统计学。

鋼鐵支援團隊

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