IRONSOFTWAREHOME
他のコンポーネントと比較する

ZXing.Net 対 IronBarcode: 2026年に .NET バーコードライブラリを選ぶ

Curtis Chau
Curtis Chau
Updated: 2026年8月1日

ZXing.Net の BarcodeReader はスレッドセーフではありません。 アプリケーション内のすべての並行読み取りパス—すべての並列 ForEach、すべての非同期コントローラーアクションで同時リクエストを処理するには、それぞれ独自のリーダーインスタンスが必要です。 つまり、インスタンスごとのフォーマット設定の繰り返し、呼び出しごとのBitmap の読み込みと破棄、およびすべてのリクエストごとのリーダー割り当てを意味します。IronBarcode の静的メソッドは、リクエストごとの割り当てなしで同じ作業を行います。 スレッドセーフティはリストにある項目の1つにすぎません。ネイティブのPDFサポートがないこと、WindowsとLinux間でバインディングパッケージが断片化していること、スキャンするすべてのバーコード形式を指定する必要があることなど、これらの特性が、ZXing .NETプロジェクトで時間の経過とともに回避策が蓄積される原因となっています。

ZXing .NETを理解する

ZXing .NETは、Google の Java ZXing ("Zebra Crossing") ライブラリのオープンソース移植版で、Apache 2.0 ライセンスの下でリリースされ、 GitHub上で Michael Jahn によってメンテナンスされています。 これは.NET向けのオープンソースのバーコードライブラリの中で最もダウンロード数が多く、10年以上にわたる長い実績を誇ります。 このライブラリは、幅広いバーコード形式の読み書きに対応しており、無料ライセンスのため、Apache互換の依存関係を必要とするオープンソース製品を含む、あらゆる規模のプロジェクトで利用可能です。

ZXing.Netのアーキテクチャは、Javaからの移植版として始まったという出自を反映している。 BarcodeReader クラスは状態を持つオブジェクトです。Decode を呼び出すと内部状態が書き込まれるため、インスタンスをスレッド間で共有するのは安全ではありません。 適切な並行使用には、スレッドごとに新しいリーダーまたは ThreadLocal<BarcodeReader> プールが必要であり、どちらもスレッドセーフの責任を呼び出し側に置きます。 画像読み込み機能もコアパッケージには含まれていません。 その代わりに、ZXing .NETはプラットフォーム固有のバインディングパッケージを提供し、それぞれが異なるAPIサーフェスを公開します。

主な建築上の特徴は以下のとおりです。

  • **Apache 2.0 ライセンス:**商用利用およびオープンソース利用ともに無料。費用は一切かからず、販売契約も不要です。
  • 状態を持つ BarcodeReader: BarcodeReader インスタンスはスレッドセーフではありません; スレッドごと、または並列処理ごとに新しいインスタンスを作成する必要があります。
  • 手動フォーマット指定: 呼び出し側は各デコード前に reader.Options.PossibleFormats を設定する必要があります; リストに記載されていないフォーマットは、エラーや警告なしに自動的にスキップされます。 -**ネイティブPDFサポートなし:**ライブラリは画像のみを読み取ります。 PDF入力には、デコード前にページをビットマップに変換するための、PdfiumViewerなどの別のPDFレンダリングライブラリが必要です。 -**プラットフォームバインディングの断片化:**コアパッケージには画像読み込み機能がありません。 別々のバインディングパッケージ(ZXing.Net.Bindings.Windows.Compatibility を用いた System.DrawingZXing.Net.Bindings.ImageSharp / .V2 / .V3 SixLabors.ImageSharp を用いた、加えて ZXing.Net.Bindings.SkiaSharpZXing.Net.Bindings.Magick )が異なるデプロイメントターゲットに対して異なる API を公開します。 -活発なコミュニティ: GitHub上では、問題報告、プルリクエスト、議論が活発に行われており、コミュニティレベルのサポートを無料で提供しています。 -幅広いフォーマットに対応: QRコード、コード128、コード39、EAN-13、EAN-8、UPC-A、データマトリックス、PDF 417、アステカ、その他広く使用されているシンボル体系をサポートしています。

