BarCoder vs IronBarcode:C#バーコードライブラリの比較
Barcoderで単一のPNGを生成するには、2つのパッケージをインストールし、3つの名前空間をインポートし、フォーマット固有のクラスでエンコードし、オプションオブジェクトを使用してレンダラーを作成し、ストリームを開き、そこにレンダリングし、ストリームを破棄します。 それが幸福への道のりの全てであり、しかもそれは執筆活動のみを対象としている。 Barcoderには読み取りAPIが一切ありません。 このライブラリはMITライセンスを採用しており、オープンソースであるため、特に商用依存を避けたいチームにとっては、一見魅力的に映る。 しかし、断片化されたアーキテクチャ(最低でも2つのNuGetパッケージが必要で、バーコード形式ごとに異なるエンコーダークラスを使用し、エンコードと出力を完全に分離するレンダラーパイプラインを採用している)は、最も単純な単一フォーマット生成シナリオを超えて要件が複雑化すると、すぐに大きな摩擦を生む。
バーコードを理解する
Barcoderは、MITライセンスの下でNuGetから入手可能なオープンソースの.NETバーコード生成ライブラリです。 Code128、QR、DataMatrix、EAN-13、PDF417などのバーコード形式にデータをエンコードします。 コア・ライブラリはオブジェクト(データ構造)を生成し、別のレンダラー・パッケージがそのオブジェクトを画像に変換します。
この設計の実際的な影響は、最初の設置時から明らかになる。 PNG出力が可能になる前に、2つのNuGetパッケージが必要です:エンコード用のBarcoderとレンダリング用のBarcoder.Renderer.Imageです。 SVG出力も必要な場合は、3つ目のパッケージ - Barcoder.Renderer.Svg - を追加する必要があります。 これらのパッケージはそれぞれ独立してバージョン管理されているため、一方のアップデートが他方のアップデートと自動的に同期するわけではなく、プロジェクト全体で同期を維持するには定期的なメンテナンス作業が必要となります。
Barcoderの主なアーキテクチャ特性:
- PNG出力に必要な2つのNuGetパッケージ:@--CODE-38300--@エンコード用と@--CODE-38301--@画像フォーマットへのレンダリング用。
- フォーマット固有のエンコーダクラス: 各バーコードタイプは、独自の名前空間に独自のエンコーダを持っています - @--CODE-38302--@、@--CODE-38303--@、@--CODE-38304--@など。
IBarcodeは出力メソッドを持ちません: エンコーディングの結果はプレーンなデータオブジェクトです。 レンダラーは別途構築する必要があり、ストリームを開いてレンダリングし、閉じる必要があります。 -画像レンダラーの.NET Frameworkサポートが終了しました: .NET Framework上のTeamsでは画像レンダラーパッケージを使用できません -読み取り機能なし:バーコーダーは画像、ファイル、またはその他のソースからのバーコードをデコードできません- 独立したパッケージのバージョニング: @--CODE-38306--@@ と @--CODE-38307--@@ は、依存関係の更新中に離れてしまうことがあります。
複数パッケージ生成ワークフロー
インストール事例を見れば、その規模の違いがすぐに分かるだろう。 Barcoderでは、基本的なPNG出力には2つの別々のパッケージが必要です。
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
Code128バーコードを生成してPNGとして保存する完全なワークフローには、3つの名前空間インポート、フォーマット固有のエンコーダ呼び出し、オプションオブジェクトを使用したレンダラーの構築、ファイルストリーム、およびレンダリング呼び出しが必要です。
// 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
バーコード形式の切り替えはパラメータの変更ではなく、別の名前空間をインポートして別のクラスを呼び出す必要があります。 CODE-38308--@@は@@--CODE-38309--@に対してboolを取り、@@--CODE-38310--@はエラー訂正レベルと2つの追加のboolを取り、@@--CODE-38311--@は文字列のみを取る。 特定の形式でバーコードを作成するための統一されたインターフェースは存在しない。
IronBarcodeを理解する
IronBarcodeは、単一のNuGetパッケージでバーコードの生成と読み取りを網羅する商用.NETバーコードライブラリです。 生成のためのBarcodeWriterと読み込みのためのBarcodeReaderの2つの主要なクラスを中心に構築された静的APIモデルを使用し、フォーマット固有のクラスや名前空間ではなく、@@--CODE-38314--@の列挙型を通してすべてのフォーマット選択をルーティングします。
このライブラリは、バーコードコードの最初の行を記述してから、正常に動作する出力が得られるまでの時間を最小限に抑えるように設計されています。 生成、読み取り、PDFサポート、ロゴ埋め込みQRコード、およびすべての出力タイプが1つのパッケージに含まれており、バージョン管理も1つで済みます。
IronBarcodeの主な特徴:
- 単一のNuGetパッケージ: @--CODE-38315--@@ すべての機能 - 生成、読み取り、PDF、およびすべての出力形式をカバーします。
- 統一されたフォーマット選択:すべてのバーコードタイプは、@--CODE-38316--@@ enum値を通して扱われます; フォーマット固有のインポートやクラスはありません。
- ネイティブの読み取り機能: @--CODE-38323--@ セカンダリライブラリなしで、画像ファイル、バイト配列、ストリーム、PDFからデコードします。
- MAUI、Docker、AWS Lambda、Azureのサポート:標準的なデスクトップおよびサーバーシナリオを超えた、文書化されたデプロイメントターゲット
- .NET Frameworkおよび最新の.NETを完全にサポート:.NET フレームワーク4.6.2 から.NET 9 まで
機能比較
| フィーチャー | バーコード | IronBarcode |
|---|---|---|
| 必要なNuGetパッケージ | 最低2名 | 1 |
| バーコード生成 | はい | はい |
| バーコード読み取り | なし | はい |
| ライセンス | MIT(オープンソース) | 商用 |
| .NET Frameworkのサポート | 画像レンダラーにドロップされました | .NET フレームワーク4.6.2以降 |
| PDFを読む | なし | はい |
| ロゴ入りQRコード | なし | はい |
詳細な機能比較
| フィーチャー | バーコード | IronBarcode |
|---|---|---|
| 世代 | ||
| Code128生成 | はい | はい |
| QRコード生成 | はい | はい |
| データマトリックスの生成 | はい | はい |
| EAN-13、PDF417 | はい | はい |
| ロゴが埋め込まれたQRコード | なし | はい - --コード-38324--@@@。 |
| 列挙型で選択されたフォーマット | いいえ — フォーマットごとに個別のエンコーダークラス | はい - @--CODE-38325--@@ enum |
| 出力 | ||
| PNG出力 | はい(Barcoder.Renderer.Image経由) | はい - @--CODE-38326--@@@. |
| SVG出力 | はい (Barcoder.Renderer.Svg 経由) | はい - --コード-38327--@@@。 |
| バイナリデータ出力 | はい(MemoryStream経由) | はい - --コード-38328--@@@。 |
| ストリーム出力 | はい(手動ストリーム管理) | はい---コード-38329--@@@。 |
| 直接サイズ変更API | いいえ - --CODE-38330-- 縮小率のみ | はい - @--CODE-38331--@@@. |
| 読む | ||
| 画像ファイルから読み込む | なし | はい |
| PDFから読み込む | なし | はい |
| ストリームから読み込む | なし | はい |
| 複数バーコード検出 | なし | はい - @--CODE-38332--@@@. |
| 読書速度制御 | なし | はい - @--CODE-38333--@ enum |
| プラットフォーム | ||
| .NET Core / .NET 5 以上 | はい | はい |
| .NET フレームワーク | 画像レンダラーにドロップされました | .NET フレームワーク4.6.2以降 |
| .NET 9 | 不明瞭/活動が限定的 | はい |
| MAUI(iOS、Android、Windows、macOS) | なし | はい |
| Docker / Azure / AWS Lambda | 記録なし | はい |
| パッケージ | ||
| 独立したパッケージのバージョン管理リスク | はい | いいえ — シングルパッケージ |
| フォーマットごとの名前空間 | はい | なし - 単発@--CODE-38334--@@@。 |
| ライセンスについて | ||
| ライセンスモデル | MIT(オープンソース) | 商用 |
| 価格 | 無料 | Lite: 749ドル、Plus: 1,499ドル、Professionalプラン:2,999ドル、アンリミテッドプラン:5,999ドル |
フォーマット選択および生成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はすべてのフォーマットの選択を統一されたBarcodeEncodingクラス上のBarcodeWriter列挙型を通して行います。 新しいフォーマットを追加するには、列挙値に単語を1つ変更するだけです。
// 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を開き、@@--CODE-38340--@を呼び出す必要があります。 すべての出力シナリオにおいて、オプションオブジェクトを使用してレンダラーを構築する必要があります。
// 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
サイズコントロールは間接的です:CODE-38341--@@は、バーコードモジュールのサイズに対するスケール乗数であり、直接的な幅と高さの指定ではありません。
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()
CODE-38343--@@は、明示的なピクセル寸法を受け取り、同じオブジェクト上の任意の出力メソッドと連鎖します。
バーコードの読み取り
Barcoderに読み取りAPIがないのは、設定上の選択ではなく、アーキテクチャ上の明確な制約によるものです。
バーコード方式
バーコードには読み取り機能やデコード機能はありません。 APIは存在せず、APIの導入予定もなく、ライブラリ内での回避策もありません。 アプリケーションがバーコードを読み取る必要がある場合、Barcoder に加えて、別のライブラリ(独自の API サーフェスと追跡対象の独自のバージョンを持つ、別のNuGet依存関係)を追加する必要があります。 つまり、少なくとも2つの読み取り関連依存関係が必要になるということだ。生成にはBarcoder、そして読み取りには別の何かが必要だ。
IronBarcodeのアプローチ
IronBarcodeは、生成と読み取りの両方を同じパッケージと一貫したAPIパターンでカバーします。 CODE-38344--@@メソッドは、画像ファイル、バイト配列、ストリーム、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 |
|---|---|
| コード-38345 | コード-38346 |
| コード-38347 | コード-38348 |
| コード-38349 | コード-38350 |
new ImageRenderer(new ImageRendererOptions { ... }) |
不要 - 出力はGeneratedBarcodeからチェーンされています。 |
| コード-38352 | コード-38353--@ / コード-38354--@ / コード-38355--@ |
| コード-38356(データ構造、出力メソッドなし) | CODE-38357--@@(@--CODE-38358--@、@--CODE-38359--@、@--CODE-38360--@、@--CODE-38361--@などがあります。) |
| CODE-38362--@ + @@--CODE-38363--@ (2パッケージ) | コード-38364 (1パッケージ) |
| コード-38365 | CODE-38366--@@ (単一の名前空間、すべての形式) |
| コード-38367 | コード-38368 |
| コード-38369 | コード-38368 |
| 読み取りAPIはありません | コード-38371 |
| .NET Frameworkイメージレンダラーなし | .NET フレームワーク4.6.2以降 |
| CODE-38372--@ + @@--CODE-38373--@ オプション | コード-38374 |
チームがBarcoderからIronBarcodeへの移行を検討する場合
読書が要件に追加されました
多くのプロジェクトは、ラベルの印刷、文書用のコード生成、レポートへのバーコードの埋め込みなど、純粋な生成パイプラインとして始まります。 Barcoderは、これらのプロジェクトの初期段階から役立ちます。 同じアプリケーションが後で受信したバーコードを検証したり、スキャンしたドキュメントを処理したり、アップロードされたPDFからバーコードをデコードしたりする必要が生じた場合、Barcoderにはそれに対応する手段がありません。 チームは、2つ目のライブラリを評価し、そのAPIを習得し、 NuGetバージョンを個別に管理し、2つのライブラリ間の統合面を処理する必要がある。 この段階に達したチームは、2つの別々のバーコード依存関係を維持するのではなく、両方の側面を処理するライブラリに統合することが多い。
.NET Frameworkの互換性の問題
.NET Frameworkのサポートを削除しました。.NET フレームワーク4.x 上でサービスやデスクトップアプリケーションを保守しているチームが、定期的な依存関係の保守中にイメージレンダラーパッケージを更新すると、ビルドエラーが発生します。 これは設定ミスではなく、図書館によるプラットフォームサポートに関する決定です。 IronBarcodeは、特別なパッケージングや異なるターゲット向けの条件付き依存関係なしに、.NET フレームワーク4.6.2から.NET 9までをサポートします。
パッケージバージョンのずれが調整上の問題を引き起こす
CODE-38376--@@とBarcoder.Renderer.Image@のバージョンは独立しているため、依存関係の更新の際に一方を更新せずに他方を更新すると、微妙な非互換性が生じる可能性があります。 複数のプロジェクトを含むリポジトリでは、各プロジェクトが異なるバージョンのレンダラーパッケージを使用しているため、プロジェクト間で一貫した動作を確保することは、チームの規模が大きくなるにつれて複雑化する調整上の問題となる。 IronBarcodeに統合したチームは、1つのパッケージと1つのバージョンを管理することで、この種の問題が完全に解消されると報告している。
フォーマットのカバー範囲は時間とともに拡大する
プロジェクトはCode128ラベルから始まり、後から顧客向けリンク用のQRコードを追加し、さらにコンプライアンス要件を満たすためにDataMatrixを追加するといった流れになるかもしれません。 Barcoderでは、フォーマットを追加するたびに、新しい名前空間のインポート、異なるメソッドパラメータを持つ異なるエンコーダクラス、そして場合によっては新しいNuGetパッケージが必要になります。 IronBarcodeでは、フォーマットの追加は既存の呼び出しのBarcodeEncoding列挙値の変更です。 バーコード形式の対応範囲拡大をロードマップに盛り込んでいるチームは、列挙型ベースのモデルの方がメンテナンスがはるかに容易であることに気づいています。
MAUIとクロスプラットフォーム展開の要件
Barcoderは、MAUI、Docker、AWS Lambda、またはAzureデプロイメントのサポートに関するドキュメントを提供していません。 クロスプラットフォームのMAUIアプリケーションを構築しているチームや、バーコード処理をサーバーレスインフラストラクチャにデプロイしているチームは、Barcoderのドキュメントとテストがこれらの対象を網羅していないことに気づきます。 IronBarcodeは、iOS、Android、Windows、macOS MAUIターゲット、Dockerコンテナ、および主要なクラウドプラットフォーム全体にわたるデプロイメントに関するドキュメントを作成し、積極的にテストを行っています。
一般的な移行の考慮事項
"@--CODE-38379--@@"から"@--CODE-38380--@"へのタイプ変更
変数を格納し、後でレンダラーに渡す BarCodeer コードをリファクタリングする必要があります。 IronBarcodeでは、GeneratedBarcodeは独自の出力メソッドを持ちます。現在IBarcodeを受け入れるすべてのメソッドシグネチャはGeneratedBarcodeを受け入れるように変更され、そのメソッド内のレンダリング呼び出しは@@--CODE-38385--@や@@--CODE-38386--@のような直接呼び出しになるはずです。 型システムは、コンパイル中に更新が必要なすべての場所を表示します - BarCode-38387--@@は、Barcoderパッケージが削除された後、解決されません。
PixelSize に直接相当するものはありません。
BarCodeのPixelSizeは、バーコードの自然なモジュールサイズに対するスケール乗数であり、明示的なピクセル寸法ではありません。 出力幅は、バーコードの内容、フォーマット、および乗数の組み合わせによって決まります。 IronBarcodeはピクセル寸法を明示した.ResizeTo(width, height)を使用します。 移行中、既存のBarCodeコードが生成する実際の出力寸法を測定し、その値を.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")
名前空間の統合
BarCodeプロジェクトは、using Barcoder.*@ステートメントを蓄積します。 移行中、これらはすべて1つのusing IronBarCode;にまとまります。 ソリューション全体でusing Barcoderを検索すると、更新が必要なすべてのファイルが特定されます。 影響を受けるファイルの数は、通常、チームが予想するよりも多くなります。なぜなら、バーコード形式を使用する各ファイルは、それぞれ独自の形式固有の名前空間をインポートするからです。
SVG出力パスの変更
CODE-38395--@@と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にはBarcoderにはない機能が備わっています。
- ロゴ埋め込みQRコード:@--CODE-38399--@@は、スキャナビリティを壊すことなく、ブランドイメージをQRコードセンターに埋め込みます。
- ネイティブ PDF バーコード読み取り: @--CODE-38400--@ 最初に画像を抽出することなく、PDF を直接処理します。
- マルチバーコード検出: @--CODE-38401--@@ オプションは、1 回の呼び出しで 1 つの画像または PDF ページからすべてのバーコードを読み取ります。
- 読み取り速度の制御:@--CODE-38402--@、@--CODE-38403--@、および@@--CODE-38404--@は、さまざまなユースケースのために精度と速度のトレードオフを調整します。
- MAUIのクロスプラットフォーム展開: iOS、Android、Windows、macOS向けのMAUIターゲットは積極的にテストされ、ドキュメント化されています。
- Dockerとクラウドへのデプロイ: Dockerコンテナ、AWS Lambda、Azure Functionsのデプロイ手順を文書化
- BarCodeのスタイリングとカスタマイズ:色、余白、注釈テキスト、および
GeneratedBarcode@の背景のカスタマイズ。
.NETの互換性と将来の準備
IronBarcodeは、.NET フレームワーク4.6.2、 .NET Core 2.x、 .NET 5、 .NET 6、 .NET 7、 .NET 8、および.NET 9をサポートしています。定期的なアップデートによる活発な開発が継続されており、 .NET 10(2026年後半にリリース予定)との互換性は公開されているロードマップに含まれています。Barcoderの画像レンダラーは.NET Frameworkのサポートを終了しており、最近のリリースではリポジトリの活動が制限されているため、ライブラリの.NET 9および将来の互換性状況は不明です。 長期にわたるサポート期間と、今後の.NETバージョンとの確実な互換性を必要とするチームにとって、IronBarcodeの積極的なリリースサイクルは、より大きな安心感を提供します。
結論
BarCoderとIronBarcodeは基本的に異なるスコープを反映しています。BarCodeerは、エンコードとレンダリングを原則的に分離した世代のみのライブラリです。 IronBarcodeは、バーコードの生成と読み取りが単一のパッケージ、単一の名前空間、そして一貫した静的APIを共有する、完全なバーコードライブラリです。 要件が拡大すると、アーキテクチャ上の違いが最も顕著になります。Barcoderはマルチパッケージ、マルチネームスペース、読み取り不要の設計を採用しているため、追加するたびに構造的な作業が必要になりますが、 IronBarcode新しいフォーマットや機能の追加は構成変更として扱われます。
Barcoderは、プロジェクトが本当に生成機能だけを必要とし、 .NET Coreのみを対象とし、使用するバーコード形式が少なく、MITライセンスが必須条件である場合に最適な選択肢です。 このライブラリは、記載されている範囲内で動作し、読解要件がなく、 .NET Frameworkをターゲットとしない、範囲が限定されたプロジェクトにとっては、費用のかからないオープンソースの選択肢として妥当です。
IronBarcodeは、プロジェクトでバーコードの生成だけでなく読み取りも必要となる場合、 .NET FrameworkまたはクロスプラットフォームのMAUIデプロイメントを対象とする場合、将来的にバーコードフォーマットを追加する予定がある場合、あるいはDockerまたはクラウド環境へのデプロイメントが必要な場合に最適な選択肢です。 単一パッケージモデルと列挙型ベースのフォーマット選択により、プロジェクトの規模が拡大するにつれてBarcoderで蓄積されるオーバーヘッドが解消されます。
実際の判断は、軌道の問題に帰着する。 読み取りを必要としない、単純な単一フォーマット生成器に留まることが確実なプロジェクトであれば、Barcoderは十分に役立つだろう。 バーコードに関する要件に曖昧さがあるプロジェクト(フォーマットの追加、読み取り機能の追加、クロスプラットフォーム展開など)は、予想よりも早くBarcoderのアーキテクチャ上の限界に直面するでしょう。 どちらのライブラリも信頼できるツールです。 問題は、どちらが実際の作業範囲に合致するかということだ。
よくある質問
BarCodeer とは?
BarCodeerは、C#アプリケーションでバーコードを生成および読み取るための.NETバーコードライブラリです。BarCodeer は、.NET プロジェクトのバーコードソリューションを選択する際に、開発者が評価するいくつかの選択肢の 1 つです。
BarCoderとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用しますが、BarCodeは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、およびすべての環境にわたるシングルキーライセンスを提供します。
IronBarcodeはBarcoderよりもライセンス取得が簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはBarcoderがサポートしているすべてのバーコードフォーマットをサポートしていますか?
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はBarCoderと比べてどのようにバッチ処理を行いますか?
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をインストールする:パッケージマネージャーコンソールで'Install-Package IronBarCode'を実行するか、CLIで'dotnet add package IronBarCode'を実行する。追加のSDKインストーラーやランタイムファイルは必要ありません。
Barcoderとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
BarCoderとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
BarCoderからIronBarcodeへの移行は簡単ですか?
BarCodeからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

