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

LEADTOOLS BarcodeとIronBarcodeの比較:C#バーコードライブラリの比較

NetBarcode対IronBarcode:1D専用生成VS完全なバーコードツールキットの比較

NetBarcodeのType列挙型にはQRコードの項目がありません。 配送ラベル作成プロジェクトで3ヶ月目にQRコードの要件が追加されると、開発者は別のライブラリに頼ることになる。 その2つ目のライブラリは、独自のAPIインターフェース、独自のリリーススケジュール、そしてNetBarcodeが既に必要としているバージョンとバージョンがずれる可能性のある、共通のSixLabors.ImageSharp依存関係をもたらします。 この比較では、NetBarcodeとは何か、どのような場面で適しているか、そしてIronBarcodeが2つ目や3つ目のパッケージを追加することなく、NetBarcodeの不足部分を補うことができる点について検証します。

NetBarcodeを理解する

NetBarcodeは、MITライセンスの下で公開されているオープンソース for .NETバーコード生成ライブラリです。 これは文字列データから線状バーコード画像を生成するために開発されたもので、その目的を完璧に果たしている。 このライブラリはCode128、EAN-13、Code39、および他のいくつかの1D形式を対象としており、すべてがシンプルなコンストラクターと少数の出力メソッドで公開されています。 その依存関係にあるSixLabors.ImageSharpは画像レンダリングレイヤーを提供し、1.8バージョン以降、この依存関係は公共API内でGetImage()を介して反映されています。

NetBarcodeは、汎用的なバーコードツールキットを目指しているわけではありません。 読み取り機能はなく、2Dフォーマットにも対応していません。 これらは意図的な範囲決定です。 このライブラリは、1次元バーコードのみを必要とするアプリケーションに最適であり、MITライセンスであるため、オープンソースの環境での導入も容易です。

主な建築上の特徴:

  • MITライセンス:ライブラリ自体はMITライセンスですが、依存関係にあるSixLabors.ImageSharpには、一定の収益基準を満たすと適用される分割商用ライセンスが適用されます。
  • 1D専用設計: Type列挙型は、8つの線形シンボロジファミリーにわたる11の値を定義しています; 2Dのエントリーはなく、UPC-A、UPC-E、ITF、MSIのエントリーもありません
  • SixLabors.ImageSharp依存: 画像レンダリングはImageSharpに委任され、v1.8以降、Image<Rgba32>を返し、公共APIで直接ImageSharpの型を公開しています
  • コンストラクタベースのAPI: バーコードはGetImage()で保存または取得されます -読み取りAPIなし: NetBarcodeは生成専用です。 バーコード画像をデコードするメソッドやクラスはありません。 -バッチ処理なし:各バーコードは独立したコンストラクタ呼び出しです。 no built-in enumeration or batch pipeline

型列挙型設計境界

Type列挙型は、NetBarcodeが生成できる要素の権威的なリストです。 それを詳しく調べてみると、図書館の規模が明らかになる。

// ネットバーコード Type enum — complete list as of v1.8
public enum Type
{
    Codabar,
    Code11,
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39E,
    Code93,
    EAN13,
    EAN8
}

// 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.UPCA        — does not exist
// Type.UPCE        — does not exist
// Type.ITF         — does not exist
// Type.MSI         — does not exist
// ネットバーコード Type enum — complete list as of v1.8
public enum Type
{
    Codabar,
    Code11,
    Code128,
    Code128A,
    Code128B,
    Code128C,
    Code39,
    Code39E,
    Code93,
    EAN13,
    EAN8
}

// 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.UPCA        — does not exist
// Type.UPCE        — does not exist
// Type.ITF         — does not exist
// Type.MSI         — does not exist
' ネットバーコード Type enum — complete list as of v1.8
Public Enum Type
    Codabar
    Code11
    Code128
    Code128A
    Code128B
    Code128C
    Code39
    Code39E
    Code93
    EAN13
    EAN8
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
' Type.UPCA        — does not exist
' Type.UPCE        — does not exist
' Type.ITF         — does not exist
' Type.MSI         — does not exist
$vbLabelText   $csharpLabel