ステートフルリーダーアーキテクチャ

ZXing.Net の BarcodeReader は各スレッドまたは並列操作ごとに新しいインスタンスを必要とします。 以下のパターンは、並行処理に必要な最小限の正しい設定を示しています。

// ZXing.Net: a new reader instance is created per iteration
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});

ThreadLocal<BarcodeReader> パターンは、スレッドごとに1つのインスタンスを再利用することで呼び出しごとの割り当てを削減しますが、破棄の複雑さを追加します。 どちらの方法でも、スレッドの安全性は ZXing.Net の呼び出し者の責任となります。

IronBarcodeを理解する

IronBarcodeは、 Iron Software社が開発した商用.NETバーコードライブラリです。 それは、状態を持たない静的な API を通じてバーコードの読み取りと生成を提供します: BarcodeReader.ReadBarcodeWriter.CreateBarcode が主なエントリーポイントであり、どちらも使用前にインスタンスの作成や設定を必要としません。 このライブラリは単一のNuGetパッケージとして提供され、プラットフォーム固有のバインディングパッケージを必要とせず、Windows、Linux、macOS、およびDockerコンテナ内で同じように動作します。

IronBarcodeの読み取りエンジンは、50種類以上のバーコードシンボル体系において、フォーマットの自動検出を実行します。 呼び出し側は、どのフォーマットを探すかを指定しません。 エンジンは各画像をサポートされているすべてのフォーマットに対して評価し、検出されたすべてのバーコードを返します。 スキャン速度と徹底さのバランスを取る必要があるアプリケーションには、ReadingSpeed 列挙型(ExtremeDetail)がフォーマットの列挙を必要とせずに制御を提供します。 このライブラリにはネイティブのPDFサポートも含まれており、別途PDFレンダリングライブラリを必要とせずに、PDF文書のすべてのページからバーコードを直接読み取ることができます。

主な特徴は以下のとおりです:

-**商用ライセンス:**有料ライセンスキーが必要です。 評価用のトライアルモードが利用可能です。

  • 状態を持たない静的 API: BarcodeReader.ReadBarcodeWriter.CreateBarcode はスレッドセーフな静的メソッドです; インスタンス管理は不要です。 -**自動フォーマット検出:**サポートされている50種類以上のバーコードフォーマットは、フォーマットリストなしで検出されます。呼び出し側はフォーマットの範囲ではなく、速度を調整できます。
  • ネイティブ PDF サポート: BarcodeReader.Read は PDF ファイルパスを直接受け入れ、外部 PDF ライブラリなしですべてのページを処理します。 -単一のクロスプラットフォームパッケージ: 1つのNuGetパッケージが、Windows、Linux、macOS、およびDocker上で同じAPIサーフェスを使用して動作します。
  • 流暢な生成 API: BarcodeWriter.CreateBarcodeGeneratedBarcode オブジェクトを返し、ToStream を含む組み込みの出力メソッドを備えています。 -**商用サポート:**有料ライセンスには、サービスレベル保証付きのIron Softwareのサポートチームへのアクセスが含まれます。

機能比較

以下の表は、ZXing .NETとIronBarcodeの基本的な違いをまとめたものです。

フィーチャーZXing.NetIronBarcode
ライセンスアパッチ2.0(無料)商用
スレッドセーフティスレッドセーフではありません。スレッドごとに新しいインスタンスが必要です。スレッドセーフな静的API
フォーマット検出マニュアル — PossibleFormats リストが必要自動 — 50種類以上のフォーマット
PDFリーディングいいえ — PdfiumViewerまたは同様のツールが必要ですネイティブ — 単一メソッド呼び出し
プラットフォームサポートプラットフォームごとに個別のバインディングパッケージ単一パッケージ、全プラットフォーム対応
バーコード生成Bitmap を返し、手動で保存が必要組み込み出力機能を備えた流暢なAPI
価格について無料$999 から (Lite) / $1,499 (Plus)

