フッターコンテンツにスキップ
ビデオ

Blazorでバーコードスキャナーを使用する方法 | IronBarcode

Spire.BarcodeからIronBarcodeへの移行

Spire.BarcodeのBarCodeType引数を必要とします。 コードベースが多様なドキュメントソース、新しいサプライヤーラベル、新しいバーコードフォーマットに対応するために拡大するにつれて、この設計では型推測ループが発生し、時間の経過とともにメンテナンスコストが蓄積されます。このガイドでは、Spire.Barcode からIronBarcodeへの移行プロセス全体について、チームがこの移行を行う理由、移行を実行するための具体的な手順、および一般的な操作ごとに、移行前後のコードパターンを網羅的に解説します。

Spire.Barcodeから移行する理由

フォーマット仕様のオーバーヘッド:Spire.BarcodeでのBarCodeType列挙値が必要です。 未知のソースや混合フォーマットのソースからバーコードを処理するアプリケーションは、考えられるタイプの候補リストを保持し、一致するものが見つかるまでそのリストを繰り返し処理する必要があります。 ワークフローにフォーマットを追加するたびに、候補配列の更新、検出ロジックの再テスト、および反復順序によってあるフォーマットが別のフォーマットを覆い隠してしまうことがないかの確認が必要になります。 このオーバーヘッドは、フォーマットの多様性に比例して増加する。

無料版評価における制約事項: FreeSpire.Barcodeは、商用製品と比較して、読み取り性能を意図的に低下させ、利用可能なシンボルセットを制限しています。 FreeSpire.Barcodeの評価中に実施されたベンチマークおよびフォーマット対応テストは、商用版Spire.Barcodeの動作を表すものではありません。 無料トライアルの評価に基づいて購入を決定したチームは、購入後に、特にスループットやサポートされるシンボル体系に関して、製品が本番環境で異なる動作をすることに気づく可能性があります。

PDFファイルには2つのライブラリが必要です: Spire.BarcodeはPDFファイルから直接バーコードを読み取ることができません。 PDFを基盤とするワークフローは、独自のライセンスを持つSpire.PDFパッケージに加え、ページを繰り返し処理し、各ページから画像を抽出し、その画像をバーコードスキャナーに供給するために開発者が記述したコードが必要です。 概念的にはバーコード読み取りに属するタスクが、2つの製品、2つのライセンス契約、および重要なインフラストラクチャコードにまたがって分割されている。

戻り値の型の複雑さ:string[]を返します。 検出されたバーコード形式は返品に含まれません。 結果をフォーマットごとにルーティングする必要があるアプリケーション(たとえば、QRコードの値をあるプロセッサに送信し、Code128の値を別のプロセッサに送信する場合など)は、結果を生成した反復ステップから派生した別の型変数を維持する必要があり、スキャン自体に加えて追加の状態管理が発生します。

基本的な問題

型推測ループは、必須のBarCodeType制約の最も目立つ症状です。 Spire.Barcodeのコードベースで、複数のソースからのドキュメントを処理する場合、このパターンが繰り返し現れます。

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

IronBarcodeはループを完全に排除します。 フォーマット検出機能はライブラリに組み込まれています。

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarcode

' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")

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

IronBarcodeとSpire.Barcode:機能比較

フィーチャー Spire.Barcode IronBarcode
自動フォーマット検出 なし はい
BarCodeType パラメータは必須です。 はい なし
結果のメタデータのフォーマット なし はい
ネイティブPDFリーダー いいえ(Spire.PDFが必要です) はい
PDF用追加ライブラリ Spire.PDF(別途ライセンスが必要) None
無料プランの読書パフォーマンス 意図的に劣化させた 全速
無料プランの透かし 大型、バーコードを覆う 小さい、端のみ
無料ティアのシンボル 約20種類 50種類以上
無料プランへの登録 はい なし
生成APIモデル 設定オブジェクト + ジェネレーター 流動的な連鎖を備えた静的工場
カスタムロゴ入りのQRコード 商用プランのみ 全ティア
readからの戻り値の型 string[] BarcodeResults (型メタデータ付き)
シンボル数 39歳以上(商業用) 50歳以上
ライセンスモデル シート単位の永久ライセンス+サブスクリプション 永久契約(更新オプションあり)

クイックスタート

ステップ 1: NuGet パッケージを置き換える

現在使用中のSpireパッケージを削除してください。

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

バーコード抽出以外のドキュメント操作にSpire.PDFが使用されている場合、それを保持し、バーコード関連のコードパスのみを削除してください。

IronBarcodeをインストールしてください:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

ステップ 2: 名前空間の更新