この列挙型には8つの線形シンボロジー群にわたる11のエントリがあり、ライブラリの意図された範囲を反映しています。 QRコード、DataMatrix、PDF417、Aztec、UPC-A、UPC-E、ITF、またはMSIを要求するアプリケーションは、それらの形式を提供するための別のパッケージを取得する必要があります。

IronBarcodeを理解する

IronBarcodeは、バーコードの生成と読み取りの両方を単一のパッケージでカバーする商用.NETバーコードライブラリです。 Iron Software社によって開発・保守されており、最新 for .NETバージョンを対象とした定期的なアップデートが行われています。 ライブラリの静的API表面は、異なるバーコード形式への切り替えを単一の定数の変更だけにするよう設計されています。BarcodeWriter.CreateBarcode呼び出しは、Code128、QRコード、DataMatrix、PDF417、Aztecを生成します。

IronBarcodeは、画像ファイルとPDFドキュメントを受け入れ、フォーマット識別付きのデコード結果を返すBarcodeReaderクラスを通じてバーコード読み取りを処理します。 これは、生成と閲覧が単一の依存関係、単一のライセンス、および追跡すべき単一のリリースノートセットを共有することを意味します。

主な特徴:

  • 統一された生成と読み取り: BarcodeReaderの両方が単一のNuGetパッケージに含まれています
  • 50種類以上の対応フォーマット: 1Dフォーマットには、NetBarcodeのすべての同等フォーマットが含まれます。 2Dフォーマットには、QRコード、DataMatrix、PDF417、Aztecなどがあります。
  • 流暢なチェーンAPI: SaveAsPng(), SaveAsJpeg(), ToPngBinaryData()、およびストリームベースのオーバーロードを含む出力メソッドを提供します。
  • ImageSharpへの依存なし: IronBarcodeの画像レンダリングは自己完結型です。 SixLaborsの推移的依存関係は導入されません
  • PDFサポート: 読み取りAPIは、画像形式に加えて直接.pdfファイルを受け入れます -商用ライセンス:ライセンスキーが必要です。 トライアルモードが利用可能で、購入時に透かしが削除されます。

機能比較

フィーチャー ネットバーコード IronBarcode
1次元バーコード生成 はい はい
2次元バーコード生成 なし はい
バーコード読み取り なし はい
PDFサポート なし はい
総シンボル体系 11の列挙値 / 8つの分類群 50歳以上
ImageSharpの依存関係 はい(分割ライセンス) なし
ライセンスモデル MITライセンス(ImageSharp使用条件あり) 商用

詳細な機能比較

フィーチャー ネットバーコード IronBarcode
世代
Code128(および128A/B/C)、Code39、Code39 Extended、Code93、Code11 はい はい
EAN-13、EAN-8、Codabar はい はい
UPC-A、UPC-E、ITF、MSI なし はい
QRコード なし はい
データマトリックス なし はい
PDF417 なし はい
アステカ なし はい
GS1-128、GS1データバー なし はい
郵便形式(インテリジェントメール、ロイヤルメール) なし はい
SVG出力 なし はい
読む
バーコード画像をデコードする なし はい
PDF文書から読み込む なし はい
複数バーコード検出 なし はい
自動フォーマット検出 なし はい
APIデザイン
コンストラクタベースの生成 はい いいえ(静的メソッド)
流暢な出力チェーン なし はい
バッチ処理のサポート マニュアル 内蔵
ライセンスと依存関係
図書館ライセンス MIT 商用
ImageSharpの依存関係 はい なし
商用サポート コミュニティ プロフェッショナル

フォーマットのカバー範囲

NetBarcodeアプローチ

