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

C#でバーコードデータ形式を出力する方法 | IronBarcode

Neodynamic Barcode から IronBarcode への移行

このガイドは、Neodynamic.SDK.BarcodeReaderからIronBarcodeへの完全な移行パスを提供します。 これには、Neodynamicパッケージの削除、デュアルライセンス構成のシングルキーへの置き換え、生成および読み取りAPI呼び出しの翻訳、そしてNeodynamic製品セットでは不可能だった2Dバーコード読み取り機能の取得プロセスが含まれます。 このガイドは、既存のNeodynamicコードを所有しており、移行を完了するために体系的なファイルごとのアプローチを必要とする開発者向けに書かれています。

Neodynamic Barcodeから移行する理由

2D読み取りギャップ: ネオダイナミック バーコードProfessional SDKは、QRコード、DataMatrix、PDF417、およびAztecバーコードを生成します。 これらのフォーマットはいずれも、付属のバーコードリーダーSDKでは読み取ることができません。 製品ラベル、輸送コンテナ、または文書追跡用のQRコードを生成するプロジェクトは、生成器と同時に購入したリーダーで、生成した同じコードを読み取ることはできません。 IronBarcodeは、同じライブラリとライセンスを使用して、QRコード、DataMatrix、PDF417、Aztec、およびその他サポートされているすべての2Dフォーマットの読み取りと生成を行います。

二重製品のオーバーヘッド: ネオダイナミックSDKを使用するプロジェクトごとに、2つのusingディレクティブ、2つのライセンスブロック、2つの別々の更新サイクルがあります。 このオーバーヘッドは、すべての開発者マシン、すべてのCIパイプライン、すべての本番環境で繰り返されます。 メンテナンス要件が異なる2つのパッケージを、単一のライセンスを持つ単一の依存関係に統合することが、この移行の機械的な結果である。

サードライブラリの問題: 2D読み取りのギャップに直面し、移行ではなく回避策を選択したチームは、通常、QRコードの読み取りを具体的にカバーするために、サードライブラリ(最も一般的な選択肢はZXing .NET)を追加しました。 この決定は、一つの制約と引き換えに、別の複雑さを生み出す。それは、バーコード関連の依存関係が3つ増えることであり、それぞれに独自のバージョン制約、リリースノート、そして.NETランタイムや依存フレームワークが更新された際に発生する可能性のある競合の可能性が存在する。 IronBarcodeはこれら3つすべてを置き換えます。

価格の複雑性: ネオダイナミック バーコードProfessional SDKは開発者ごとに価格が設定されています(Basicは約$352、Ultimateは約$705、ComponentSource経由)。 Barcode Reader SDKは別途コストがかかります。生成と1D読み取りの両方が必要なプロジェクトは両方を購入しなければならず、Reader料金の上にチームサイズに応じたコストが追加されます。 2D読み取りが必要なプロジェクトは、Neodynamic製品ファミリー内でその要件を満たすことができません。 IronBarcode Liteは、1Dおよび2Dの生成と読み取りを単一のライセンスでカバーします。 現在の価格はIronBarcodeライセンスページにあります。

基本的な問題

Neodynamic SDKを両方使用して完全なバーコードワークフローを実現したコードベースにおける根本的な問題は、QRコードの読み取りがそもそも不可能だったことである。

// Before: ネオダイナミックバーコードリーダー does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
// Before: ネオダイナミックバーコードリーダー does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function ReadQrCode(imagePath As String) As String
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)

        ' Results are always null or empty for 2D barcodes
        If results Is Nothing OrElse Not results.Any() Then
            Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
        End If

        Return results.First().Value
    End Using
End Function
$vbLabelText   $csharpLabel

IronBarcodeへの移行後、同じ操作はフォーマット固有の処理のない標準的な読み取り呼び出しになります。

// After: IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
// After: IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

2Dバーコード読み取りを参照するコードベースのすべてのthrow new NotSupportedException(...)プレースホルダは、この移行中に削除され、動作する読み取り呼び出しに置き換えられます。

IronBarcodeとNeodynamic Barcode:機能比較

