Accusoft BarcodeXpressとIronBarcodeの比較:C#バーコードライブラリの比較
BarcodeLib vs IronBarcode: オープンソースジェネレータが止まる場所
BarcodeLibは、ほとんどの開発者が最終的にバーコードの作成しかできないことに気づく、長年使用されているオープンソースの.NETライブラリです。 彼らの一部はまた、SkiaSharpのバージョンの衝突に気づきます。これは、BarcodeLibをSkiaSharpに既に依存するMAUIまたはBlazorプロジェクトに追加したばかりの最悪のタイミングで通常発生し、ビルドがNU1608警告を投げ始めます。 この記事では、両方の問題をカバーしています。 BarcodeLibは、明確な用途を持つ正当なライブラリです。 それがどこで止まるのかを理解することが、実際的な問題である。
BarcodeLibを理解する
BarcodeLibは、 .NET向けのオープンソースのバーコード画像生成ライブラリであり、Brad Barnhill氏によってGitHub上でメンテナンスされています。 2007年以来活発であり、おおよそ30の1Dシンボロジー変種をサポートしています。 Apache 2.0ライセンスにより、商用利用も無料です。 文字列からイメージを生成するという純粋な線形バーコード生成には、信頼性があり、アクティブな使用の多くの年を通じてその目的を果たしてきました。
このAPIはインスタンスベースです。 Encode()を呼び出します。 結果はSKImage(SkiaSharp)で、必要に応じてエンコードして保存またはストリームします。 このワークフローはアクセスしやすく、要件が厳密に線形バーコードイメージの印刷であるプロジェクトでは—送り状タグ、在庫タグ、小売価格タグ—充分です。
BarcodeLibの主なアーキテクチャ特性:
-生成のみのスコープ:このライブラリには、読み取りまたはデコード用のAPIは一切ありません。 その全表面積は、データ文字列から画像を生成することに向けられています。
- インスタンスベースのAPI: 各操作には
Encode()を呼び出します。 SKImageを返す: 出力はSkiaSharpの画像オブジェクトで、ファイルまたはバイト配列を生成するためにSKEncodedImageFormatステップとストリームが必要です。- 1Dのみのシンボロジー: Code128、EAN-13、UPC-A、Code39を含む約30の線形式をサポートします; 現在の3.xソースの
BarcodeStandard.Type列挙型には、QRコード、Data Matrix、PDF417、Aztecその他の2Dエントリが含まれていません。 - SkiaSharp依存関係 (v3.x): 3.xシリーズはクロスプラットフォームのサポートを可能にするために
System.Drawing.CommonをSkiaSharpに置き換えました; これは、プロジェクト内の他のパッケージも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
これが生成ワークフロー全体です。 プロパティセッターパターンは設計の一部です: 設定はSKImageです。
IronBarcodeを理解する
IronBarcodeは、バーコードの生成と読み取りの両方を単一のパッケージでカバーする商用.NETバーコードライブラリです。 NuGet経由でインストールでき、 .NET Framework 4.6.2から.NET 9までで動作し、Windows、Linux、macOS、Docker、Azure、およびAWS Lambdaで動作します。 このライブラリはIron Software社によって開発・保守されており、商用サポートモデルを採用しています。
生成APIは静的かつ流暢です。インスタンスを作成する必要も、プライマリ呼び出しの前にプロパティを設定する必要もありません。 設定オプションはQRCodeWriter.CreateQrCode()の結果にチェーンされます。 チェーンの終わりの出力メソッド — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() — は、BarcodeLibが必要とする中間MemoryStreamパターンを排除します。 読み込み機能は同じパッケージに含まれており、別途ライブラリやZXing .NETとの統合を維持管理する必要はありません。
IronBarcodeの主な特徴:
- 1パッケージでの生成と読み取り:
BarcodeWriterは生成を処理します;BarcodeReaderは読み取りを処理します; どちらも同じNuGetインストールに含まれています -静的流暢API:インスタンス化は不要。 設定チェーンは流暢な方法でCreateBarcode()の後に続きます - 直接的なバイト配列出力:
byte[]を返します - 両端でのPDFサポート:
BarcodeReader.Read()はPDFファイルをネイティブに受け入れます; 生成出力はPDFに埋め込むことができます - SkiaSharpへの依存なし: SkiaSharpのバージョングラフに依存しないため、MAUIや他のプロジェクトにおけるNU1608の競合が解消されます。
- SLA付き商用ライセンス:価格は749ドル~5,999ドル(永久ライセンス) 商用サポートと保証された更新頻度が含まれます。
ReadingSpeed調整:BarcodeReaderOptionsは、ボリュームでのパフォーマンス向上のためにスキャンの徹底性を調整できます
機能比較
| フィーチャー | BarcodeLib | IronBarcode |
|---|---|---|
| バーコード生成 | はい(1Dのみ) | はい(1Dおよび2D) |
| バーコード読み取り | なし | はい |
| 2Dシンボロジー(QR、Data Matrix、PDF417、Aztec) | なし | はい |
| PDFバーコード読み取り | なし | はい |
| グラフ内のSkiaSharp依存性 | はい(v3.x) | なし |
| 流暢なチェーン可能なAPI | なし | はい |
| ライセンス | アパッチ2.0(無料) | 749ドル~5,999ドルの永久ライセンス |
詳細な機能比較
| フィーチャー | BarcodeLib | IronBarcode |
|---|---|---|
| 世代 | ||
| Code128生成 | はい | はい |
| EAN-13 / UPC-A世代 | はい | はい |
| QRコード生成 | なし | はい(ロゴ埋め込みあり) |
| データマトリックス / PDF417 / アステカ | なし | はい |
| 1Dシンボロジーカバレッジ | 約30のバリアント | 30以上のバリアント |
| 流暢な連鎖生成API | なし | はい |
直接のbyte[]出力 |
手動(ストリームエンコード) | .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) | なし |
| 商用サポート/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
MemoryStreamを要求することを意味します。 IncludeLabelプロパティはブール値のトグルです - 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
MemoryStreamオブジェクトなしでバイト配列を直接返します。 .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)
BarcodeLibに加えて生成と読み取りの両方を必要とするチームは、2つ目のライブラリ(通常はZXing .NET )を追加する必要があり、これにより独自の依存関係管理の負担と、維持管理が必要な2つ目のAPIサーフェスが発生します。
IronBarcodeのアプローチ
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)
ReadingSpeed列挙型は、大量処理シナリオにおけるスキャンパフォーマンスの調整を可能にします。 読み取り設定に関するガイダンスについては、 IronBarcodeの読み取りに関するドキュメントを参照してください。
SkiaSharpの依存関係の競合
BarcodeLib 3.x で導入された SkiaSharp の依存関係は、 IronBarcodeには存在しない種類の競合を引き起こします。
BarcodeLibのアプローチ
BarcodeLib 3.xから、ライブラリはSystem.Drawing.Commonを置き換えるグラフィックスバックエンドとしてSkiaSharpを導入しましたが、.NET 6以降はWindows専用となりました。BarcodeLib 3.1.5はSkiaSharp >= 2.88.8を宣言します。 既存のプロジェクトがMicrosoft.Maui.Graphicsを使用するMAUIプロジェクトでの他の依存関係を通じてすでにSkiaSharpを使用している場合、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>
明示的なオーバーライドを使っても、互換性は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なし) | QRCodeWriterも) |
| 読み取りAPIはありません | BarcodeReader.Read(path) |
| 依存関係グラフ内のSkiaSharp | SkiaSharpの依存関係なし |
チームがBarcodeLibからIronBarcodeへの移行を検討する場合
読書要件が表示されます
数ヶ月にわたり配送ラベルを生成してきたシステムに、新たな要件が課せられた。それは、サプライヤーから返送されたラベルも処理しなければならないというものだ。 倉庫との連携では、入荷貨物明細書からバーコードを解析する必要があります。 文書管理システムは、スキャンされたPDFファイル上のバーコードをインデックス化する必要がある。 BarcodeLibはこれらの要件をいずれも満たすことができません。読み取りAPIが存在しないためです。チームはBarcodeLibに加えてZXing .NETを追加することを検討し、2つのライブラリのメンテナンス負担と2つの独立した依存関係グラフを考慮した上で、生成と読み取りの両方を単一のNuGetインストールで処理できるライブラリを使用する方がよりクリーンな方法であると判断しました。
SkiaSharp社がマウイ島のプロジェクトで紛争を発生
あるチームが既存のMAUIアプリケーションにBarcodeLibを追加したところ、復元中にすぐにNU1608警告が発生しました。 BarcodeLibが期待するSkiaSharpの範囲とMAUIが要求するバージョンの不一致を調査で特定し、解決を強制するために明示的な<PackageReference>のオーバーライドを追加し、ビルドをパスさせます。 その後、SkiaSharpのネイティブバイナリが誤ったバージョンをロードした際に、デバイス上でランタイムクラッシュが発生する。 この問題を解決するには、アセンブリバインディングログの詳細な調査が必要です。 IronBarcodeに切り替えることで、根本的な競合が解消されます。これは、互換性のあるSkiaSharpのバージョンを探すのではなく、共有されている依存関係を完全に排除することによって実現されます。
PDFバーコード処理が必要です
請求書、作業指示書、出荷明細書など、バーコードが埋め込まれたPDF文書を生成するアプリケーションは、後続の処理中にそれらのバーコードを読み取る必要がある場合があります。 BarcodeLibはバーコード画像を生成しますが、PDFファイルへの対応はしていません。 BarcodeLibを使用してPDFからバーコードを読み取るには、まず別のPDFライブラリを使用してPDFを画像にレンダリングし、次にその画像を別の読み取りライブラリに渡す必要があります。 IronBarcodeは完全なチェーンをネイティブで処理します: BarcodeReader.Read("file.pdf")がすべてのページを走査し、中間レンダリングステップなしで検出されたすべてのバーコードを返します。
QRコードや他の2Dシンボロジー要件が現れる
元々は線形バーコードだけが必要だったプロジェクトは、しばしばQRコード、Data Matrix、PDF417、またはAztecの出力を必要とするように進化します。 BarcodeLibの3.xシリーズでは、2Dシンボロジーを生成しません — BarcodeStandard.Type列挙型にはQRコードやその他の2Dエントリが含まれていないため、2D要件は別のライブラリを追加するか、BarcodeLibを完全に置き換える必要があります。 IronBarcodeのBarcodeWriterは、同じ流暢なAPIを通じてQRコード(ロゴ埋め込み、色制御、およびエラー訂正調整を行う)、Data Matrix、PDF417、Aztecをカバーします。 シンボロジー要件が2Dへと移行するチームは、そのギャップが移行の決定要因であることを発見します。
一般的な移行の考慮事項
インスタンスAPIから静的Fluent APIへ
BarcodeLibコードはミュータブルオブジェクトパターンを使用します: 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)
SKImageから直接出力へ
BarcodeLib 3.xはSKEncodedImageFormatとストリームが必要です。 image.Encode(...).SaveTo(stream)を通過するコードは更新が必要です。 IronBarcodeの流暢なチェーンは、目的の出力形式で直接終了します — .SaveAsPng(), .ToPngBinaryData(), .ToAnyImageData() — 中間の画像オブジェクトやストリームへのエンコードステップが不要になります。
Type Enum to BarcodeEncoding Enum
BarcodeLib 3.xはBarcodeStandard.Type.Code128のようなPascalCase値を持ちます。 IronBarcodeはBarcodeEncoding.Code128のような値を持ちます。 1D値は直接対応します: Code128 → Code128, Ean13 → EAN13, UpcA → UPCA, Code39 → Code39。 .cs ファイル全体のBarcodeStandard.Type.をgrepして、更新が必要なすべての出現を特定します。
SkiaSharp リファレンスのクリーンアップ
BarcodeLibのNU1608警告を解決するために明示的な<PackageReference Include="SkiaSharp">エントリを追加したプロジェクトは、IronBarcodeに切り替えた後はこれらのオーバーライドを削除できます。 プロジェクト内の他のパッケージでSkiaSharpがまだ必要とされているかどうかを削除前に確認するには、dotnet list package --include-transitiveコマンドを使用します。
IronBarcodeの追加機能
IronBarcodeは、直接的な生成と読み取りの比較機能に加え、BarcodeLibでは対応していない機能も備えています。
- QRコードのロゴ埋め込み:
QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")はQRコードの中心にブランドロゴを埋め込み、自動エラー訂正調整を行います - PDFバーコード抽出:
BarcodeReader.Read("file.pdf")は、別のPDFレンダリングライブラリなしでPDFドキュメントのすべてのページからバーコードを読み取ります - 複数バーコード検出:
BarcodeReaderOptions.ExpectMultipleBarcodes = trueは単一の画像内に存在するすべてのバーコードを検出し返します - 読み取り速度設定:
ReadingSpeed.Faster,ReadingSpeed.Balanced, およびReadingSpeed.ExtremeDetailは、スループット対精度に対するスキャンエンジンを調整します - スタイル付きQRコード生成: 色、ファインダーパターンスタイル、エラー訂正レベルは
QRCodeWriterの連鎖メソッドを通じて構成可能です - 読み取り用のストリームとビットマップ入力:
System.Drawing.Bitmap, およびAnyBitmap入力を受け入れます
.NETの互換性と将来の準備
IronBarcodeは.NET Framework 4.6.2から.NET 9までをサポートしており、Microsoftの.NETリリーススケジュールに合わせた定期的なリリースを行っています。 .NET 10の採用が2026年まで増加するにつれて、IronBarcodeの積極的な開発により、プロジェクトの変更を必要とせずに将来の互換性が確保されます。 このライブラリは、Windows、Linux、macOS、Docker、Azure、およびAWS Lambda上で、変更なしで動作します。 BarcodeLibは活発なコミュニティ開発も維持していますが、3.xシリーズにおけるクロスプラットフォーム対応は、上記の比較セクションで説明したSkiaSharpのバージョン互換性に依存します。 Linux上またはコンテナ環境における最新の.NETをターゲットとするプロジェクトの場合、IronBarcodeの依存関係のないクロスプラットフォームアーキテクチャは、BarcodeLibのSkiaSharpバックエンドがもたらすバージョンネゴシエーションを回避します。
結論
BarcodeLibとIronBarcodeは、 .NETにおけるバーコード処理のための異なる範囲のソリューションを提供します。 BarcodeLibは、生成機能に特化した無料のライブラリであり、20年近くにわたり、その明確な用途において信頼性の高いサービスを提供してきました。 IronBarcodeは、生成と読み取りの両方をカバーする商用ライブラリで、静的で流暢なAPIを備え、SkiaSharpへの依存関係はありません。 違いは、共有範囲内における品質の違いではなく、共有範囲そのものの違いである。
BarcodeLibは、Windows上またはSkiaSharpバージョンの管理がされている環境で、安定した線形生成のみの要件を満たすプロジェクトにとって適切な選択肢として残ります。 そのApache 2.0ライセンス、ゼロコスト、および簡潔なAPIは、ラベル出荷システム、在庫タグジェネレーター、および2Dシンボロジーを生成しない類似のアプリケーションに対する実用的なソリューションとなります。
IronBarcodeは、リニアイメージ生成にとどまらない要件に移行した場合に、より実用的な選択肢になります:読み取り機能が必要な場合、プロジェクトがSkiaSharpのバージョンコンフリクトが想定されるMAUIまたはクロスプラットフォームアプリケーションである場合、PDFバーコード処理がロードマップにある場合、またはQRコード、Data Matrix、PDF417、Aztecなどの2Dシンボロジーが必要な場合です。 商業ライセンスのコストは、この閾値の質問を表します—IronBarcodeがBarcodeLibよりも追加する機能に要件が一致するチームにとって、単一パッケージソリューションと商業サポートは価値の交換です。
率直に言って、ほとんどのチームは最初からIronBarcodeを導入しているわけではありません。 無料で十分な機能を備えているため、彼らはBarcodeLibから使い始める。 要件がBarcodeLibの生成のみの範囲を超えた場合、彼らはIronBarcodeに移行します。 移行プロセスは十分に文書化されており、APIインターフェースの変更点も予測可能です。 BarcodeLibがどこで停止するのか、具体的には生成の段階で停止するということを理解することが、タイミングに関する適切な判断を下すために必要な実践的な情報となる。
よくある質問
BarcodeLibとは何ですか?
BarCodeLib は、C# アプリケーションでバーコードを生成および読み取るための .NET バーコードライブラリです。BarCodeLib は、.NET プロジェクトのバーコードソリューションを選択する際に、開発者が評価するいくつかの選択肢の 1 つです。
BarcodeLibとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用しますが、BarcodeLibは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、およびすべての環境でのシングルキーライセンスを提供します。
IronBarcodeはBarcodeLibよりもライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはBarcodeLibがサポートしているすべてのバーコードフォーマットをサポートしていますか?
IronBarcodeはQRコード、Code 128、Code 39、DataMatrix、PDF417、Aztec、EAN-13、UPC-A、GS1など30以上のバーコードシンボロジーをサポートしています。フォーマットの自動検出は、明示的なフォーマットの列挙が不要であることを意味します。
IronBarcodeはネイティブPDFバーコード読み取りをサポートしていますか?
IronBarcodeは、別のPDFレンダリングライブラリを必要とせず、BarCodeReader.Read("document.pdf")を使用してPDFファイルから直接バーコードを読み取ります。ページごとの結果には、ページ番号、バーコードフォーマット、値、信頼度スコアが含まれます。
IronBarcodeはBarcodeLibと比べてどのようにバッチ処理を行いますか?
IronBarcodeの静的メソッドはステートレスで当然スレッドセーフであり、スレッドごとのインスタンス管理なしにParallel.ForEachを直接使用できます。どの価格帯でもスループットの上限はありません。
IronBarcode はど for .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をインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。
購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
BarcodeLibとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
BarcodeLibからIronBarcodeへの移行は簡単ですか?
BarcodeLibからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeのスタティックメソッドに置き換えたり、ライセンスの定型文を削除したり、結果のプロパティ名を更新したりします。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