NetBarcodeは、Type列挙型を介して8つのシンボロジファミリーにわたる11の線形バーコード列挙値を提供します。 その範囲内では、フォーマットの選択は簡単です。適切な列挙型メンバーをコンストラクタに渡せばよいのです。 境界線も同様に明確だ。列挙型の範囲外のフォーマットを使用しようとすると、コンパイル時エラーが発生する。

// ネットバーコード — 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
// var upca   = new Barcode("data", Type.UPCA);        // error CS0117
// var itf    = new Barcode("data", Type.ITF);         // 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
// var upca   = new Barcode("data", Type.UPCA);        // error CS0117
// var itf    = new Barcode("data", Type.ITF);         // 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
' Dim upca As New Barcode("data", Type.UPCA)     ' error CS0117
' Dim itf As New Barcode("data", Type.ITF)       ' error CS0117
$vbLabelText   $csharpLabel

この境界が制約となる業界には、医薬品追跡(FDAの2次元バーコード義務付けに基づくDataMatrix)、航空会社の搭乗券(Aztec)、物流マニフェスト(PDF417)、モバイルマーケティング(QRコード)などがある。 これらの要件のいずれも、NetBarcodeを単独のソリューションとして利用することを不可能にする。

IronBarcodeのアプローチ

IronBarcodeは、同じBarcodeWriter.CreateBarcodeメソッドを通じてすべてのサポートされた形式を公開します。 API表面は、1D形式から2D形式に移行する際に変更されることはありません。異なるのはBarcodeEncoding定数のみです。

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の生成モデルはコンストラクタベースです。 データ文字列とBarcodeオブジェクト。 出力は、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

GetImage()メソッドの戻り型は、下流のコードをImageSharpライブラリに結びつけます。 結果を受け入れるまたは格納する任意のメソッドは、Image<Rgba32>として宣言する必要があり、呼び出しコードに推移的依存関係を導入します。

IronBarcodeのアプローチ

IronBarcodeは流暢なチェーンを使用します。 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はBarcodeWriterと同じパッケージに含めています。 読み取り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.Format}: {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.Format}: {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.Format}: {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.3" />

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

NetBarcodeが主なターゲットとする、バーコードを大規模に処理する小売業や物流会社の場合、年間収益はImageSharpの商用ライセンスが適用される基準額を超えることが多い。 コンプライアンス監査によって、パッケージツリーに組み込まれたこの義務が明らかになる可能性がある。

v1.8リリースは、ImageSharp依存の追加の結果としてSixLabors.ImageSharp.Image<Rgba32>に変わったという影響をもたらしました。 明示的な型付けなしでusing指令が必要になりました。 ImageSharp独自のAPIが将来のバージョンで進化すると、NetBarcodeの公開APIにも影響が及ぶ。

IronBarcode

IronBarcodeはSixLabors.ImageSharpに依存していません。 ライセンス条件はIronBarcodeのライセンスページに直接記載されており、分割基準や推移的な商業義務は存在しません。 評価用の試用版キーが利用可能です。 購入したライセンスは、生成された出力から試用版の透かしを削除します。

APIマッピングリファレンス

ネットバーコード IronBarcode ノート
new Barcode(data, Type.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) コンストラクタ → 静的メソッド
new Barcode(data, Type.Code128A/B/C) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) IronBarcodeはサブセットを自動選択します
new Barcode(data, Type.EAN13) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) 直接マッピング
new Barcode(data, Type.EAN8) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) 直接マッピング
new Barcode(data, Type.Code39) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) 直接マッピング
new Barcode(data, Type.Code39E) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39Extended) 直接マッピング
new Barcode(data, Type.Code93) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) 直接マッピング
new Barcode(data, Type.Code11) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code11) 直接マッピング
new Barcode(data, Type.Codabar) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) 直接マッピング
barcode.SaveImageFile("x.png") .SaveAsPng("x.png") メソッド名の変更
barcode.SaveImageFile("x.jpg") .SaveAsJpeg("x.jpg") メソッド名の変更
barcode.GetImage()Image<Rgba32> .ToPngBinaryData() または .SaveAsPng() ImageSharpタイプは公開されていません
なし Type.UPCA / UPCE / ITF / MSI BarcodeEncoding.UPCA / UPCE / ITF / MSI 新機能
なし Type.QRCode BarcodeEncoding.QRCode 新機能
なし Type.DataMatrix BarcodeEncoding.DataMatrix 新機能
なし Type.PDF417 BarcodeEncoding.PDF417 新機能
なし Type.Aztec BarcodeEncoding.Aztec 新機能
読み取りAPIはありません BarcodeReader.Read(path) 新機能
using NetBarcode; using IronBarCode; 名前空間の置換
using SixLabors.ImageSharp; 取り除く もう必要ありません