フィーチャー ネオダイナミック バーコードProfessional ネオダイナミックバーコードリーダー IronBarcode
コード128、EAN-13、UPC-A世代 はい 該当なし はい
QRコード、データマトリックス、PDF417生成 はい 該当なし はい
1次元バーコード読み取り 該当なし はい はい
QRコードの読み取り 該当なし いいえ はい
データマトリックスの読み取り 該当なし いいえ はい
PDF417の閲覧 該当なし いいえ はい
ネイティブPDFバーコード読み取り なし なし はい
自動フォーマット検出 該当なし なし はい
必要なNuGetパッケージ 1 1 1(両方をカバー)
ライセンスキーが必要です 1 1(別添) 1(すべてを網羅)
System.Drawing の依存関係 はい はい なし
Linux / Docker のサポート 制限的 制限的 はい
.NET 8 / .NET 9 のサポート はい 制限的 はい
非同期バッチ読み取り なし なし はい

クイックスタート:Neodynamic BarcodeからIronBarcodeへの移行

ステップ1:両方のNeodynamicパッケージを削除する

両方の荷物を取り除かなければなりません。 削除順序に影響を与える共通の依存関係はありません。

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

続行する前に、.csprojファイルから両方のエントリが削除されていることを確認してください。

ステップ2: IronBarcodeを追加する

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

ステップ3:デュアルライセンス構成の置き換え

両方のNeodynamicライセンスブロックを削除し、代わりに単一のIronBarcodeキー割り当てに置き換えてください。 この割り当ては、アプリケーションのスタートアップ時に一度行われます—Startup.cs、またはアプリケーションのコンポジションルートで:

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader

BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY"

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY"
$vbLabelText   $csharpLabel
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

' After: one key covers generation and reading across all formats
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Neodynamicのライセンスキーを保持している設定ファイル、環境変数、またはシークレットストアは、移行が検証された後に廃止できます。

コード移行の例

Code 128バーコードの生成

新力学的アプローチ:

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateCode128(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.Code128
    barcode.BarcodeUnit = BarcodeUnit.Pixel

    Dim image As System.Drawing.Image = barcode.GetBarcodeImage()
    image.Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateCode128(data As String, outputPath As String)
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

System.Drawing.Imagingインポートはもう必要ありません。 BarcodeInfoインスタンスとそのプロパティの割り当ては、単一のメソッド呼び出しに統合されます。 サイズ設定、注釈、出力フォーマットのオプションについては、 "1Dバーコードの作成ガイド"を参照してください。

QRコードの生成

新力学的アプローチ:

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.QRCode
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H

    barcode.GetBarcodeImage().Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateQrCode(string data, string outputPath)
{
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateQrCode(data As String, outputPath As String)
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

世代変換はAPIの表面のみを変更します。 今回の移行によってもたらされる決定的な違いは、同じアプリケーションが、同じIronBarcodeライブラリとライセンスを通じて、自身が生成したQRコードを読み取ることができるようになった点です。 2Dバーコードの作成に関する詳細な説明については、 "2Dバーコードの作成ガイド"を参照してください。

1次元バーコードの読み取り

新力学的アプローチ:

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function Read1DBarcodes(imagePath As String) As String()
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)
        Return If(results?.Select(Function(r) r.Value).ToArray(), Array.Empty(Of String)())
    End Using
End Function
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
Imports IronBarCode

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

System.Drawingインポートは削除されます。 IronBarcodeはファイルパスを直接受け付けます。 両方のAPIでresult.Valueプロパティ名が同じであるため、返された値を処理する下流のコードは変更されません。 複数のバーコード画像の読み取りと前処理オプションについては、 "画像からのバーコード読み取りガイド"を参照してください。

QRコードの読み取り(これまで不可能だったこと)

新力学的アプローチ:

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
' This method could not be implemented with Neodynamic Barcode Reader
Public Function ReadQrCode(imagePath As String) As String
    Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End Function
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

2Dバーコード読み取りを参照するすべてのthrow new NotSupportedException(...)プレースホルダは、標準的な読み取り呼び出しになります。 メソッド本体は、スローされる例外から、動作する実装へと変更されます。 QRコードには特別な取り扱いは必要ありません。 IronBarcodeはフォーマットを自動的に識別します。

PDF文書からのバーコード読み取り(新機能)

新力学的アプローチ:

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// なし direct equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// なし direct equivalent exists
' Neodynamic Reader cannot read barcodes from PDF files directly
' An image extraction step using a separate library was required before reading
' なし direct equivalent exists
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

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

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

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

Public Sub ReadBarcodesFromPdf(pdfPath As String)
    Dim results = BarcodeReader.Read(pdfPath)

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

IronBarcodeは、PDF文書の全ページからバーコードを直接読み取ります。 結果として、各バーコードが検出されたページ番号が返されます。 この機能には、追加のライブラリや中間的な画像抽出手順は一切必要ありません。

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

ネオダイナミックAPI IronBarcode相当品 ノート
BarcodeInfo.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" 単一のキーに統合
BarcodeInfo.LicenseKey = "..." (part of single key above) 所有者欄は別途ありません
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) 不要
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) 不要
new BarcodeInfo() BarcodeWriter.CreateBarcode(data, encoding) 静的、インスタンスなし
barcode.Value = data 最初のパラメータCreateBarcode 建設段階で合格
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 2番目のパラメータ
barcode.Symbology = Symbology.QRCode BarcodeEncoding.QRCode 往復全行程に対応
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest 異なるクラスのエントリーポイント
barcode.GetImage().Save(path, ImageFormat.Png) .SaveAsPng(path) 流暢、ImageFormat 列挙なし
BarcodeReader.Read(bitmap) BarcodeReader.Read(imagePath) ファイルパスがビットマップを置き換えます
result.Value result.Value 同じプロパティ名
Symbology.DataMatrix BarcodeEncoding.DataMatrix 世代のみ → 世代と読書
2D読み取り用throw new NotSupportedException(...) BarcodeReader.Read(imagePath) 動作する実装に置き換える

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