詳細な機能比較

フィーチャーZXing.NetIronBarcode
読む
スレッドセーフな読書いいえ、スレッドごとのインスタンスは不要です。はい — 静的ステートレスAPI
自動フォーマット検出いいえ — PossibleFormats が必要はい、すべてのフォーマットを自動検出します
画像ごとに複数のバーコードはい — DecodeMultipleはい — デフォルトの動作
PDFバーコード読み取りいいえ — 外部ライブラリが必要ですはい、ネイティブです
破損したバーコードの復旧TryHarder フラグ機械学習を活用した画像補正
速度/精度調整フォーマットリストの削減ReadingSpeed 列挙型
世代
コード128 / コード39はいはい
QRコードはいはい
ロゴ入りQRコードなしはい
QRコードの色のカスタマイズなしはい
PNG/JPEG/PDF形式で出力System.Drawing による手動組み込み出力メソッド
流暢な生成チェーンなしはい
プラットフォームと展開
Windows (System.Drawing)はい — ZXing.Net.Bindings.Windows.Compatibilityはい
Linux / Dockerはい —ZXing.Net.Bindings.ImageSharp / .V2 / .V3(異なる API)はい、同じAPIです
macOSはい — ZXing.Net.Bindings.ImageSharp / .V2 / .V3はい
Dockerの追加依存関係libgdiplus が必要になる場合がありますNone
単一のNuGetパッケージいいえ — コア + バインディング + オプションの ImageSharpはい
ライセンスとサポート
ライセンスの種類アパッチ2.0商用
コスト無料749ドルから
コミュニティのサポートGitHubの課題、活発なコミュニティはい
商用SLAサポートなしはい
オープンソースに友好的はいなし

ねじの安全性と同時処理

スレッドセーフティは、これら2つのライブラリ間の最も重要な運用上の違いであり、ドキュメントの警告が示唆するよりも多くのプロジェクトに影響を与えます。

ZXing .NETアプローチ

ZXing.Net の BarcodeReader は状態を持つオブジェクトです。 Decode が呼び出されると、内部状態が書き込まれます。 2つのスレッドが同じインスタンスを共有すると、書き込み処理が競合状態になります。 結果は非決定論的です。異なる画像からの結果、バーコードが存在するにもかかわらずnull値、または例外が発生する可能性があります。 正しいアプローチは、スレッドごとに1つのリーダーを作成することです。つまり、並列処理または非同期処理の各パスでリーダーを割り当て、構成し、一度使用してから破棄します。

// ZXing.Net: one reader instance per parallel operation
Parallel.ForEach(imagePaths, path =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(path);
    var result = reader.Decode(bitmap);

    if (result != null)
        results[path] = result.Text;
});

ThreadLocal<BarcodeReader> パターンは、スレッドごとに一つのリーダーを再利用することで呼び出しごとの割り当てを削減しますが、破棄の複雑さを追加し、それでも各インスタンスでフォーマット設定が必要です。

IronBarcodeのアプローチ

IronBarcode の BarcodeReader.Read は状態を持たない静的メソッドです。 共有すべきインスタンスも、隔離すべきインスタンスも、保護すべき構成状態も存在しない。 同じ呼び出しは、任意の数の同時実行スレッドから安全に実行できます。

// IronBarcode: static method — no instance management
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

Parallel.ForEach(imagePaths, path =>
{
    var result = BarcodeReader.Read(path, options).FirstOrDefault();
    if (result != null)
        results[path] = result.Value;
});

IronBarcodeの非同期およびマルチスレッドによるバーコード読み取りに関するドキュメントでは、内部のスレッドプーリングモデルについて説明しています。 MaxParallelThreads プロパティは、外部調整を必要とせずに並列度を制御します。

フォーマット検出

フォーマット検出ポリシーは、両ライブラリ間の2つ目の重要な運用上の違いである。

ZXing .NETアプローチ

ZXing.Net は各デコード前に reader.Options.PossibleFormats を埋める必要があります。 バーコード形式がリストにない場合、エラーも警告も部分的な結果も表示されず、検出されません。