完全なフォーマットリファレンスは、サポートされているバーコードフォーマットのドキュメントに記載されています。

チームがNetBarcodeからIronBarcodeへの移行を検討する際

QRコードおよび2Dフォーマットの要件

NetBarcodeの代替案を検討する最も一般的なきっかけは、QRコードに関する新たな要件の発生である。 小売ラベルや出荷明細書用の1次元バーコード生成から始まるアプリケーションは、非接触リンク、モバイルアプリのディープリンク、マーケティングキャンペーンなど、QRコードを必要とするケースが一般的です。 Type 列挙型に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つのリリースサイクルに集中します。

一般的な移行の考慮事項

パッケージの入れ替えと推移的依存関係のクリーンアップ

最初のステップは、dotnet remove package NetBarcodeを使用してNetBarcodeを削除することです。他のプロジェクト内のパッケージが推移的に引き込む場合、SixLabors.ImageSharpパッケージが依存関係ツリーに再表示される可能性があります。 除去後、dotnet list package --include-transitiveで復元されたパッケージリストを確認し、ImageSharpがまだ存在しているか、商用ライセンス条件がまだ適用されるかを確認します。

GetImage() の戻り値の型置換

Image<Rgba32>として保存していたコードは更新する必要があります。 ImageSharp型にはIronBarcodeに直接相当する型はありません。 代替画像は、その後の画像利用状況によって異なる。 イメージをストリームに保存するコードは、.SaveAsPng(stream)と置き換えることができます。 生のバイトを取得するコードは、.ToPngBinaryData()を使用できます。 返された画像に対してImageSharpによる追加操作を行うコードは、それらの操作を個別に評価する必要があります。

名前空間の更新

using IronBarCode;に置き換える必要があります。 プロジェクト全体でこれらのusingステートメントを検索することで、ビルドを試行する前に注意が必要なすべてのファイルが特定されます。

IronBarcodeの追加機能

本比較で取り上げた基本的な生成機能と読み取り機能に加え、 IronBarcodeは以下の機能を提供します。

  • SVGバーコード出力印刷ワークフローやスケーラブルなラベルデザインに適したベクター形式のバーコード画像を生成します。 -バーコードのスタイル設定生成されるバーコードのバーの色、背景色、注釈フォント、余白、回転角度を設定します。
  • GS1-128およびGS1 DataBar小売およびサプライチェーンのコンプライアンスに対応したアプリケーション識別子構造のバーコード -郵便フォーマットインテリジェントメール、ロイヤルメール、およびその他の郵送アプリケーション用郵便シンボル体系
  • PDFバーコード抽出別途PDFライブラリを用意することなく、複数ページのPDFドキュメントから直接バーコードを読み取ります。 -バッチ生成単一のパイプライン内でバーコードデータのコレクションを効率的に処理します
  • MAUIおよびモバイルターゲット IronBarcodeは、クロスプラットフォームのモバイルおよびデスクトップバーコードワークフロー向けに.NET MAUIアプリケーションをサポートしています。

.NETの互換性と将来の準備

