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

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

バーコードライブラリを試用版で評価する場合、購入を決定する前に、実際に自分の画像で正しく動作するかどうかを確認することを期待するでしょう。 Accusoft BarcodeXpressにはそのオプションはありません。 評価モードでは、デコードされたバーコードの値は部分的に隠蔽されます。"1234567890"は"1234...XXX"として返されます。 図書館がバーコードを検出したことは確認できますが、バーコードを正しく読み取ったかどうかは確認できません。 それは検証前にコミットしてしまう状況であり、価格設定を検討する前からすでに大きな摩擦点となっている。

Accusoft BarcodeXpressについて理解する

Accusoftは、数十年にわたりEnterprise環境向けのドキュメントイメージングソフトウェアを開発してきました。 BarcodeXpressは、PrizmDoc、ImageGear、Accusoft Imagingを含む、より広範な製品ファミリーの一部です。 既にこれらの製品を使用しているチームは、使い慣れたAPIインターフェースを利用でき、既存のAccusoftアカウントとの関係を活用できます。しかし、スタンドアロンのバーコード利用においては、こうした状況はあまり役に立ちません。

コアSDKは、 .NET Core用のNuGetパッケージとして提供されています。 APIはインスタンスベースです。BarcodeXpressオブジェクトを作成し、Licensingプロパティを設定し、実際の操作には子オブジェクトの@@--CODE-37871--@と@@--CODE-37872--@を使用します。 デュアルキーライセンスシステムは、BarcodeXpressを他の多くの競合製品と差別化する特徴です。

BarcodeXpressの主なアーキテクチャ特性:

  • インスタンスベースのAPI: すべての操作はインスタンスを必要とします; 静的な便利メソッドは設計の一部ではありません
  • 2層ライセンス: SDKライセンス (SolutionName + SolutionKey) とランタイムライセンス (@@--CODE-37876--@) は別々のシステムであり、別々に購入する必要があります。 -評価モードによる隠蔽:評価モードでは、デコードされた値が意図的に劣化されます。"1234567890"は"1234...XXX"として返されるため、購入前の精度テストは不可能になります。
  • マニュアルの形式指定:読者は、どのシンボルを検索するかを列挙するために、明示的な@--CODE-37877--@@設定が必要です; 未指定のフォーマットは検出されません
  • 標準版の処理速度上限:40 PPM 標準版では処理速度が毎分 40 ページに制限されます。この制限は、導入前ではなく導入後にほとんどのチームが直面するものです。 -ネイティブのPDFサポートなし:リーダーがPDFファイルを処理するには、別のライブラリを使用してPDFファイルを画像に事前にレンダリングする必要があります。 -最低5つのランタイムライセンス:シングルサーバー展開の場合でも、最低5つのランタイムライセンスを購入する必要があります。

2キーシステムの説明

BarcodeXpressは、ライセンスを概念的に分離した2つのレイヤーに分けています。

// BarcodeXpress: two separate license keys required
using Accusoft.BarcodeXpressSdk;

var barcodeXpress = new BarcodeXpress();
// Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName";
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
// Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"));
// BarcodeXpress: two separate license keys required
using Accusoft.BarcodeXpressSdk;

var barcodeXpress = new BarcodeXpress();
// Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName";
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
// Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"));
Imports Accusoft.BarcodeXpressSdk

Dim barcodeXpress As New BarcodeXpress()
' Step 1: SDK license (for development)
barcodeXpress.Licensing.SolutionName = "YourCompanyName"
barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")
' Step 2: Runtime license (for production — minimum 5 purchased)
barcodeXpress.Licensing.UnlockRuntime("YourRuntimeKey", Convert.ToInt64("98765432109876"))
$vbLabelText   $csharpLabel

CODE-37878--@と@@--CODE-37879--@のペアは、SDK自体をアクティブにします。 独自のキーとソリューション・キーを別々の引数として取るUnlockRuntime@呼び出しは、プロダクション・デプロイメント機能を有効にします。 本番環境への展開において、完全かつ隠蔽されていないバーコード値を返すためには、両方の情報が存在し、かつ有効である必要があります。

