NetBarcode vs IronBarcode:C#バーコードライブラリの比較
NetBarcodeのType列挙にはQRコードエントリがありません。 配送ラベル作成プロジェクトで3ヶ月目にQRコードの要件が追加されると、開発者は別のライブラリに頼ることになる。 その2つ目のライブラリは、独自のAPIインターフェース、独自のリリーススケジュール、そしてNetBarcodeが既に必要としているバージョンとバージョンがずれる可能性のある、共通のSixLabors.ImageSharp依存関係をもたらします。 この比較では、NetBarcodeとは何か、どのような場面で適しているか、そしてIronBarcodeが2つ目や3つ目のパッケージを追加することなく、NetBarcodeの不足部分を補うことができる点について検証します。
NetBarcodeを理解する
NetBarcodeは、MITライセンスの下で公開されているオープンソースの.NETバーコード生成ライブラリです。 これは文字列データから線状バーコード画像を生成するために開発されたもので、その目的を完璧に果たしている。 このライブラリは、Code128、EAN-13、UPC-A、およびその他の10種類の1次元フォーマットを対象としており、これらはすべてシンプルなコンストラクタと少数の出力メソッドを通じて公開されます。 SixLabors.ImageSharpへの依存は画像レンダリングレイヤーを提供し、バージョン1.8以降、その依存はImage<Rgba32>@の戻り値型を通してパブリックAPIに反映されています。
NetBarcodeは、汎用的なバーコードツールキットを目指しているわけではありません。 読み取り機能はなく、2Dフォーマットにも対応していません。 これらは意図的な範囲決定です。 このライブラリは、1次元バーコードのみを必要とするアプリケーションに最適であり、MITライセンスであるため、オープンソースの環境での導入も容易です。
主な建築上の特徴:
- MITライセンス:ライブラリ自体はMITライセンスですが、依存関係にあるSixLabors.ImageSharpには、一定の収益基準を満たすと適用される分割商用ライセンスが適用されます。
- 1D-Only Design:@--CODE-39059--@@enumは正確に14のバーコード形式を定義しており、すべてリニアです; 2Dエントリはありません
- SixLabors.ImageSharpの依存性:イメージレンダリングはImageSharpに委譲され、v1.8以降、
GetImage()メソッドはImage<Rgba32>を返し、ImageSharpの型をパブリックAPIで直接公開します。 - Constructor-Based API:バーコードは@--CODE-39062--@で作成され、@--CODE-39063--@または@--CODE-39064--@で保存または取得されます。 -読み取りAPIなし: NetBarcodeは生成専用です。 バーコード画像をデコードするメソッドやクラスはありません。 -バッチ処理なし:各バーコードは独立したコンストラクタ呼び出しです。 組み込みの列挙またはバッチパイプラインなし
型列挙型設計境界
CODE-39065--@@@列挙は、NetBarcodeが生成できるものの権威あるリストです。 それを詳しく調べてみると、図書館の規模が明らかになる。
// ネットバーコード Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
// ネットバーコード Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
' ネットバーコード Type enum — complete list as of v1.8
Public Enum Type
Code128
Code128A
Code128B
Code128C
Code39
Code39Extended
Code93
EAN8
EAN13
UPCA
UPCE
Codabar
ITF
MSI
End Enum
' These entries do not exist — attempting to use them produces a BC30456 compile error:
' Type.QRCode — does not exist
' Type.DataMatrix — does not exist
' Type.PDF417 — does not exist
' Type.Aztec — does not exist
これはプルリクエスト待ちの欠落機能ではありません。列挙型には14個のエントリがあり、すべて1次元で、これはライブラリの意図する範囲を反映しています。 QRコード、DataMatrix、PDF417、またはAztecを必要とするアプリケーションは、これらのフォーマットを提供するための別のパッケージを入手する必要があります。
IronBarcodeを理解する
IronBarcodeは、バーコードの生成と読み取りの両方を単一のパッケージでカバーする商用.NETバーコードライブラリです。 Iron Software社によって開発・保守されており、最新の.NETバージョンを対象とした定期的なアップデートが行われています。 ライブラリの静的APIサーフェスは、1つのBarCodeフォーマットから別のフォーマットに切り替える際に、1つの定数を変更するだけで済むように設計されています - Code128を生成する同じBarcodeWriter.CreateBarcode@呼び出しは、QRコード、DataMatrix、PDF417、Aztecも生成します。
IronBarcodeはBarcodeReader@クラスを通してバーコード読み取りを処理し、画像ファイルやPDFドキュメントを受け入れ、フォーマット識別と共にデコード結果を返します。 これは、生成と閲覧が単一の依存関係、単一のライセンス、および追跡すべき単一のリリースノートセットを共有することを意味します。
主な特徴:
- 統一された生成と読み込み:@--CODE-39068--@@と
BarcodeReaderの両方が1つのNuGetパッケージに含まれています。 - 50種類以上の対応フォーマット: 1Dフォーマットには、NetBarcodeのすべての同等フォーマットが含まれます。 2Dフォーマットには、QRコード、DataMatrix、PDF417、Aztecなどがあります。
- フルエント・チェーンAPI:@--CODE-39070--@@は、
GeneratedBarcodeオブジェクトを返し、@@--CODE-39072--@、@@@--CODE-39073--@、@@@--CODE-39074--@、およびストリームベースのオーバーロードを含む出力メソッドを提供します。 - ImageSharpへの依存なし: IronBarcodeの画像レンダリングは自己完結型です。 SixLaborsの推移的依存関係は導入されません
- PDFサポート: 読み取りAPIは、画像フォーマットに加え、
.pdfファイルを直接受け入れます。 -商用ライセンス:ライセンスキーが必要です。 トライアルモードが利用可能で、購入時に透かしが削除されます。
機能比較
| フィーチャー | ネットバーコード | IronBarcode |
|---|---|---|
| 1次元バーコード生成 | はい | はい |
| 2次元バーコード生成 | なし | はい |
| バーコード読み取り | なし | はい |
| PDFサポート | なし | はい |
| 総シンボル体系 | 14 | 50歳以上 |
| ImageSharpの依存関係 | はい(分割ライセンス) | なし |
| ライセンスモデル | MITライセンス(ImageSharp使用条件あり) | 商用 |
詳細な機能比較
| フィーチャー | ネットバーコード | IronBarcode |
|---|---|---|
| 世代 | ||
| Code128、EAN-13、UPC-A、Code39 | はい | はい |
| EAN-8、UPC-E、Code93、Codabar、ITF、MSI | はい | はい |
| QRコード | なし | はい |
| データマトリックス | なし | はい |
| PDF417 | なし | はい |
| アステカ | なし | はい |
| GS1-128、GS1データバー | なし | はい |
| 郵便形式(インテリジェントメール、ロイヤルメール) | なし | はい |
| SVG出力 | なし | はい |
| 読む | ||
| バーコード画像をデコードする | なし | はい |
| PDF文書から読み込む | なし | はい |
| 複数バーコード検出 | なし | はい |
| 自動フォーマット検出 | なし | はい |
| APIデザイン。 | ||
| コンストラクタベースの生成 | はい | いいえ(静的メソッド) |
| 流暢な出力チェーン | なし | はい |
| バッチ処理のサポート | マニュアル | 内蔵 |
| ライセンスと依存関係 | ||
| 図書館ライセンス | MIT | 商用 |
| ImageSharpの依存関係 | はい | なし |
| 商用サポート | コミュニティ | プロフェッショナル |
フォーマットのカバー範囲
NetBarcodeアプローチ
NetBarcodeは、Type列挙型を通じて14種類のリニアバーコード形式を提供します。 その範囲内では、フォーマットの選択は簡単です。適切な列挙型メンバーをコンストラクタに渡せばよいのです。 境界線も同様に明確だ。列挙型の範囲外のフォーマットを使用しようとすると、コンパイル時エラーが発生する。
// ネットバーコード — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// ネットバーコード — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
// ネットバーコード — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// ネットバーコード — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
Imports NetBarcode
Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")
Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")
' ネットバーコード — formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode) ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417) ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec) ' error CS0117
この境界が制約となる業界には、医薬品追跡(FDAの2次元バーコード義務付けに基づくDataMatrix)、航空会社の搭乗券(Aztec)、物流マニフェスト(PDF417)、モバイルマーケティング(QRコード)などがある。 これらの要件のいずれも、NetBarcodeを単独のソリューションとして利用することを不可能にする。
IronBarcodeのアプローチ
IronBarcodeはサポートしているすべてのフォーマットを同じBarcodeWriter.CreateBarcode@メソッドを通して公開します。 APIサーフェスは、1Dフォーマットから2Dフォーマットに移行しても変わりません。
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
Imports IronBarCode
' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("shipping.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product.png")
' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-label.png")
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
.SaveAsPng("boarding-pass.png")
サポートされている定数の完全なリストは、サポートされているバーコード形式のリファレンスに記載されており、すべての2次元バーコード生成形式とすべての1次元バーコード形式が網羅されています。
世代API設計
NetBarcodeアプローチ
NetBarcodeの生成モデルはコンストラクタベースです。 CODE-39079--@@@オブジェクトは、データ文字列とType列挙値でインスタンス化されます。 出力は、SaveImageFile()で直接保存されるか、GetImage()を介してImage<Rgba32>として取得されます。 バージョン1.8以降、GetImage()の戻り値の型はSixLabors.ImageSharp型であり、戻り値を保存または処理するコードはImageSharp APIをインポートして動作する必要があります。
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO
' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)
' Save to file — straightforward
barcode.SaveImageFile("code128.png")
' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()
' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
image.SaveAsPng(stream)
Dim bytes As Byte() = stream.ToArray()
End Using
CODE-39085--@@メソッドのリターンタイプは、ダウンストリームコードをImageSharpライブラリに結びつけます。 結果を受け取るか格納するメソッドは、Image<Rgba32>として宣言し、呼び出しコードに推移的依存関係を導入する必要があります。
IronBarcodeのアプローチ
IronBarcodeは流暢なチェーンを使用します。 CODE-39087--@@は、複数の出力メソッドを持つGeneratedBarcodeオブジェクトを返します。 画像処理は内部的に行われ、ImageSharp 型は呼び出し元のコードには公開されません。
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode
' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("code128.png")
' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()
Using stream As New MemoryStream()
barcode.SaveAsPng(stream)
End Using
幅、高さ、ラベル構成など、 1次元バーコード生成に関する詳細なオプションについては、 IronBarcodeのドキュメントに記載されています。
読解能力
NetBarcodeアプローチ
NetBarcodeには読み取りAPIがありません。 バーコード画像をデータ文字列にデコードするメソッド、クラス、または設定は存在しません。 これは意図的な範囲設定であり、リリースまでの一時的な省略ではありません。 NetBarcodeでバーコードを生成し、後で印刷されたラベルの検証、返品商品のスキャン、仕入先請求書からの値の抽出などのためにそのバーコードを読み取る必要があるプロジェクトでは、その目的のために別のライブラリを導入する必要があります。
// ネットバーコード — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
// ネットバーコード — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
' ネットバーコード — no reading method exists
' The following does not compile because the method does not exist:
' Dim result = barcode.Read("image.png") ' method does not exist
' The typical workaround requires ZXing.Net as a third-party dependency
ZXing .NETライブラリは、NetBarcodeと併用して読み取りを行う際に最も一般的に使用されるライブラリであり、NetBarcodeや既にQRコード用に追加された2Dライブラリに加えて、3つ目のAPIインターフェースと3つ目のパッケージを提供し、バージョン管理の対象となります。
IronBarcodeのアプローチ
IronBarcodeはBarcodeReaderを@@--CODE-39090--@と同じパッケージに含んでいます。 読み取りAPIは画像ファイルとPDFドキュメントを受け付け、デコードされた結果のコレクションを返します。各結果には、バーコード値、フォーマットタイプ、およびPDFから読み取った場合はページ番号が含まれます。
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode
' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
Console.WriteLine($"{r.BarcodeType}: {r.Value}")
Next
' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
画像からバーコードを読み取るためのガイドでは、読み取りAPIで利用可能な速度調整、複数バーコードの検出、および画像補正オプションについて説明します。
依存関係とライセンスに関する考慮事項
NetBarcodeとImageSharp
NetBarcodeはMITライセンスで提供されています。 依存しているSixLabors.ImageSharpライブラリは異なるモデルを採用しており、オープンソースプロジェクトや、年間総収益が一定のしきい値以下の企業は無料で利用できますが、そのしきい値を超えると商用ライセンスが必要になります。 ImageSharpがプロジェクトの.csproj@に明示的に記載されているか、NetBarcodeを通して通過的に到着しているかに関係なく、このスプリットは適用されます。
<PackageReference Include="NetBarcode" Version="1.8.2" />
<PackageReference Include="NetBarcode" Version="1.8.2" />
NetBarcodeが主なターゲットとする、バーコードを大規模に処理する小売業や物流会社の場合、年間収益はImageSharpの商用ライセンスが適用される基準額を超えることが多い。 コンプライアンス監査によって、パッケージツリーに組み込まれたこの義務が明らかになる可能性がある。
v1.8リリースでは、ImageSharp依存の追加的な結果が導入されました:@--CODE-39092--@@の戻り値の型が内部表現からSixLabors.ImageSharp.Image<Rgba32>に変更されました。 明示的な型付けなしにGetImage()を呼び出す既存のコードはコンパイル時に壊れ、usingの新しい@@--CODE-39096--@と@@--CODE-39097--@のディレクティブが必要になりました。 ImageSharp独自のAPIが将来のバージョンで進化すると、NetBarcodeの公開APIにも影響が及ぶ。
IronBarcode
IronBarcodeはSixLabors.ImageSharpに依存していません。 ライセンス条件はIronBarcodeのライセンスページに直接記載されており、分割基準や推移的な商業義務は存在しません。 評価用の試用版キーが利用可能です。 購入したライセンスは、生成された出力から試用版の透かしを削除します。
APIマッピングリファレンス
| ネットバーコード | IronBarcode | ノート |
|---|---|---|
| コード-39098 | コード-39099 | コンストラクタ → 静的メソッド |
| コード-39100 | コード-39101 | 直接マッピング |
| コード-39102 | コード-39103 | 直接マッピング |
| コード-39104 | コード-39105 | 直接マッピング |
| コード-39106 | コード-39107 | 直接マッピング |
| コード-39108 | コード-39109 | 直接マッピング |
| コード-39110 | コード-39111 | 直接マッピング |
| コード-39112 | コード-39113 | 直接マッピング |
| コード-39114 | コード-39115 | メソッド名の変更 |
| コード-39116 | コード-39117 | メソッド名の変更 |
| --コード-39118--@@ → @@--コード-39119--@@。 | または、.ToPngBinaryData()または.SaveAsPng()@。 |
ImageSharpタイプは公開されていません |
| いいえ--CODE-39122--@@@。 | コード-39123 | 新機能 |
| いいえ--コード-39124--@@@。 | コード-39125 | 新機能 |
| いいえ--CODE-39126--@@@。 | コード-39127 | 新機能 |
| いいえ--コード-39128--@@@。 | コード-39129 | 新機能 |
| 読み取りAPIはありません | コード-39130 | 新機能 |
| コード-39131 | コード-39132 | 名前空間の置換 |
| コード-39133 | 取り除く | もう必要ありません |
完全なフォーマットリファレンスは、サポートされているバーコードフォーマットのドキュメントに記載されています。
チームがNetBarcodeからIronBarcodeへの移行を検討する際
QRコードおよび2Dフォーマットの要件
NetBarcodeの代替案を検討する最も一般的なきっかけは、QRコードに関する新たな要件の発生である。 小売ラベルや出荷明細書用の1次元バーコード生成から始まるアプリケーションは、非接触リンク、モバイルアプリのディープリンク、マーケティングキャンペーンなど、QRコードを必要とするケースが一般的です。 CODE-39134--@@@列挙型にはQRエントリがないため、NetBarcodeではこの要件を満たすことができません。 ギャップを埋めるために別途QRライブラリを追加するチームは、医薬品統合のためにDataMatrixが必要になった場合、または配送ラベルにPDF417を義務付ける物流業者が必要になった場合に、2回目の評価に直面することになる。
バーコード読み取りが必須となる
プロジェクトによっては、最初は純粋な生成作業から始まり、後から検証や文書処理の要件を追加する場合があります。例えば、印刷されたバーコードが元のデータと一致するかを確認したり、仕入先からの請求書からバーコード値を抽出したり、返品ラベルをスキャンしたりといった作業です。 NetBarcodeにはこのためのパスがありません。 ZXing .NETまたは同等の読み取りライブラリを追加すると、NetBarcodeとQRライブラリが既に存在する同じコードベース内で、学習および保守が必要な3つ目のAPIが導入されることになります。 将来の段階であっても読書ニーズを想定しているプロジェクトでは、最初から両方のニーズに対応できる図書館を選ぶ方が効率的な場合が多い。
ImageSharp商用ライセンス監査
サードパーティの依存関係に関する法的およびコンプライアンス上のレビューでは、NetBarcode パッケージツリーに組み込まれている SixLabors.ImageSharp の商用ライセンス条件が時折明らかになります。 年間総収益が一定の基準額を超える企業の場合、ImageSharpが意図的に選択されたか、NetBarcodeを経由して間接的に導入されたかにかかわらず、この義務が適用されます。 導入前ではなく監査中にこの問題を発見したチームは、計画的な移行ではなく、事後的な是正措置を講じる必要に迫られる。 プロジェクトを開始する前に依存関係のライセンスを評価する方が、より確実な方法です。
複数ライブラリの複雑さを軽減する
1D生成用のNetBarcode、2D出力用のQRコード専用ライブラリ、読み取り用のZXing .NETを既に導入しているチームは、3つの異なるパッケージ間でバージョン互換性を維持する必要に迫られる。 アップグレードのたびに、3つのライブラリが共有するImageSharpのバージョンが一致しているかどうかを確認する必要があります。 プロジェクトに参加する新しい開発者はそれぞれ、概念的には一つの課題であるにもかかわらず、3つの異なるAPIに遭遇することになる。 単一のバーコードライブラリに統合することで、導入が簡素化され、バージョン競合の問題が軽減され、メンテナンスが1つのリリースサイクルに集中します。
一般的な移行の考慮事項
パッケージの入れ替えと推移的依存関係のクリーンアップ
NetBarcodeをdotnet remove package NetBarcodeで削除することが最初のステップです。SixLabors.ImageSharpパッケージは、プロジェクト内の他のパッケージが依存関係ツリーに再び現れるかもしれません。 削除後、復元されたパッケージリストをdotnet list package --include-transitiveで検査し、ImageSharpがまだ存在するかどうか、その商用ライセンス条件がまだ適用されるかどうかを確認してください。
GetImage() の戻り値の型置換
CODE-39137--@@ の結果を Image<Rgba32> として保存したコードはすべて更新する必要があります。 ImageSharp型にはIronBarcodeに直接相当する型はありません。 代替画像は、その後の画像利用状況によって異なる。 画像をストリームに保存するコードは、.SaveAsPng(stream)オブジェクトのGeneratedBarcodeに直接置き換えることができます。 生のバイトを取得したコードは、.ToPngBinaryData()を使用できます。 返された画像に対してImageSharpによる追加操作を行うコードは、それらの操作を個別に評価する必要があります。
名前空間の更新
CODE-39142--@、@--CODE-39143--@、@--CODE-39144--@、または@--CODE-39145--@をインポートしたファイルは、これらのディレクティブを@--CODE-39146--@に置き換える必要があります。 プロジェクト全体でこれらのusingステートメントを検索することで、ビルドを試行する前に注意が必要なすべてのファイルが特定されます。
IronBarcodeの追加機能
本比較で取り上げた基本的な生成機能と読み取り機能に加え、 IronBarcodeは以下の機能を提供します。
- SVGバーコード出力:印刷ワークフローやスケーラブルなラベルデザインに適したベクター形式のバーコード画像を生成します。 -バーコードのスタイル設定:生成されるバーコードのバーの色、背景色、注釈フォント、余白、回転角度を設定します。
- GS1-128およびGS1 DataBar :小売およびサプライチェーンのコンプライアンスに対応したアプリケーション識別子構造のバーコード -郵便フォーマット:インテリジェントメール、ロイヤルメール、およびその他の郵送アプリケーション用郵便シンボル体系
- PDFバーコード抽出:別途PDFライブラリを用意することなく、複数ページのPDFドキュメントから直接バーコードを読み取ります。 -バッチ生成:単一のパイプライン内でバーコードデータのコレクションを効率的に処理します
- MAUIおよびモバイルターゲット: IronBarcodeは、クロスプラットフォームのモバイルおよびデスクトップバーコードワークフロー向けに.NET MAUIアプリケーションをサポートしています。
.NETの互換性と将来の準備
IronBarcodeは.NET 8、 .NET 9をターゲットとし、最新の.NETに移行していないプロジェクトのために.NET Standardとの互換性を維持しています。 .NET 10は2026年後半にリリースされる予定であるため、Iron Softwareは定期的なリリースサイクルにより、各メジャー.NETリリースに続いて互換性アップデートを提供することを保証しています。 NetBarcodeは.NET Standard 2.0をターゲットとしており、その互換性レイヤーを通じて現在のランタイム環境でも動作しますが、ライブラリの更新頻度と2Dフォーマットセットは設計範囲によって固定されています。
結論
NetBarcodeとIronBarcodeは、バーコードライブラリの範囲というスペクトラム上で異なる位置を占めている。 NetBarcodeは、1次元バーコード生成に特化した、洗練された実装です。14種類のフォーマット、分かりやすいコンストラクタAPI、そしてImageSharpの収益基準額内のオープンソースプロジェクトにとって導入が容易なMITライセンスを採用しています。 IronBarcodeは、50種類以上のフォーマットに対応した生成機能、画像やPDFからの読み取り機能、そして1Dフォーマットと2Dフォーマットを同じように扱う流暢なAPIを備えた、より包括的なツールキットです。
要件が真に線形バーコード生成に限定されているプロジェクト、例えば従来の小売店向けスキャナー用のEAN-13およびUPC-Aコードを生成するPOSシステムや、固定された短いライフサイクルを持つ社内ツールなどにおいては、NetBarcodeは商用依存を導入することなく必要な機能を提供します。 ライブラリは、その範囲内でうまく構築されており、その範囲は、Type列挙型を最初に見たときから明示されています。
フォーマットの範囲が拡大する可能性のあるプロジェクト、最終的に読み取りが必要になるプロジェクト、またはImageSharpの推移的依存関係のコンプライアンスレビューが懸念されるプロジェクトにおいて、 IronBarcodeはこれら3つのすべてを単一のパッケージで解決します。 1D生成にNetBarcodeを使用し、後から2D生成にQRCoder、読み取りにZXing .NETを追加するチームは、3つの異なるライブラリ保守義務を抱えることになります。 IronBarcodeはそれらを一つに統合します。
その選択は、プロジェクトの要件から直接導き出される。 14種類の1次元フォーマットに対応し、読み取り機能がないことが仕様に完全に合致するならば、NetBarcodeは技術的に妥当な選択肢と言えるでしょう。 仕様に2Dフォーマット、読み取りワークフロー、またはImageSharpのライセンス条件に関する懸念事項が含まれている場合、 IronBarcodeの方がより包括的なソリューションとなります。
よくある質問
NetBarcodeとは何ですか?
NetBarcodeは、C#アプリケーションでバーコードを生成および読み取るための.NETバーコードライブラリです。これは、開発者が .NET プロジェクト用のバーコードソリューションを選択する際に評価するいくつかの選択肢の 1 つです。
NetBarcodeとIronBarcodeの主な違いは何ですか?
IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用しますが、NetBarcodeは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、およびすべての環境にわたるシングルキーライセンスを提供します。
IronBarcodeはNetBarcodeよりもライセンスが簡単ですか?
IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。
IronBarcodeはNetBarcodeがサポートしているすべてのバーコードフォーマットをサポートしていますか?
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はNetBarcodeと比べてどのようにバッチ処理を行いますか?
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インストーラーやランタイムファイルは必要ありません。
NetBarcodeとは異なり、購入前にIronBarcodeを評価することはできますか?
IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。
NetBarcodeとIronBarcodeの価格の違いは何ですか?
IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。
NetBarcodeからIronBarcodeへの移行は簡単ですか?
NetBarcodeからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。
IronBarcodeはロゴ入りQRコードを生成できますか?
はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