問題1:2つの荷物の撤去命令

問題点:開発者が一方のNeodynamicパッケージのみを削除し、もう一方を残した場合、2つのSDKは型を共有していないにもかかわらず、一部のソースファイルでは両方の名前空間が同じファイル内でインポートされている可能性があるため、コンパイルエラーが発生します。

解決策:ソースコードを変更する前に、両方のパッケージを削除してください。 両方を削除した後、すべてのusing Neodynamic.SDK.BarcodeReaderディレクティブを検索し、一緒に削除します:

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

次に、以下の方法で監査を行います。

grep -r "Neodynamic.SDK" --include="*.cs" .
grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

問題2:デュアルライセンス構成のクリーンアップ

問題:2つのNeodynamicライセンスブロックが異なる場所に表示されることが多い — 1つはアプリケーション起動クラス、もう1つはサービスイニシャライザ内。 ブロックを1つだけ削除した場合、残りのコードは既に存在しない名前空間を参照するため、コンパイルエラーが発生します。

解決策: Neodynamicライセンスのプロパティ割り当て4つすべてを検索し、 IronBarcodeキーを追加する前にそれらをまとめて削除します。

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

4行すべてを1つの代入文に置き換えてください。

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

問題3:CatchブロックからのNotSupportedExceptionの削除

問題: ネオダイナミックリーダーを使用した一部のコードベースは、2Dバーコード読み取りのサイレントフェイルに対処するためにcatch (NotSupportedException)ブロックを追加しました。 それらのcatchブロックは、例外をスローするコードとともに削除する必要があります。 そうでない場合、catch節は発生することのないコードパスを参照しています。

解決策: バーコード関連のファイルでNotSupportedExceptionを検索し、各出現を確認します。 2Dフォーマットの読み取り試行に応答して例外が発生した場合は、throwとcatchの両方を削除してください。

grep -r "NotSupportedException" --include="*.cs" .
grep -r "NotSupportedException" --include="*.cs" .
SHELL

例外を投げるメソッドの本体をBarcodeReader.Read(imagePath)に置き換え、コーラーから対応するキャッチ節を削除します。

Neodynamicバーコード移行チェックリスト

移行前

  • すべてのネオダイナミックパッケージ参照を検索:grep -r "Neodynamic.SDK" --include="*.csproj" .
  • すべてのネオダイナミック使用ディレクティブを検索:grep -r "using Neodynamic" --include="*.cs" .
  • ライセンス構成の場所を検索します: grep -r &quot;LicenseOwner\|LicenseKey&quot; --include=&quot;*.cs&quot; .
  • すべてのgrep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • すべてのネオダイナミック読み取り呼び出しを検索:grep -r "BarcodeReader.Read" --include="*.cs" .
  • バーコードパスでのすべてのgrep -r "NotSupportedException" --include="*.cs" .
  • 2D読み取りギャップを埋めるために特別に追加されたサードパーティライブラリ(ZXing .NETなど)を特定します。これは移行後に削除できます。
  • すべての Neodynamic ライセンス キーを記録し、検証後にシークレット ストアから削除できるようにします。