コード・レビューにおいて、このパターンは予測可能な質問を生み出す:"なぜUnlockRuntimeを2つの異なるキーで呼び出しているのですか?その答えは、AccusoftがSDKライセンスとデプロイメントライセンスを別個の課金を伴う別個の製品として扱っていることであり、API自体からは必ずしも明らかではありません。 初期設定から6か月後にこのコードを保守しているチームは、どのキーがどれに対応しているかを理解するために、ドキュメントまで遡って調べる必要がある場合が多い。

CODE-37882--@@プロパティを使用すると、ランタイム・レイヤーがアクティブかどうかを確認できます:

if (!barcodeXpress.Licensing.IsRuntimeUnlocked)
{
    // In this state, barcode values are partially obscured
    // "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active");
}
if (!barcodeXpress.Licensing.IsRuntimeUnlocked)
{
    // In this state, barcode values are partially obscured
    // "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active");
}
If Not barcodeXpress.Licensing.IsRuntimeUnlocked Then
    ' In this state, barcode values are partially obscured
    ' "1234567890" returns as "1234...XXX"
    Console.WriteLine("Warning: runtime license not active")
End If
$vbLabelText   $csharpLabel

このチェックは、評価モードの出力が例外をスローしたり明らかに失敗したりするのではなく、部分的なデータを黙って返すことにチームが気づいたときに追加するガードです。

IronBarcodeを理解する

IronBarcodeは、 NuGetパッケージ以外に外部依存関係を持たない、スタンドアロンの.NETバーコードライブラリです。 静的ファクトリメソッドによって生成と読み取りの両方を処理するため、インスタンスのライフサイクルを管理する必要がなく、アプリケーションコード全体にコンストラクタ呼び出しが散在することもありません。

シングルキーライセンスモデルとは、トライアルモードでテストした内容がそのまま本番環境でも実行されることを意味します。唯一の違いは、トライアル期間中に生成されるバーコード画像にウォーターマークが入る点です。 デコードされた値は常に完全なので、購入を決定する前に、実際の文書で読み取り精度をベンチマークすることができます。

IronBarcodeの主な特徴:

  • 静的API設計:@--CODE-37883--@と@--CODE-37884--@はステートレス静的メソッドです。 -シングルライセンスキー: 1つのキーで開発環境と本番環境の両方の展開に対応します。 個別のランタイムライセンスレイヤーはありません -完全な試行値:試行モードでは、デコードされた完全な値が返されます。 透かしは生成された出力画像にのみ適用され、読み取り結果には適用されません。 -自動フォーマット検出: IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動的に検出します。 CODE-37885は必要ありません。
  • ネイティブPDFサポート: @--CODE-37886--@ 別個のレンダリングステップなしでPDFファイルを直接処理します。 -スループットの上限なし:処理速度はハードウェアとネットワーク容量によってのみ制限され、ソフトウェアによる上限はありません。 -スレッドセーフ設計:ステートレスな静的メソッドは、インスタンス分離なしで任意の数のスレッドから同時に呼び出すことができます

機能比較

フィーチャー Accusoft BarcodeXpress IronBarcode
ライセンスモデル SDKライセンス+別途ランタイムライセンス 永久鍵1本
評価モードの動作 バーコードの値が一部隠れています("1234...XXX") 完全な値が返され、生成された出力にのみ透かしが入ります。
スループット制限(標準) 毎分40ページ スループット制限なし
PDFサポート 画像抽出には外部PDFライブラリが必要です ネイティブ - @--コード-37887--@@@。
APIスタイル インスタンスベースの詳細な設定 静的ファクトリメソッド、流暢なAPI
スレッドセーフ スレッドごとにインスタンスが必要です ステートレスな静的メソッド - スレッドセーフ
価格設定のエントリーポイント 1,960ドル+SDK + 2,500ドル+ランタイム(最低5) 749ドル(永久ライセンス、 Lite、開発者1名)

詳細な機能比較