すべてのSpire名前空間インポートをIronBarcode名前空間で置き換えます:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

ステップ 3: ライセンスの初期化

Spireライセンスの初期化処理を、アプリケーション起動時のIronBarcodeプロパティの単一割り当てに置き換えてください。キーフォーマットと展開オプションについては、IronBarcodeライセンスページを参照してください。

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key")

' Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key")

' Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

DockerおよびCI環境の場合、ライセンスキーは環境変数から指定できます。

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

コード移行の例

既知形式のバーコードの読み取り

Spire.Barcodeでの単一フォーマット読み込みは、明示的に型を渡し、string[]を受け取ります。

Spire.Barcode アプローチ:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)

If results.Length > 0 Then
    ProcessShipment(results(0))
End If
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
Imports IronBarCode

Dim results = BarcodeReader.Read("shipping-label.png")

If results.Any() Then
    ProcessShipment(results.First().Value)
End If
$vbLabelText   $csharpLabel

BarCodeTypeパラメーターは削除されます。 下流のロジックで検出されたフォーマットを確認する必要がある場合、results.First().Formatが別の状態変数を必要とせずに提供します。

混合フォーマット型ループの折りたたみ

Spire.Barcodeのコードベースが複数のフォーマットを含む可能性のあるドキュメントを処理する場合、新しいフォーマットがワークフローに加わるにつれて、タイプ推測のループが時間とともに蓄積されます。

Spire.Barcode アプローチ:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
}

Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
    Dim found As String() = scanner.Scan("document-scan.png", type)
    allValues.AddRange(found)
Next
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
Imports IronBarCode

' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
$vbLabelText   $csharpLabel

IronBarcodeの画像読み取り機能は、50種類以上のシンボル体系すべてを一度の処理で対応します。 大量のバッチ処理のために読み取り速度を調整する必要がある場合に、BarcodeReaderOptionsは、フォーマット固有の分岐を追加せずにその制御を提供します:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("document-scan.png", options)
$vbLabelText   $csharpLabel

適切なReadingSpeed値の選択についてのガイダンスは、読み取り速度オプションのドキュメンテーションを参照してください。

バーコードの生成

Spire.Barcodeの生成では、GenerateImage()を呼び出す必要があります。

Spire.Barcode アプローチ:

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("shipping-label.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

可変のBarCodeGeneratorインスタンスは、流暢なチェーンを持つ単一の静的ファクトリー呼び出しに置き換えられます。 各CreateBarcode()呼び出しが独立しているため、同時呼び出しで設定が誤って共有されるリスクはありません。

PDF文書からバーコードを読み取る

Spire.BarcodeはPDFファイルを直接読み込むことはできません。 Spireに基づくアプローチでは、ファイルを開き、ページを繰り返し処理し、各ページからラスター画像を抽出し、その画像をバーコードスキャナーに1つずつ渡すために、別のSpire.PDFパッケージを必要とします。

Spire.Barcode アプローチ:

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
Imports Spire.Pdf
Imports Spire.Barcode

Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")

Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()

For Each page As PdfPageBase In pdf.Pages
    Dim images() As Image = page.ExtractImages()
    For Each image As Image In images
        Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
        extractedValues.AddRange(found)
    Next
Next
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

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

var results = BarcodeReader.Read("invoices.pdf");

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

Dim results = BarcodeReader.Read("invoices.pdf")

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

IronBarcodeは、Spire.PDFや手動のページ管理が不要で、直接PDFドキュメントを読み取ります。 各バーコードが抽出されたページ番号は、結果オブジェクトに含まれています。 PDF読み取りコードを置換した後、プロジェクトからusing Spire.Pdf;インポートを削除できます。

Spire.Barcode API からIronBarcodeへのマッピングリファレンス

Spire.Barcode IronBarcode ノート
new BarcodeScanner() BarcodeReader.Read() (静的) スキャナーインスタンスは不要です
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path) 型パラメータが削除されました
BarCodeType.Code128 (必須) 自動検出 同等のものは不要
BarCodeType.QRCode (必須) 自動検出 同等のものは不要
string[] results from Scan() BarcodeResults コレクション .Valueを介して値にアクセスします
results[0] (文字列) results[0].Value
結果のフォーマットが不明です result.Format 結果オブジェクトに含まれる型
new BarcodeSettings() CreateBarcode()のパラメーター 設定オブジェクトは不要です
settings.Type = BarCodeType.X BarcodeEncoding.X as second param
settings.Data = "value" CreateBarcode()の最初のパラメーター
new BarCodeGenerator(settings) 不要 静的ファクトリーがそれを置き換えます
generator.GenerateImage() .SaveAsPng() / .SaveAsJpeg() フォーマット固有の出力方法
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key" 起動時に一度だけ設定
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key" 同じ単行の代替品
Spire.PDF (PDF読み取り用) 不要 ネイティブPDFサポートが組み込まれています

