フッターコンテンツにスキップ
他のコンポーネントと比較する

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
$vbLabelText   $csharpLabel

これはプルリクエスト待ちの欠落機能ではありません。列挙型には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
$vbLabelText   $csharpLabel

この境界が制約となる業界には、医薬品追跡(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")
$vbLabelText   $csharpLabel

サポートされている定数の完全なリストは、サポートされているバーコード形式のリファレンスに記載されており、すべての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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

幅、高さ、ラベル構成など、 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

画像からバーコードを読み取るためのガイドでは、読み取りAPIで利用可能な速度調整、複数バーコードの検出、および画像補正オプションについて説明します。

依存関係とライセンスに関する考慮事項

NetBarcodeとImageSharp

NetBarcodeはMITライセンスで提供されています。 依存しているSixLabors.ImageSharpライブラリは異なるモデルを採用しており、オープンソースプロジェクトや、年間総収益が一定のしきい値以下の企業は無料で利用できますが、そのしきい値を超えると商用ライセンスが必要になります。 ImageSharpがプロジェクトの.csproj@に明示的に記載されているか、NetBarcodeを通して通過的に到着しているかに関係なく、このスプリットは適用されます。


<PackageReference Include="NetBarcode" Version="1.8.2" />

<PackageReference Include="NetBarcode" Version="1.8.2" />
XML

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()でサポートされています。

Jordi Bardia
ソフトウェアエンジニア
Jordiは、最も得意な言語がPython、C#、C++であり、Iron Softwareでそのスキルを発揮していない時は、ゲームプログラミングをしています。製品テスト、製品開発、研究の責任を分担し、Jordiは継続的な製品改善において多大な価値を追加しています。この多様な経験は彼を挑戦させ続け、興味を持たせており、Iron Softwareで働くことの好きな側面の一つだと言います。Jordiはフロリダ州マイアミで育ち、フロリダ大学でコンピュータサイエンスと統計学を学びました。

アイアンサポートチーム

私たちは週5日、24時間オンラインで対応しています。
チャット
メール
電話してね