フィーチャー Accusoft BarcodeXpress IronBarcode
ライセンスについて
ライセンスモデル SDKキー+ランタイムキー 永久鍵1本
最小ランタイムライセンス 5(サーバー1台の場合も) ランタイムライセンスの概念なし
評価モード 値は"1234...XXX"のように伏せられています 完全な値、出力画像にのみ透かしが入ります
永久ライセンス 標準仕様ではありません - 営業担当者にお問い合わせください はい、全ティア
年間更新 サポートに必要 オプション
読む
フォーマット自動検出 マニュアル — バーコードの種類を指定する必要があります サポートされているすべてのフォーマットで自動的に
PDFを読む 外部PDFライブラリが必要です ネイティブ
画像ごとに複数のバーコード はい、BarcodeTypesの構成で。 はい、ExpectMultipleBarcodesオプション付き
結果プロパティ BarcodeValue, BarcodeType コード-37892--@@、コード-37893--@@、コード-37894--@、コード-37895--@@。
スループット制限 40 PPM(標準版) どの階層でも制限なし
世代
コード128生成 はい。 はい。
QRコード生成 はい はい。
ロゴ入りQRコード 手動での画像重ね合わせが必要です CODE-37899-- ビルトイン
出力形式 ファイル保存 PNG、JPG、PDF、バイナリデータ、ストリーム
プラットフォームと展開
.NET フレームワーク 別個のレガシーSDK .NET フレームワーク4.6.2以降
.NET Core / .NET 5 以上 はい(.NET Core SDK) .NET Core 3.1以降、 .NET 5/6/7/8/9
Linux/ドッカー はい はい — Windows x64/x86、Linux x64、macOS x64/ARM
Dockerライセンス設定 ライセンスファイルまたはライセンスサーバー 環境変数
CI/CD統合 SDKキーとランタイムキーの両方が必要です 一つの秘密
バッチ処理
スレッドセーフティ スレッドごとにインスタンスが必要です ステートレス — Parallel.ForEach が安全
並列バッチ スレッドごとのインスタンス管理が必要 直接並列ForEachをサポート

ライセンスアーキテクチャ

BarcodeXpressとIronBarcodeのライセンス体系の複雑さの違いは、本番環境で実行される初期化コードを作成する際に最も顕著に現れます。

BarcodeXpressのアプローチ

using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

    public BarcodeService()
    {
        _barcodeXpress = new BarcodeXpress();

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp";
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");

        // Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime(
            "RuntimeKey-XXXXXX",
            Convert.ToInt64("98765432109876"));

        // Guard against partial-value mode
        if (!_barcodeXpress.Licensing.IsRuntimeUnlocked)
        {
            throw new InvalidOperationException(
                "Runtime license not active — barcode values will be obscured");
        }
    }
}
using Accusoft.BarcodeXpressSdk;

public class BarcodeService
{
    private readonly BarcodeXpress _barcodeXpress;

    public BarcodeService()
    {
        _barcodeXpress = new BarcodeXpress();

        // Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp";
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");

        // Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime(
            "RuntimeKey-XXXXXX",
            Convert.ToInt64("98765432109876"));

        // Guard against partial-value mode
        if (!_barcodeXpress.Licensing.IsRuntimeUnlocked)
        {
            throw new InvalidOperationException(
                "Runtime license not active — barcode values will be obscured");
        }
    }
}
Imports Accusoft.BarcodeXpressSdk

Public Class BarcodeService
    Private ReadOnly _barcodeXpress As BarcodeXpress

    Public Sub New()
        _barcodeXpress = New BarcodeXpress()

        ' Layer 1: SDK license
        _barcodeXpress.Licensing.SolutionName = "AcmeCorp"
        _barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")

        ' Layer 2: Runtime license — separate purchase, minimum 5
        _barcodeXpress.Licensing.UnlockRuntime("RuntimeKey-XXXXXX", Convert.ToInt64("98765432109876"))

        ' Guard against partial-value mode
        If Not _barcodeXpress.Licensing.IsRuntimeUnlocked Then
            Throw New InvalidOperationException("Runtime license not active — barcode values will be obscured")
        End If
    End Sub
End Class
$vbLabelText   $csharpLabel

これは、バーコード操作が行われる前に、2つの異なるライセンスキーシステムを管理するためだけに存在する、15行のコンストラクタです。 CODE-37900--@@@ガードはオプションではありません - これがないと、ランタイムキーがない、または設定ミスのある環境では、サービスは黙って劣化した値を返します。

IronBarcodeのアプローチ

using IronBarCode;