一般的な移行の問題と解決策

問題1:BarCodeTypeパラメータの削除

Spire.Barcode: scanner.Scan(path, BarCodeType.Code128) — メソッドシグネチャで型引数が必要です。 それを削除するとコンパイルエラーが発生します。

解決策:呼び出し全体をBarcodeReader.Read(path)に置き換えます。 コードベースでBarCodeType.を検索して、すべての発生を特定します。 型推測ループ(BarCodeType[]候補配列を繰り返し処理するforeachブロック)は完全に削除できます; 単一のBarcodeReader.Read()呼び出しでループを置き換えます。

問題2:string[]の戻り値の型

Spire.Barcode: string[]を返します。 下流のコードがこれをstring[]を期待するメソッドに渡したりすると、移行後にコンパイルエラーが発生します。

解決策:呼び出しサイトをBarcodeResultsで動作するように更新します。 単純な文字列配列を取得するには、.Select(r => r.Value).ToArray()を使用します。 最初の結果にアクセスするには、.First()?.Valueを使用します。 検出されたフォーマットが下流で必要な場合、.Formatを介して結果オブジェクトに利用可能です — 別の状態変数は必要ありません。

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
Imports System.Linq

' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
    .Select(Function(r) r.Value) _
    .ToArray()

' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.Value
$vbLabelText   $csharpLabel

第3号:Spire.PDFパッケージのクリーンアップ

Spire.Barcode: PDF読み取りワークフローは、ページアクセスと画像抽出にSpire.PDFに依存しています。 プロジェクトにはパッケージへの参照があり、PdfDocument / PdfPageBaseの使用が複数のファイルにわたって含まれています。

解決策:すべてのPDFバーコード抽出コードをSpire.Pdf参照がないことを確認します:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

すべての参照がクリアされた後にのみ、パッケージを削除してください。

dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
SHELL

第4号:名前空間の変更

Spire.Barcode: BarCodeTypeが含まれています。 BarcodeReaderOptionsが含まれています。

解決策:using IronBarCode;にグローバルに置き換えます。 生成に使用されるBarcodeEncodingに置き換えられます。 読み取りに使用されるBarCodeType列挙型には、IronBarcodeに相当するものはありません — これは単に削除されます。なぜなら、フォーマット検出は自動的に行われるからです。

Spire.Barcode移行チェックリスト

マイグレーション前のタスク

変更を加える前に、コードベースを監査してSpire.Barcodeの使用箇所をすべて特定してください。

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • BarCodeType候補配列(削除すべき型推測ループ)を含むすべてのファイルを文書化します
  • Scan()から結果を受け取り、型の更新が必要なものを特定します
  • Spire.PDFがバーコード抽出以外の操作に使用されているかどうかを確認します

コード更新タスク

  1. Spire.BarcodeNuGetパッケージを削除します
  2. バーコード抽出が唯一の用途であった場合は、Spire.PDFNuGetパッケージを削除します
  3. IronBarcodeNuGetパッケージをインストールします
  4. すべてのusing IronBarCode;に置き換えます
  5. 不要になったusing Spire.Pdf;インポートをすべて削除します
  6. ライセンス初期化を置き換えます:IronBarCode.License.LicenseKey = "key"
  7. すべてのnew BarcodeScanner()インスタンスを削除します
  8. すべてのBarcodeReader.Read(path)に置き換えます
  9. 型推測を行うforeachループを削除する。 それぞれを単一のBarcodeReader.Read()呼び出しに置き換える
  10. PDFページの反復処理と画像抽出のブロックを削除します。 BarcodeReader.Read("file.pdf")に置き換える
  11. .Select(r => r.Value).ToArray()を使用するように更新します
  12. BarcodeWriter.CreateBarcode(data, encoding)チェインに置き換えます
  13. new BarCodeGenerator(settings)インスタンスを削除します
  14. .GenerateImage() + .SaveAsJpeg()に置き換えます
  15. 生成で使用されるBarcodeEncoding.Xに置き換えます

移行後のテスト

  • 候補ループを介して以前にスキャンされたすべてのフォーマットがBarcodeReader.Read()によって正しく検出されることを確認します バッチ処理のスループットを測定し、生産要件を満たしていることを確認する。 PDFバーコード抽出で正しい値とページ番号が生成されることを確認する 生成されたバーコードの出力品質とスキャン可能性を、物理スキャナーまたはソフトウェアスキャナーで確認してください。
  • ライセンスキーがすべてのデプロイ環境(ローカル、ステージング、本番、CI/CD)に正しくロードされていることを確認してください。
  • 移行前タスクから grep 監査コマンドを実行して、Spire への参照が残っていないことを確認します。