// ZXing.Net: PossibleFormats list controls which symbologies are decoded
var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.CODE_39,
    BarcodeFormat.EAN_13,
    BarcodeFormat.EAN_8,
    BarcodeFormat.UPC_A,
    BarcodeFormat.DATA_MATRIX,
    BarcodeFormat.PDF_417
};
reader.Options.TryHarder = true;

using var bitmap = new Bitmap(imagePath);
var results = reader.DecodeMultiple(bitmap);

漏れを防ぐためにすべてのフォーマットをリストアップすると、パフォーマンスが低下します。 想定されるフォーマットのみが記載されている場合、外部ソースから画像が届いた際に、サイレントミスが発生するリスクが生じる。 ZXing .NETには、未登録形式のバーコードが見つかったことを報告する仕組みがありません。

IronBarcodeのアプローチ

IronBarcodeは、サポートされている50種類以上のフォーマットをすべて自動的に検出します。 フォーマットリストは不要であり、受け付けられません。

// IronBarcode: automatic detection across all supported formats
var results = BarcodeReader.Read(imagePath);
foreach (var barcode in results)
{
    Console.WriteLine($"{barcode.Value} ({barcode.Format})");
}

読み取り速度と検出の徹底さ を調整するアプリケーションには、フォーマットの列挙を必要とせずに、IronBarcode が ReadingSpeed 列挙型 - ExtremeDetail - を公開します。 速度調整は、エンジンが各画像をどれだけ積極的に処理するかに影響するものであり、どのフォーマットを考慮するかには影響しません。

PDFドキュメントのサポート

ZXing .NETではPDFの閲覧は大きな制約となっている。このライブラリはPDFを一切サポートしていない。

ZXing .NETアプローチ

PDFファイルにバーコードが埋め込まれている場合、ZXing .NETでは外部のPDFレンダリングライブラリが必要になります。 最も一般的な回避策はPdfiumViewerを使用することですが、これは約20MBのネイティブバイナリと、呼び出し元が実装および維持する必要のあるページレンダリングループを追加します。

// ZXing.Net: PDF input is handled by PdfiumViewer with a per-page render loop
using var pdfDocument = PdfDocument.Load(pdfPath);

var reader = new BarcodeReader();
reader.Options.PossibleFormats = new List<BarcodeFormat>
{
    BarcodeFormat.QR_CODE,
    BarcodeFormat.CODE_128,
    BarcodeFormat.PDF_417
};

for (int i = 0; i < pdfDocument.PageCount; i++)
{
    string tempPath = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png");
    try
    {
        using var pageImage = pdfDocument.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
        pageImage.Save(tempPath, ImageFormat.Png);

        using var bitmap = new Bitmap(tempPath);
        var decoded = reader.DecodeMultiple(bitmap);
        if (decoded != null)
            results.AddRange(decoded.Select(d => d.Text));
    }
    finally
    {
        File.Delete(tempPath);
    }
}

このパターンには、実際に発生する不具合がいくつかあります。DPIの設定ミスにより、認識されないままデータが失われる場合があり、ロックダウンされた環境では一時ファイルのアクセス許可が機能せず、PdfiumViewerのネイティブライブラリは別途デプロイメント管理が必要となり、追加の設定なしではLinux上でセットアップが動作しません。

IronBarcodeのアプローチ

IronBarcodeは、PDFファイルからバーコードをネイティブに読み取ります。すべてのページ、すべてのフォーマットに対応し、外部依存関係は一切ありません。 同じ BarcodeReader.Read 呼び出しが PDF パスを直接受け入れます:

// IronBarcode: one call processes every page of the PDF
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Value}");

ページ列挙も、DPI設定も、一時ファイルも、アプリケーションと並行してデプロイする別のライブラリも不要です。

プラットフォームバインディングとデプロイメント

ZXing.Netの画像処理機能は、プラットフォーム固有のバインディングパッケージに分散されており、それぞれ異なるAPIインターフェースを備えている。