// In Program.cs or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY";
using IronBarCode;

// In Program.cs or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode

' In Program.vb or startup configuration
IronBarCode.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

これが完全なライセンス設定です。別のランタイムのアンロック、ソリューション名、2つの引数UnlockRuntime呼び出しはありません。 Dockerでは、これは起動時に読み込まれる環境変数になります。CI/CDパイプラインでは、これは1つのシークレットです。 コンテナオーケストレーターでは、これはポッドに注入される環境変数の1つです。

バーコードの読み取り

バーコード読み取りは、2つのライブラリの設定方法の違いを明らかにします。BarcodeXpressは明示的なフォーマット列挙とプロパティベースのセットアップAPIを必要とするのに対し、 IronBarcodeは単一のメソッド呼び出しですべてを自動的に検出します。

BarcodeXpressのアプローチ

BarcodeXpressでの読み取りは、定数と値を取るSetPropertyValueを介してリーダーを設定し、結果を取得するためにAnalyze()を呼び出すことを含む:

using Accusoft.BarcodeXpressSdk;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress();
    barcodeXpress.Licensing.SolutionName = "AcmeCorp";
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"));

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath);
    barcodeXpress.reader.BarcodeTypes =
        BarcodeType.LinearBarcode |
        BarcodeType.DataMatrixBarcode |
        BarcodeType.QRCodeBarcode;

    var results = barcodeXpress.reader.Analyze();
    return results.Select(r => r.BarcodeValue);
}
using Accusoft.BarcodeXpressSdk;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var barcodeXpress = new BarcodeXpress();
    barcodeXpress.Licensing.SolutionName = "AcmeCorp";
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234");
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"));

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath);
    barcodeXpress.reader.BarcodeTypes =
        BarcodeType.LinearBarcode |
        BarcodeType.DataMatrixBarcode |
        BarcodeType.QRCodeBarcode;

    var results = barcodeXpress.reader.Analyze();
    return results.Select(r => r.BarcodeValue);
}
Imports Accusoft.BarcodeXpressSdk

Public Function ReadAllBarcodes(imagePath As String) As IEnumerable(Of String)
    Dim barcodeXpress = New BarcodeXpress()
    barcodeXpress.Licensing.SolutionName = "AcmeCorp"
    barcodeXpress.Licensing.SolutionKey = Convert.ToInt64("12345678901234")
    barcodeXpress.Licensing.UnlockRuntime("RuntimeKey", Convert.ToInt64("98765432109876"))

    barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, imagePath)
    barcodeXpress.reader.BarcodeTypes = BarcodeType.LinearBarcode Or BarcodeType.DataMatrixBarcode Or BarcodeType.QRCodeBarcode

    Dim results = barcodeXpress.reader.Analyze()
    Return results.Select(Function(r) r.BarcodeValue)
End Function
$vbLabelText   $csharpLabel

定数@--CODE-37904--@は、処理するファイルを指定するAPIの方法です。 定数識別子と値を一般的なSetPropertyValue@メソッドに渡すというこのパターンは、古いCOMベースのAPIを彷彿とさせます。もしドキュメントがBarcodeTypesにリストされていないフォーマットを含んでいる場合、それは見つかりません。 文書のソースが変更されると、これはメンテナンス上の負担となる。

IronBarcodeのアプローチ

using IronBarCode;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value);
}
using IronBarCode;

public IEnumerable<string> ReadAllBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value);
}
Imports IronBarCode

Public Function ReadAllBarcodes(imagePath As String) As IEnumerable(Of String)
    Dim results = BarcodeReader.Read(imagePath)
    Return results.Select(Function(r) r.Value)
End Function
$vbLabelText   $csharpLabel

IronBarcodeは、サポートされているすべてのシンボル体系においてフォーマットを自動的に検出します。 画像にCode 128、QRコード、およびDataMatrixが含まれている場合、設定変更なしで、これら3つすべてが結果コレクションに返されます。 読み取り動作をより詳細に制御するために、 BarcodeReaderOptionsクラスでは、速度、スレッド数、およびマルチバーコードの設定が公開されています。

ネイティブPDFの閲覧も同じ方法で可能です。

using IronBarCode;