コード更新タスク

  1. dotnet remove package Neodynamic.SDK.Barcodeを実行
  2. dotnet remove package Neodynamic.SDK.BarcodeReaderを実行
  3. dotnet add package IronBarcodeを実行
  4. すべてのusing Neodynamic.SDK.BarcodeReaderディレクティブを削除
  5. バーコード操作を行うすべてのファイルにusing IronBarCodeを追加
  6. 両方の Neodynamic ライセンス構成ブロックを削除します。
  7. アプリケーションのスタートアップ時に一度IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"を追加
  8. new BarcodeInfo() + プロパティの割り当て + BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)に置き換え
  9. QRCodeWriter.CreateQrCode()を使用して適切に置き換える
  10. BarcodeReader.Read(imagePath)に渡すことにより置き換える
  11. 2D読み取り用のすべてのBarcodeReader.Read(imagePath)に置き換える
  12. コーラーから対応するcatch (NotSupportedException)ブロックを削除
  13. Neodynamic 2D の読み取りギャップを埋めるためだけに追加されたサードパーティライブラリをすべて削除します。

移行後のテスト

コード128バーコード生成の結果が、以前の寸法とDPI設定に一致することを確認する

  • QRコード生成がスキャン可能な出力を生成することを確認する
  • 1Dバーコード読み取りが、以前のNeodynamic Reader実装と同じ値を返すことを検証します。
  • 以前にNotSupportedExceptionを投げた画像でQRコードの読み取りが成功することを確認 アプリケーションの入力にDataMatrixおよびPDF417形式が含まれている場合、これらの形式の読み取りが成功することを確認します。 アプリケーションがPDFドキュメントを処理する場合、PDFバーコードの読み取りをテストします。
  • 設定ファイルおよび環境変数から、Neodynamicのライセンスキーに関するすべての参照が削除されていることを確認してください。 サードパーティ製の2Dライブラリ(存在する場合)が完全に削除され、残りのインポートで参照されていないことを確認してください。

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

統合された読み書き機能:移行後、 IronBarcodeが生成できるすべてのシンボルは、同じライブラリを通して読み戻すことができます。 Neodynamicのジェネレーターとリーダー間の非対称性(QRコード、DataMatrix、PDF417、Aztecは生成できるが消費できない)は解消される。 これまで2D読み取りのために回避策やサードパーティライブラリを必要としていたアプリケーションは、追加の統合作業なしにその機能を利用できるようになります。

単一ライセンス管理: 1つのNuGetパッケージ、1つのライセンスキー、および1つの構成ブロックで、2つの別々の製品サブスクリプションを置き換えることができます。 更新、キーローテーション、環境変数管理の複雑さが半分になる。 管理費の削減は、一時的な利益ではなく、継続的な効果をもたらす。

ネイティブPDFバーコード読み取り: IronBarcodeはPDF文書からバーコードを直接読み取り、バーコード値とともにページ番号のメタデータを返します。 出荷明細書、請求書、または医療記録など、バーコードが埋め込まれた書類を処理するアプリケーションでは、中間的な画像抽出ステップや、バーコード読み取りをサポートするための追加のPDFライブラリは不要になりました。 サポートされているバーコード形式の完全なリストを参照して、対応するシンボル体系と入力タイプの全セットを確認してください。

System.Drawing依存の排除: ネオダイナミックのSDKはSystem.Drawingに依存しており、LinuxおよびDockerコンテナでの追加のネイティブライブラリ設定が必要です。 IronBarcodeにはSystem.Drawingの依存がないため、同じコードベースがWindows、Linux、およびクラウド環境のコンテナ内でプラットフォーム固有の設定変更なしに実行されます。

完全な機能を実現するための簡素化されたライセンス費用: Neodynamic SDKと2D読み取り用の3つ目のライブラリの両方を必要とするプロジェクトでは、 IronBarcodeが単一のライセンスで提供する機能を実現するために、3つの依存関係に対して費用を支払っていました。 生成機能と2D読み取り機能の両方を必要とするプロジェクトの場合、この移行によって技術的なフットプリントとライセンス費用が単一の商用製品に統合されます。 最新の価格情報は、IronBarcodeのライセンスページでご確認いただけます。

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

よくある質問

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

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

NeodynamicのAPIコールをIronBarcodeに置き換えるには?

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

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

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

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

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

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

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

IronBarcode は、Neodynamic Barcode Professionalと比較して、Dockerデプロイメントをどのように簡素化しますか?

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

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

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

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

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

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

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

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