ZXing .NETアプローチ

コア ZXing.Net パッケージはデコーディングロジックを提供しますが、画像読み込みは行いません。 呼び出し元は、デプロイメントターゲットに基づいてバインディングを選択する必要があります。

環境パッケージノート
Windowsデスクトップ / WPFZXing.Net.Bindings.Windows.CompatibilitySystem.Drawing を使用 — Windowsに優しい; Linux上で libgdiplus が必要です
Linux / Docker/ クロスプラットフォームZXing.Net.Bindings.ImageSharp / .V2 / .V3異なるAPIインターフェース。 SixLabors.ImageSharp依存性を追加(V2/V3トラックImageSharp主要バージョン)
macOSZXing.Net.Bindings.ImageSharp / .V2 / .V3Linuxと同じパス

実際の結果として、System.Drawing.Bitmap を使用する Windows コードは Linux 上ではコンパイルも実行もされません。 コンテナ化には、バインディングパッケージの切り替えとイメージ読み込みコードの書き換えが必要です。

// Windows binding path — uses System.Drawing
using ZXing.Windows.Compatibility;
using System.Drawing;

var reader = new BarcodeReader();
using var bitmap = new Bitmap(imagePath);
var result = reader.Decode(bitmap);
// Cross-platform path — different package, different API
using ZXing.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;

var reader = new BarcodeReader<Rgba32>();
using var image = Image.Load<Rgba32>(imagePath);
var result = reader.Decode(image);

Linux ホスト上で Windows バインディングを使用する場合、Docker イメージに libgdiplus も必要で、コンテナに約 50 メガバイトの追加が加わります。

IronBarcodeのアプローチ

IronBarcodeは、すべてのプラットフォームに対応した単一のパッケージを出荷しています。 同じ BarcodeReader.Read(path) 呼び出しは、Windows、Linux、macOS、および Docker コンテナ内で同一にコンパイルおよび実行されます。 バインディングパッケージ、プラットフォーム条件、および追加のシステム依存関係は一切必要ありません。 .NETアプリケーションをコンテナ化するチーム向けに、 IronBarcodeのDockerおよびLinuxセットアップガイドでは、シングルパッケージのデプロイパターンについて詳しく解説しています。

ジェネレーションAPI

どちらのライブラリもバーコードを生成するが、APIは異なる設計アプローチを反映している。

ZXing .NETアプローチ

ZXing.Net の BarcodeWriter クラスはライター オブジェクトを作成し、エンコード オプションを受け入れ、Write を呼び出し、Bitmap を返します。呼び出し側は System.Drawing.Imaging を使用して手動で保存する必要があります:

// ZXing.Net: create writer, set options, call Write, save Bitmap
using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using System.Drawing.Imaging;

var writer = new BarcodeWriter
{
    Format = BarcodeFormat.CODE_128,
    Options = new EncodingOptions
    {
        Width = 300,
        Height = 100,
        Margin = 10
    }
};

using var bitmap = writer.Write("PRODUCT-001");
bitmap.Save("output.png", ImageFormat.Png);

PNG または JPEG 以外の形式への保存、PDF への保存、HTTP 応答のためのバイナリ出力の生成には、呼び出し側が実装する追加の System.Drawing 配管がすべて必要です。

IronBarcodeのアプローチ

IronBarcode の BarcodeWriter.CreateBarcode は、GeneratedBarcode オブジェクトを返し、流暢な連鎖を通じて組み込みの出力メソッドを提供します:

// IronBarcode: create and save in one fluent chain
BarcodeWriter.CreateBarcode("PRODUCT-001", BarcodeEncoding.Code128)
    .ResizeTo(300, 100)
    .SaveAsPng("output.png");

GeneratedBarcode オブジェクトも .SaveAsPdf() を公開しています。これは、System.Drawing を使用して呼び出し側が自身で実装する必要がある出力ターゲットです。

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