//ネイティブPDF support — no separate library needed
var results = BarcodeReader.Read("invoice-batch.pdf");

foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber}: [{result.Format}] {result.Value}");
}
using IronBarCode;

//ネイティブPDF support — no separate library needed
var results = BarcodeReader.Read("invoice-batch.pdf");

foreach (var result in results)
{
    Console.WriteLine($"Page {result.PageNumber}: [{result.Format}] {result.Value}");
}
Imports IronBarCode

'ネイティブPDF support — no separate library needed
Dim results = BarcodeReader.Read("invoice-batch.pdf")

For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: [{result.Format}] {result.Value}")
Next
$vbLabelText   $csharpLabel

BarcodeXpressはPDFをネイティブに読み込む機能を持っていません。 まず、別のライブラリを使用して各ページを画像としてレンダリングし、次にそれらの画像をBarcodeXpressリーダーに渡す必要があります。 これにより、依存関係が増え、変換手順が増え、選択したPDFライブラリによってはライセンス費用も追加されます。

バッチ処理とねじの安全性

大量のバーコード処理を行うと、BarcodeXpressのステートフルなインスタンスモデルとIronBarcodeのステートレスな静的APIとのアーキテクチャ上の違いが明らかになる。

BarcodeXpressのアプローチ

BarcodeXpressはインスタンスベースで、そのオブジェクトはステートフルです。 並列処理では、スレッドごとに1つのインスタンスが必要となり、各スレッドコンテキストで完全な2層ライセンス初期化が繰り返されます。

using Accusoft.BarcodeXpressSdk;
using System.Collections.Generic;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
    var results = new Dictionary<string, string>();

    foreach (var path in imagePaths)
    {
        _barcodeXpress.reader.SetPropertyValue(
            BarcodeXpress.cycBxeSetFilename, path);
        _barcodeXpress.reader.BarcodeTypes =
            BarcodeType.LinearBarcode | BarcodeType.QRCodeBarcode;

        var barcodes = _barcodeXpress.reader.Analyze();
        if (barcodes.Length > 0)
            results[path] = barcodes[0].BarcodeValue;
    }

    return results;
}
using Accusoft.BarcodeXpressSdk;
using System.Collections.Generic;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> imagePaths)
{
    var results = new Dictionary<string, string>();

    foreach (var path in imagePaths)
    {
        _barcodeXpress.reader.SetPropertyValue(
            BarcodeXpress.cycBxeSetFilename, path);
        _barcodeXpress.reader.BarcodeTypes =
            BarcodeType.LinearBarcode | BarcodeType.QRCodeBarcode;

        var barcodes = _barcodeXpress.reader.Analyze();
        if (barcodes.Length > 0)
            results[path] = barcodes[0].BarcodeValue;
    }

    return results;
}
Imports Accusoft.BarcodeXpressSdk
Imports System.Collections.Generic

Public Function ProcessBatch(imagePaths As IEnumerable(Of String)) As Dictionary(Of String, String)
    Dim results As New Dictionary(Of String, String)()

    For Each path In imagePaths
        _barcodeXpress.reader.SetPropertyValue(BarcodeXpress.cycBxeSetFilename, path)
        _barcodeXpress.reader.BarcodeTypes = BarcodeType.LinearBarcode Or BarcodeType.QRCodeBarcode

        Dim barcodes = _barcodeXpress.reader.Analyze()
        If barcodes.Length > 0 Then
            results(path) = barcodes(0).BarcodeValue
        End If
    Next

    Return results
End Function
$vbLabelText   $csharpLabel

スタンダード版では、1分間に40ページという表示速度の上限も設けられています。 10万件の文書を毎分40件の速度で処理する場合、完了までにおよそ41時間かかります。 Professional版ではこの制限は撤廃されますが、既に購入済みのランタイムライセンスに加えて、開発者一人当たりのコストが高くなります。

IronBarcodeのアプローチ

using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;

// IronBarcode — parallel batch with thread-safe static API
var files = Directory.GetFiles("/incoming/scans", "*.png");
var allResults = new ConcurrentBag<string>();

Parallel.ForEach(files, file =>
{
    var r = BarcodeReader.Read(file);
    foreach (var barcode in r)
        allResults.Add($"{file}: {barcode.Value}");
});
using IronBarCode;
using System.Collections.Concurrent;
using System.Threading.Tasks;