IronBarcodeへの移行の主なメリット

フォーマット保守のオーバーヘッドの排除:移行後は、保守すべき候補タイプリストがなくなり、新しいバーコードフォーマットがワークフローに入ってきたときに更新すべきタイプ推測ループもなくなります。 BarcodeReader.Read()は完全な記号セットを自動的に処理し、検出されたフォーマットがそれぞれの結果オブジェクトに含まれているため、下流のルーティングが可能です。

契約前の正確な評価: IronBarcodeのトライアル版は、ライセンス製品と同じバイナリから実行され、完全なシンボルセットを使用してフル読み取り速度で動作します。 試用評価中に実施されたパフォーマンスベンチマークとフォーマット対応テストは、そのまま製品版に移行されます。 チームは、評価された動作が実際に導入された動作と一致しているという確信を持って、購入決定を下すことができます。

単一パッケージのPDFサポート:PDFファイルからのバーコード抽出は、画像に使用されるBarcodeReader.Read()呼び出しと同じ呼び出しで処理されます。 二次ライブラリ、追加ライセンス、手動によるページ反復コードは一切不要です。 以前Spire.PDFの両方を維持していたチームが、バーコードワークフロー全体のための単一の依存関係に削減されます。

フォーマットメタデータを持つ結果オブジェクト:BarcodeResultsコレクションの各エントリーは、デコードされた値、検出された記号体系、PDF入力のソースページ番号、およびソース画像内の境界領域を運びます。 フォーマットに基づいてルーティング、フィルタリング、またはログ記録を行う必要があるアプリケーションは、追加の状態管理を行うことなく、結果からその情報を利用できます。

簡略化された生成API:BarCodeGeneratorインスタンスを排除します。 各生成呼び出しは自己完結型であるため、同時実行される操作間での設定情報の漏洩リスクが軽減されます。

前方互換性: IronBarcodeは、 .NETランタイムのリリースに合わせて定期的にアップデートされます。 2026年まで.NET 10の採用が進むにつれて、互換性アップデートにより、移行されたコードベースは、新しい.NETバージョンごとにライブラリを変更することなく、引き続きビルドおよび実行できるようになります。

ご注意Spireはその所有者の登録商標です。 このサイトはe-iceblueと提携、承認、支援されていません。 すべての製品名、ロゴ、およびブランドは各所有者の所有物です。 比較は情報提供のみを目的としており、執筆時点で公開されている情報を反映しています。

よくある質問

なぜSpire.BarCodeからIronBarcodeに移行する必要があるのですか?

一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。

Spire.BarCodeのAPIコールをIronBarcodeに置き換えるには?

インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。

Spire.BarcodeからIronBarcodeに移行する場合、コードはどのくらい変更されますか?

ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。

移行時にSpire.BarCodeとIronBarcodeの両方をインストールしておく必要がありますか?

ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。

IronBarcodeのNuGetパッケージ名は何ですか?

パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。

Spire.Barcodeと比較して、IronBarcodeはどのようにDockerデプロイを簡素化しますか?

IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。

Spire.BarCodeから移行した後、IronBarcodeはすべてのバーコードフォーマットを自動的に検出しますか?

IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。

IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?

BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。

IronBarcodeはどのようにパラレルバーコード処理を行うのですか?

IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。

Spire.BarCodeからIronBarcodeに移行すると、どのような結果プロパティが変更されますか?

一般的なリネーム:BarcodeValueはValueに、BarcodeTypeはFormatに。IronBarcodeの結果にはConfidenceとPageNumberも追加されます。ソリューション全体の検索と置換は、既存の結果処理コードで名前の変更を処理します。

CI/CDパイプラインでIronBarcodeのライセンスを設定するには?

IRONBARCODE_LICENSE_KEYをパイプラインシークレットとして保存し、アプリケーションの起動コードにIronBarCode.License.LicenseKeyを割り当てます。1つのシークレットで、開発環境、テスト環境、ステージング環境、本番環境を含むすべての環境をカバーできます。

IronBarcodeはカスタムスタイルのQRコード生成に対応していますか?

はい。QRCodeWriter.CreateQrCode()は、ChangeBarCodeColor()によるカスタムカラー、AddBrandLogo()によるロゴ埋め込み、設定可能なエラー訂正レベル、PNG、JPG、PDF、ストリームなどの複数の出力形式をサポートしています。

Curtis Chau
テクニカルライター

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

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

アイアンサポートチーム

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