ZXing.NetIronBarcodeノート
new BarcodeReader()静的 - インスタンスなしBarcodeReader.Read(...) は静的呼び出しです
reader.Options.PossibleFormats = new List<BarcodeFormat> { ... }不要自動検出はすべてのフォーマットに対応しています
reader.Options.TryHarder = trueSpeed = ReadingSpeed.BalancedBarcodeReaderOptions による精度調整
reader.Decode(bitmap)BarcodeReader.Read(imagePath)パスを直接渡す — Bitmap は不要
reader.DecodeMultiple(bitmap)BarcodeReader.Read(imagePath)常にコレクションを返します
result.Textresult.Value物件名が変更されました
result.BarcodeFormatresult.Format物件名が変更されました
BarcodeFormat.QR_CODEBarcodeEncoding.QRCode列挙型の命名規則の変更
BarcodeFormat.CODE_128BarcodeEncoding.Code128列挙型の命名規則の変更
BarcodeFormat.EAN_13BarcodeEncoding.EAN13列挙型の命名規則の変更
new BarcodeWriter { Format = BarcodeFormat.CODE_128, Options = new EncodingOptions { ... }}BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)静的ファクトリメソッド
writer.Write(data)Bitmap を返します.SaveAsPng(path) / .ToPngBinaryData()GeneratedBarcode の組み込み出力メソッド
PDFはサポートされていません。PdfiumViewerが必要です。BarcodeReader.Read("doc.pdf")ネイティブPDFサポート
スレッドセーフではありませんスレッドセーフな静的APIインスタンス管理は不要です

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

いくつかのシナリオにより、開発チームはZXing .NETの代替としてIronBarcodeを評価するようになりました。

並行処理と高スループット処理

シングルスレッドのコンソールアプリケーションでは正しく動作するZXing .NET統合コードでも、同じコードを同時リクエストを処理するASP.NET Coreコントローラーや、バッチを並列処理するバックグラウンドジョブに移動すると、非決定的な動作を示す場合があります。 ZXing .NETで必要とされるスレッドごとのインスタンスパターンとは、リクエストまたは並列タスクごとに、構成済みのデコーダーセットを備えた完全なリーダーオブジェクトが割り当てられ、一度使用されてから破棄されることを意味します。 リクエスト量が増加するにつれて、このリソース割り当てのプレッシャーは測定可能になる。 この段階に達したチーム、特に物流、倉庫管理、文書処理などで高スループットのスキャンパイプラインを運用しているチームは、スレッドモデルがすべての呼び出し元にこのようなオーバーヘッドを課さないライブラリを探すことが多い。

混合フォーマット文書のスキャン

第三者から文書を受け取るアプリケーションでは、フォーマットリストを設定した際に想定していなかったバーコードフォーマットに遭遇することが頻繁にあります。 Code 128向けに構築された配送連携機能は、QRコードを使用してパートナーから荷物を受け取ります。 PDF 417用に構成された医療記録システムが、新しい機器ベンダーのデータマトリックスシンボル体系に遭遇する。 ZXing .NETでは、これらのケースはいずれもデコードエラーではなくサイレントヌルを生成するため、下流の処理が失敗するまでミスが顕在化しない可能性があります。 フォーマットの見落としによって痛手を負ったチーム、特にバーコードの見落としがビジネス上の影響をもたらすような状況では、フォーマットリストのメンテナンスにかかるコストと、フォーマットを自動的に検出するライブラリの導入コストを比較検討し始める。

PDFバーコード抽出

多くのビジネス文書はPDF形式で届きます。例えば、請求書、出荷明細書、患者記録、コンプライアンス証明書などです。 ZXing .NETはこれらを直接読み込むことができません。 PDFからバーコードを抽出する必要のあるチームは、最終的にZXing .NET上にレンダリングパイプラインを構築・維持することになります。具体的には、PDFライブラリの選択、ネイティブ依存関係の管理、ページレンダリングループの実装、DPI構成の処理、一時ファイルのクリーンアップロジックの記述などを行います。 そのインフラストラクチャコードはバーコードロジックではない。 これは、ZXing .NETが受け入れる形式(ビットマップ)と、実際のビジネス文書(PDF)との間のギャップを埋めるためだけに存在します。 この橋渡しを維持管理するチーム、特にPDFライブラリ自体に独自のライセンス、展開、プラットフォームに関する考慮事項がある場合、多くの場合、入力サーフェス全体を処理できる単一のライブラリを好む。