IronBarcodeは現在 for .NETバージョンをターゲットにしており、まだモダンな.NETに移行していないプロジェクトのために.NET Standardとの互換性を維持しています。 Iron Softwareの定期的なリリーススケジュールは、各主要な.NETリリースと互換性更新を連携しています。 NetBarcodeは.NET Standard 2.0をターゲットとしており、その互換性レイヤーを通じて現在のランタイム環境でも動作しますが、ライブラリの更新頻度と2Dフォーマットセットは設計範囲によって固定されています。

結論

NetBarcodeとIronBarcodeは、バーコードライブラリの範囲というスペクトラム上で異なる位置を占めている。 NetBarcodeは、1Dバーコード生成のための焦点を絞ったクリーンな実装です。8つのシンボロジーファミリーにわたる11の列挙値、明確なコンストラクタAPI、およびImageSharp収益基準内のオープンソースプロジェクトの採用を円滑にするMITライセンスを備えています。 IronBarcodeは、50種類以上のフォーマットに対応した生成機能、画像やPDFからの読み取り機能、そして1Dフォーマットと2Dフォーマットを同じように扱う流暢なAPIを備えた、より包括的なツールキットです。

要件が対応するセット内での線形バーコード生成に本当に限定されているプロジェクトには(ヨーロッパの小売りスキャナ向けのEAN-13コードを生成するPOSシステム、または固定かつ短寿命の内部ツールなど)、NetBarcodeは商業的依存を導入せずに必要なものを提供します。 ライブラリはその範囲内でよく構築されており、その範囲はType列挙型の最初の外観から明らかです。

フォーマットの範囲が拡大する可能性のあるプロジェクト、最終的に読み取りが必要になるプロジェクト、またはImageSharpの推移的依存関係のコンプライアンスレビューが懸念されるプロジェクトにおいて、 IronBarcodeはこれら3つのすべてを単一のパッケージで解決します。 1D生成にNetBarcodeを使用し、後から2D生成にQRCoder、読み取りにZXing .NETを追加するチームは、3つの異なるライブラリ保守義務を抱えることになります。 IronBarcodeはそれらを一つに統合します。

その選択は、プロジェクトの要件から直接導き出される。 NetBarcodeの11の1D列挙値が8つのシンボロジーファミリーにまたがり、読み取り能力がないという仕様が正確に一致する場合、NetBarcodeは技術的に妥当な選択です。 仕様に2Dフォーマット、読み取りワークフロー、またはImageSharpのライセンス条件に関する懸念事項が含まれている場合、 IronBarcodeの方がより包括的なソリューションとなります。

よくある質問

NetBarcodeとは何ですか?

NetBarcodeは、C#アプリケーションでバーコードを生成および読み取るため for .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 はど 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インストーラーやランタイムファイルは必要ありません。

NetBarcodeとは異なり、購入前にIronBarcodeを評価することはできますか?

IronBarcodeのトライアルモードでは、完全なデコードされたバーコード値を返します。購入を決定する前に、ご自身のドキュメントで読み取り精度をベンチマークすることができます。

NetBarcodeとIronBarcodeの価格の違いは何ですか?

IronBarcodeは、開発および量産をカバーする永続的なシングルデベロッパーライセンスで749ドルからご利用いただけます。価格の詳細とボリュームオプションはIronBarcodeのライセンスページでご覧いただけます。別途ランタイムライセンスは必要ありません。

NetBarcodeからIronBarcodeへの移行は簡単ですか?

NetBarcodeからIronBarcodeへの移行は、主にインスタンスベースのAPIコールをIronBarcodeの静的メソッドに置き換え、ライセンスの定型文を削除し、結果のプロパティ名を更新します。ほとんどの移行はコードを追加するのではなく、コードを削減します。

IronBarcodeはロゴ入りQRコードを生成できますか?

はい。QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")は、設定可能なエラー修正機能付きで、ブランド画像をネイティブにQRコードに埋め込みます。カラーQRコードもChangeBarCodeColor()でサポートされています。

Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

アイアンサポートチーム

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