// IronBarcode — parallel batch with thread-safe static API
var files = Directory.GetFiles("/incoming/scans", "*.png");
var allResults = new ConcurrentBag<string>();

Parallel.ForEach(files, file =>
{
    var r = BarcodeReader.Read(file);
    foreach (var barcode in r)
        allResults.Add($"{file}: {barcode.Value}");
});
Imports IronBarCode
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

' IronBarcode — parallel batch with thread-safe static API
Dim files = Directory.GetFiles("/incoming/scans", "*.png")
Dim allResults = New ConcurrentBag(Of String)()

Parallel.ForEach(files, Sub(file)
    Dim r = BarcodeReader.Read(file)
    For Each barcode In r
        allResults.Add($"{file}: {barcode.Value}")
    Next
End Sub)
$vbLabelText   $csharpLabel

IronBarcodeの静的メソッドはステートレスであるため、インスタンス分離の必要がなく、安全です。 IronBarcodeは、どの料金プランにおいてもスループットの上限を設けていません。 読み取りパフォーマンスを調整するために、BarCodeReaderOptionsクラスは、@--CODE-37909--@および@--CODE-37910--@@の設定を提供します:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("warehouse-scan.png", options);
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("warehouse-scan.png", options);
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim results = BarcodeReader.Read("warehouse-scan.png", options)
$vbLabelText   $csharpLabel

CODE-37911はデフォルトです。 バーコードがきれいな高スループットのパイプラインにはReadingSpeed.Fasterを、損傷した画像や低コントラストの画像にはReadingSpeed.Detailedを使用してください。

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