結合の複雑さを軽減する

Windows上で開発を開始し、後にLinuxやDockerにデプロイするプロジェクトは、ZXing.Netのバインディングの断片化に直接直面します。Windowsバインディングパッケージは、クロスプラットフォームのImageSharpバインディングとは異なるAPIを使用しており、両者を切り替えるには、 NuGet参照と画像読み込みコードの両方を変更する必要があります。 .NETアプリケーションをコンテナ化することを慣例としているチーム、あるいは開発者マシン(WindowsまたはmacOS)と本番サーバー(Linux)で同じコードベースを実行しているチームは、画像読み込みのための2つのコードパスを維持することが、スキャンレイヤーにおける将来のあらゆる変更に摩擦を生じさせることに気づきます。

一般的な移行の考慮事項

ZXing .NETからIronBarcodeへの移行を検討しているチームは、これらの具体的な技術的変更点について計画を立てる必要があります。

バーコードリーダーのインスタンス化の削除

コードベースのすべての new BarcodeReader() 呼び出しは移行中に削除されます。 インスタンス化パターン(リーダーの作成、フォーマットの設定、画像の読み込み、デコード呼び出し)は、単一の静的メソッド呼び出しに集約されます。 ファイルが ZXing.ImageSharp、および SixLabors.ImageSharp 名前空間をインポートする場合、それらのインポートは削除され、単一の using IronBarCode; に置き換えられます。

PossibleFormats 設定の削除

reader.Options.PossibleFormats 割り当てブロックは、各呼び出しサイトで削除されます。IronBarcode は自動フォーマット検出を実行し、フォーマット制限リストを受け入れません。TryHarder フラグは ReadingSpeed プロパティに置き換えられ、フォーマットの範囲を絞ることなく検出努力を制御する BarcodeReaderOptions に置き換えられます。

バインディングパッケージのクリーンアップ

移行は ZXing.Net.Bindings.Windows.Compatibility、任意の ZXing.Net.Bindings.ImageSharp バリアント(.V2 / .V3)、および PDF 読み取りをサポートするために追加された任意の PdfiumViewer パッケージを削除します。 Linux 上の Windows バインディングを通じて System.Drawing をサポートするために Dockerfile に libgdiplus を追加した場合、その行も削除されます。 IronBarcodeは、Dockerイメージにおいてプラットフォーム固有の依存関係を必要としません。

IronBarcodeの追加機能

上記の比較セクションで説明した機能に加え、 IronBarcodeは以下の機能を提供します。

-**ロゴ埋め込みQRコード:**中央にカスタムロゴ画像を重ねたQRコードを生成し、スキャン可能性を確保するために自動エラー修正を行います。

  • **QRコードの色のカスタマイズ:**生成されるQRコードの前景色と背景色を設定し、ブランドイメージに合わせた出力を実現します。
  • **PDFへのバーコード印字:**別途PDFライブラリを用意することなく、既存のPDFページの指定された座標にバーコードを直接書き込みます。
  • **GS1バーコードのサポート:**小売業や医療サプライチェーンで使用されるGS1-128やGS1 DataBarなどのGS1形式のバーコードを読み取り、生成します。
  • マルチスレッド非同期読み取り: await パイプラインにバーコード読み取りを統合するための組み込みの非同期メソッドでブロッキングを行いません。
  • ML駆動の画像補正: TryHarder では回復できない損傷、ぼやけ、または低コントラストのバーコードに対する自動画像強化。

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

IronBarcodeは.NET Standard 2.0以上を対象にしており、.NET Framework 4.6.2以上、.NET Core 3.1, .NET 5, .NET 6, .NET 7, .NET 8、そして.NET 9との互換性を提供しています。同ライブラリはMicrosoft for .NETリリースサイクルに合わせた定期的な更新を受け取り、.NET 10との互換性はリリース時またはリリース近傍で利用可能になります。 ZXing .NETはNuGetパッケージターゲットを通じて幅広い.NET互換性を維持しており、この観点から見ると、両ライブラリは最新 for .NETプロジェクトに適しています。

結論

ZXing .NETとIronBarcodeは、バーコードライブラリの設計において異なる哲学に基づいている。 ZXing .NETは、スレッド処理、フォーマット指定、PDFブリッジングといったすべての責任を呼び出し元に委任する、ステートフルなインスタンスベースのライブラリです。 IronBarcodeは、スレッド処理を内部化し、フォーマットを自動的に検出し、PDF入力をネイティブに処理する、ステートレスで静的APIのライブラリです。 この違いの実際的な結果として、並行処理やドキュメント処理のコンテキストで.NETコードをZXingすると、スレッドごとのインスタンスパターン、フォーマットリスト、PDFレンダリングパイプライン、プラットフォーム固有のバインディングブランチといったインフラストラクチャが蓄積される傾向があるのに対し、同じシナリオのIronBarcodeコードでは、そのような周辺構造は一切必要ありません。

ZXing .NETは、コストゼロが求められるプロジェクトにとって、非常に有力な選択肢です。 Apache 2.0ライセンスを採用しているため、オープンソースプロジェクトや、無料の依存関係を好む商用製品との互換性があります。 既知のバーコード形式、鮮明な画像、シングルスレッドまたは軽度の並列処理といった、管理された環境においては、安定した性能を発揮します。 活発なGitHubコミュニティは問題に対して迅速な対応を提供し、対応フォーマットの幅広さは商用製品に匹敵する。 これらの条件が満たされるアプリケーションにおいては、ZXing.Netのコスト面での優位性は確かに存在し、技術的な制約も対処可能な範囲内である。

IronBarcodeは、ZXing.Netの設計上の制約が運用コストとなるシナリオに対応します。例えば、リクエストごとのインスタンス割り当てが測定可能な同時実行Web API、PDF入力が例外ではなく標準となるドキュメントパイプライン、サイレントミスがビジネスリスクとなる混合フォーマットスキャン、2つのバインディングパッケージが2つのコードパスを意味するクロスプラットフォーム展開などです。 そうした状況においては、ライブラリの商用ライセンスによって、インスタンス管理を必要としないスレッドモデル、メンテナンスを必要としないフォーマット検出機能、そして別のライブラリを必要としないPDFサポートが提供されます。

その決定はプロジェクトの要件によって異なります。 単一フォーマットのプロトタイプ、オープンソースのスキャナ、またはコストが制約となる少量生産ツールなど、ZXing .NETが適切な選択肢となるケースです。外部ソースから複数のスレッドでドキュメントを処理する本番環境の Web API においては、IronBarcode の設計上の前提が実際の運用状況と合致します。 ライブラリの検出率や実際のスキャンシナリオにおける比較をより包括的に検討するには、 ZXing .NETとIronBarcodeのバーコードスキャナーの比較記事が追加分析を提供しています。

Curtis Chau
テクニカルライター

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

...
詳しく読む

関連する記事

Key in blue circle

無料の30日間トライアルキーをすぐに入手してください。

Your trial license will be sent to your email address

制限なし。100% ロック解除済み。クレジットカード不要。

bullet_checkedクレジットカードやアカウントの作成は不要です。制限なし。100% ロック解除済み。クレジットカード不要。
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
無料のライブデモを予約する
Booking Badge

世界中の数百万人のエンジニアから信頼されています。

ライセンスはより安く
義務のない相談を受ける
下記のフォームを記入するか、sales@ironsoftware.comにメールしてください。
あなたの詳細は常に守秘されます。
世界中の数百万人のエンジニアから信頼されています。
ライセンスはより安く
あなたの無料30日間の試用キーをすぐに入手。
クレジットカードやアカウントの作成は不要です。