Accusoft BarcodeXpress IronBarcode
コード-37914 静的メソッド - インスタンスは不要
コード-37915 コード-37916
コード-37917 (removed — not needed)
コード-37918 (removed — no runtime license concept)
コード-37919 (removed — license is always either valid or not)
コード-37920 コード-37921
reader.BarcodeTypesはBarcodeType.LinearBarcodeです。 ...` (removed — auto-detection handles all formats)
コード-37922 (part of BarcodeReader.Read)
コード-37924 コード-37925
コード-37926 コード-37927
コード-37928 コード-37929
コード-37930 (first argument to CreateBarcode)
コード-37932 コード-37933
40 PPM 標準制限値 どの階層でもスループット制限はありません
評価: 値は"1234...XXX"のように隠されています トライアル:フルバリュー、出力画像にのみ透かし入り

チームがAccusoft BarcodeXpressからIronBarcodeへの移行を検討する場合

40 PPMの壁を超えてスケ​​ールアップする

標準版の1分あたり40ページという制限は、一見寛大に思えるが、ビジネスチームが1年分のアーカイブされた請求書に対して、1日の終わりに一括処理を実行することを決定した場合、その制限は無視できないものとなる。 そのペースで10万件の文書を処理するには、およそ41時間かかります。 Professional版に移行すると上限はなくなりますが、既に購入済みのランタイムライセンスに加えて、開発者1人あたりのライセンス費用が高くなります。 発注書に署名した後にスループットの上限に気づいたチームは、その上限を解消するための総コストが当初の見積もりを大幅に上回ることが多いことに気づく。

CI/CDパイプラインのライセンスの複雑さ

一般的なCI/CDのセットアップでは、一時的なコンテナ内でビルドが実行されます。 BarcodeXpressでは、すべてのビルド環境において、SDKキーペアとランタイムアンロックキーの両方が必要となり、これらは別々のシークレットとして管理されます。 ランタイムキーが欠落しているか、設定が間違っている場合、ビルドは成功するかもしれませんが、統合テストでは隠蔽された値が返されます。これは、テストアサーションを実際のバーコードの内容に対して慎重に記述しないと、テストパイプラインで見落としやすいサイレントな失敗モードです。

エアギャップとセキュリティを確保した展開要件

医療記録を処理する医療システム、政府文書のワークフロー、金融機関のバックオフィス処理など、一部の環境では、発信ネットワーク通話を行う際にライセンス認証を行うことはできません。 BarcodeXpressのランタイムライセンスシステムはAccusoftのライセンスインフラストラクチャを使用しているため、ネットワーク送信制限が厳しい環境ではコンプライアンス上の懸念が生じる可能性があります。 そうした環境で活動するチームは、ライセンス認証が完全にローカルで行われるライブラリを選択することが多い。

Dockerとコンテナのデプロイ

Docker 上で BarcodeXpress を使用するには、通常、ライセンスファイルを既知のパスにコンテナ内にマウントするか、ライセンスサーバーを設定してコンテナからそのサーバーを参照するようにする必要があります。 どちらの方法も導入の複雑さを増す。ライセンスファイルを配布して同期を維持する必要があり、ライセンスサーバーは維持管理すべき追加のインフラストラクチャとなる。 マイクロサービスアーキテクチャやサーバーレスデプロイメントパターンに移行するチームは、設定ファイル方式が不変のコンテナイメージにうまく移行できないことに気づきます。

評価精度の要件

購入を決定する前に、自社の文書で読み取り精度を検証する必要があるチームにとって、BarcodeXpressの評価モードは根本的に制約が多い。 実際の文書スキャンデータを用いたテスト(ライブラリが低コントラストのバーコード、歪んだ画像、または複数のバーコードを含むページを処理できるかどうかを確認する)には、完全なデコード値が必要です。 一部が隠れた出力からは、図書館がバーコードを検出したことはわかるが、正しく読み取ったかどうかはわからない。

一般的な移行の考慮事項

インスタンス管理から静的呼び出しへ

BarcodeXpressは、操作の前にBarcodeXpress@インスタンスを作成し、ライセンスを取得する必要があります。 IronBarcodeの静的メソッドはインスタンスを必要としません。 移行するチームには、通常、BarcodeService@クラスがあり、そのコンストラクタは、大部分がライセンスの定型文になっています。

バーコードタイプの列挙削除

すべてのBarcodeXpressの読み取り操作では、どのシンボルを検索するかを列挙するために、BarcodeTypesフラグの割り当てが必要です。 IronBarcodeは、デフォルトでサポートされているすべてのフォーマットを自動的に検出します。 移行中、すべてのreader.BarcodeTypes = ...@の割り当ては置き換えることなく削除できます。 検索スペースを制限するパフォーマンス上の理由がある場合、BarcodeReaderOptionsは、必須のデフォルトではなく、明示的なオプトインとしてフォーマットフィルタリングをサポートします。

結果プロパティ名の変更

2つのプロパティ名の変更は、すべての結果処理コードに影響します:CODE-37939--@@は@@--CODE-37940--@となり、@@--CODE-37941--@は@@--CODE-37942--@となります。 ソリューション全体を対象とした検索置換機能を使えば、両方とも処理できます。 IronBarcodeの結果には、result.Confidenceresult.PageNumberも公開されており、BarcodeXpressと同等のものはなく、既存の結果処理にコードを変更することなく、追加のフィルタリングに使用することができます。

Dockerライセンス構成

BarcodeXpressのDockerデプロイメントでは通常、マウントされたライセンス設定ファイルを使用します。IronBarcodeは環境変数を使用します。 この移行では、設定ファイルのCOPY命令を削除し、環境変数の割り当てを1つ追加します。 Kubernetesでは、ライセンスキーはマウントされたボリュームではなく、Pod仕様内の秘密参照として扱われます。

IronBarcodeの追加機能

本比較で取り上げた主要機能以外にも、 IronBarcodeはBarcodeXpressにはない機能を提供しています。

  • ロゴ入りQRコード:@--CODE-37946--@QRコードにブランドイメージをネイティブで埋め込み、スキャンの信頼性を維持するためにエラー訂正レベルを設定できます。
  • PDFへのバーコード印字別途PDFライブラリを用意することなく、既存のPDF文書に直接バーコードを書き込みます。 -バッチエクスポート PDFドキュメント全体を1回の呼び出しで処理し、ページ番号、フォーマット、値、信頼度スコアを含むページごとの結果を取得します。

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

IronBarcodeは、.NET フレームワーク4.6.2以降、 .NET Core 3.1、および.NET 5、6、7、8、9をサポートしています。対応プラットフォームは、Windows x64およびx86、Linux x64、macOS x64およびARMです。 BarcodeXpress for .NET Coreは、従来の.NET Framework版とは別のSDKです。アプリケーションの対象フレームワークをアップグレードするチームは、この点を考慮する必要があります。 IronBarcodeの単一パッケージは、サポートされているすべてのランタイムを網羅しています。 定期的なアップデートにより、2026年後半にリリース予定の.NET 10、および今後リリースされる.NETバージョンとの互換性が確保されます。

結論

BarcodeXpressとIronBarcodeは、商用.NETバーコードライブラリにおける2つの異なる設計思想を体現している。 BarcodeXpressは、SDKへのアクセスと本番環境への展開を、それぞれ独立したライセンス製品として扱い、請求、キーシステム、最低購入金額も別々に設定しています。 IronBarcodeは、ライブラリを開発環境から本番環境まであらゆる環境をカバーする単一のキーを持つ単一の製品として扱います。

BarcodeXpressは、既にAccusoft製品エコシステムに組み込まれているチームにとって妥当な選択肢です。PrizmDocやImageGearを使用している組織は、BarcodeXpressのAPIが馴染みやすく、Accusoftアカウントとの連携によってサポートを統合できるため、便利だと感じるでしょう。 これらのチームにとって、2つのキーによるライセンスシステムは、新たな摩擦ではなく、確立された運用パターンである。 SDKはまた、ドキュメントソースが十分に管理され、フォーマット要件が安定している環境に適しており、マニュアル@--CODE-37947--@@仕様が継続的なメンテナンスではなく、1回限りの構成として受け入れられます。

IronBarcodeは、ライセンス管理の複雑さが運用コストに直接影響する、コンテナ、CI/CDパイプライン、クラウド環境へのデプロイを行うチームに最適です。 自動検出モデル、静的API、およびネイティブPDFサポートにより、統合コードの範囲が縮小され、シングルキーライセンスモデルにより、開発、テスト、および本番環境全体でのシークレット管理が簡素化されます。 購入前に読み取り精度を評価する必要があるチームにとって、完全なトライアル出力(読み取り結果ではなく、生成された画像に透かしが入る)は、購入前の真のベンチマークを可能にします。

価格差はどの価格帯においても顕著である。 個人開発者レベルでは、BarcodeXpress SDKと最低限のランタイムライセンスとIronBarcodeのLiteティアとの間には大きな差がある。 コスト差よりもAccusoftエコシステムとの統合を重視するチームにとって、BarcodeXpressは依然として有力な選択肢です。一方、バーコードライブラリを個々のメリットに基づいて評価するチームにとっては、評価モードの制限、2キーライセンス、スループットの上限といった点を考慮すると、 IronBarcodeの方がより分かりやすい選択肢となります。

よくある質問

Accusoft BarcodeXpressとは何ですか?

Accusoft BarCodeXpressは、C#アプリケーションでバーコードを生成して読み取るための.NETバーコードライブラリです。これは、開発者が.NETプロジェクト用のバーコードソリューションを選択する際に評価するいくつかの選択肢の1つです。

Accusoft BarcodeXpressとIronBarcodeの主な違いは何ですか?

IronBarcodeはインスタンス管理を必要としない静的なステートレスAPIを使用していますが、Accusoft BarcodeXpressは通常、使用前にインスタンスの作成と設定が必要です。IronBarcodeはまた、ネイティブPDFサポート、自動フォーマット検出、およびすべての環境でのシングルキーライセンスを提供します。

IronBarcodeはAccusoft BarcodeXpressよりライセンスが簡単ですか?

IronBarcodeは単一のライセンスキーで開発環境と本番環境の両方をカバーします。これは、SDKキーとランタイムキーを分離するライセンスシステムと比較して、CI/CDパイプラインとDocker構成を簡素化します。

IronBarcode はAccusoft BarcodeXpressがサポートしているすべてのバーコードフォーマットをサポートしていますか?

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 は Accusoft BarcodeXpress と比較してバッチ処理をどのように処理しますか?

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インストーラーやランタイムファイルは必要ありません。

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

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

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

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

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

Accusoft BarcodeXpressから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時間オンラインで対応しています。
チャット
メール
電話してね