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

Migrating from LEADTOOLS Barcode to IronBarcode

リードツール BarcodeからIronBarcodeへの移行

このガイドでは、 .NET開発者向けにLEADTOOLS BarcodeからIronBarcodeへの完全な移行手順を解説します。 これはLEADTOOLS NuGetパッケージの削除と1つのネイティブ実行時依存関係、ファイルベースのLEADTOOLSライセンス初期化シーケンスを文字列キーで置き換え、LEADTOOLSの読み書きパターンをIronBarcodeの静的フルエントAPIに翻訳することについて説明します。 主要な移行シナリオごとにコード例が提供されており、APIマッピングテーブル、構造化されたチェックリスト、および移行中に発生する問題に関するガイダンスも含まれています。

リードツール Barcodeから移行する理由

ファイルベースのライセンス導入: LEADTOOLSのライセンスには、アプリケーションが実行されるすべてのマシンの既知のパス上に.LICファイルが物理的に存在する必要があります。 開発者ワークステーション、CIビルドエージェント、ステージングサーバー、および本番コンテナはそれぞれ、アプリケーションの初期化前にこのファイルをプロビジョニングする必要があります。これは、環境変数、シークレットマネージャー、およびCI/CDパイプライン構成にスムーズに適合する文字列ベースのシークレットとは根本的に異なる運用モデルです。 デプロイメントトポロジーに新しい環境(新しいクラウドリージョン、新しいKubernetesノードプール、新しい開発者オンボーディングなど)が追加されるたびに、文字列ベースのライセンスでは不要なファイルプロビジョニングの手順が必要になります。

SDKのフットプリント: LEADTOOLSのバーコードインストールには、Leadtools.BarcodeNuGetパッケージが必要です。 PDFバーコード抽出はLeadtools.Pdfを追加します。 Windowsでは、MSVC++ 2017ランタイムは別のネイティブ依存関係です。 LEADTOOLSバーコードアプリケーションの公開出力は約148MBです。 バーコードの読み取りや生成のみを必要とするアプリケーションであっても、それらの機能が使用されるかどうかに関わらず、包括的なイメージングプラットフォーム(OCRインフラストラクチャ、フォーマットコーデックアーキテクチャ、ドキュメント表示機能など)のすべての機能を担うことになる。

従来のAPI設計: LEADTOOLSのバーコード操作では、作業を開始する前に、複数のオブジェクトを特定の順序で構築する必要があります。 バーコードを読み取るには、BarcodeSymbology配列が必要です。 バーコードを生成するには、RasterCodecsで保存します。 そのAPIは、当時の設計パターンを反映している。 IronBarcodeは、ファイルパスを直接受け取る静的メソッド呼び出しによって、同様の操作を実行します。

価格の透明性: LEADTOOLSの本番サーバーへの展開ライセンスは、LEADTOOLSの販売を通じて個別に見積もられ、彼らのウェブサイトには公開されていません。開発を開始する前に完全なコストの全貌を把握する必要があるチームは、LEADTOOLSが予算に適合することを確認する前に、セールスに相談する必要があります。 IronBarcodeは、開発とデプロイを一緒にカバーする永続的な一度きりのライセンスを提供し、別個の本番ライセンスは必要ありません。

基本的な問題

LEADTOOLSの初期化シーケンスには、BarcodeEngineを作成する前に20行以上と4つの検証ステップが必要です。 IronBarcodeは、シーケンス全体を単一の割り当てに置き換えます。

// LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

' LEADTOOLS: file path, expiry check, three feature lock checks, engine creation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel
// IronBarcode: one line, no file required
using IronBarCode;

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// IronBarcode: one line, no file required
using IronBarCode;

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

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

IronBarcodeとLEADTOOLS Barcode:機能比較

フィーチャー リードツールズ バーコード IronBarcode
ライセンスモデル ファイル + 開発者キー 文字列キーのみ
必要なNuGetパッケージ 5歳以上 1
ネイティブランタイムの依存関係 MSVC++ 2017(Windows) None
公開された出力サイズ 約148MB 約39MB
サポートされているシンボル体系の総数 40歳以上 50歳以上
バーコード形式を自動検出 制限的 はい
PDFバーコード抽出 別梱包が必要です 内蔵
機械学習エラー訂正 なし はい
QRコードロゴのブランディング なし はい
Dockerデプロイメント ファイルマウントが必要です 環境変数
初期化コード 20行以上 1行
APIスタイル 従来のオブジェクトグラフ 静的流暢
クロスプラットフォーム 部分的(ネイティブ依存関係) 完全版(.NET Standard)
展開ライセンスの価格 営業担当者にお問い合わせください(非公開) 永久購入に含まれる

クイックスタート:LEADTOOLSバーコードからIronBarcodeへの移行

ステップ1:LEADTOOLSパッケージを削除する

プロジェクトからすべてのLEADTOOLSパッケージを削除します。

dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
SHELL

PDFファイルからバーコードを抽出するためにPDFコーデックが追加された場合:

dotnet remove package Leadtools.Pdf
dotnet remove package Leadtools.Pdf
SHELL

Windows Server環境では、移行完了後にプロビジョニングスクリプトからMSVC++ 2017ランタイムを削除できます。 IronBarcodeは、どのプラットフォームにおいてもネイティブなランタイム依存関係を持っていません。

ステップ2: IronBarcodeをインストールする

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

この単一パッケージには、すべての画像フォーマットのサポート、ネイティブPDFバーコード抽出、機械学習エラー訂正、および50種類以上のサポートされているシンボル体系がすべて含まれています。 追加のコーデックパッケージは必要ありません。

ステップ3:ライセンスを初期化する

LEADTOOLSの初期化ブロック全体を1行で置き換えます。コードベース内のRasterSupport.SetLicenseへのすべての呼び出しを見つけます — 通常、アプリケーション開始時に正確に1つあります — そして、周囲の初期化シーケンス全体を置き換えます。

// Before: entire リードツール initialization block (20+ lines)
// After:
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Before: entire リードツール initialization block (20+ lines)
// After:
using IronBarCode;

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

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

ライセンスキーは、環境変数appsettings.json、Azure Key Vault、AWS Secrets Manager、またはKubernetesのシークレットなど、あらゆる文字列対応の設定機構から取得できます。 環境ベースのライセンス構成、Docker デプロイメントパターン、およびサポートされているすべての構成方法については、ライセンスキー設定に関するドキュメントを参照してください。

コード移行の例

画像からバーコードを読み取る

LEADTOOLSは、画像読み込みとバーコードスキャンを2つの独立したオブジェクトレイヤーに分離します。 BarcodeEngineインスタンスがそれをスキャンします。 呼び出し元もBarcodeSymbology値の明示的な配列を提供する必要があります。 配列に記載されていないフォーマットは検出されません。

LEADTOOLSのアプローチ:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");

var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.Code39,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

foreach (var barcode in barcodes)
    Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load("scan.png");

var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.Code39,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

foreach (var barcode in barcodes)
    Console.WriteLine($"{barcode.Symbology}: {barcode.Value}");
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim codecs As New RasterCodecs()
Using codecs
    Dim image = codecs.Load("scan.png")
    Using image
        Dim engine As New BarcodeEngine()

        Dim symbologies = New BarcodeSymbology() {
            BarcodeSymbology.Code128,
            BarcodeSymbology.Code39,
            BarcodeSymbology.QR,
            BarcodeSymbology.DataMatrix,
            BarcodeSymbology.EAN13,
            BarcodeSymbology.UPCA
        }

        Dim barcodes = engine.Reader.ReadBarcodes(
            image,
            LogicalRectangle.Empty,
            0,
            symbologies)

        For Each barcode In barcodes
            Console.WriteLine($"{barcode.Symbology}: {barcode.Value}")
        Next
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

var results = BarcodeReader.Read("scan.png");

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

var results = BarcodeReader.Read("scan.png");

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

Dim results = BarcodeReader.Read("scan.png")

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

IronBarcodeはファイルパスを直接受け取り、画像を内部で読み込み、50種類以上のサポートされているシンボル体系すべてにおいてフォーマットを自動検出します。呼び出し元が想定されるタイプを列挙する必要はありません。読み取り速度の調整、複数バーコードの検出、低品質画像の処理など、高度な設定については、"画像からのバーコード読み取りガイド"を参照してください。

Code 128バーコードの生成

LEADTOOLSの生成には、RasterCodecsで保存します。 IronBarcodeは、これらのすべてのステップを単一の流暢なメソッドチェーンを通じて実行します。

LEADTOOLSのアプローチ:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData()
{
    Symbology = BarcodeSymbology.Code128,
    Value = "ITEM-98765",
    Bounds = new LeadRect(0, 0, 500, 120)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData()
{
    Symbology = BarcodeSymbology.Code128,
    Value = "ITEM-98765",
    Bounds = new LeadRect(0, 0, 500, 120)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim barcodeData As New BarcodeData() With {
    .Symbology = BarcodeSymbology.Code128,
    .Value = "ITEM-98765",
    .Bounds = New LeadRect(0, 0, 500, 120)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    500, 120, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    Nothing, IntPtr.Zero, 0)

    Dim fillCommand As New FillCommand(RasterColor.White)
    fillCommand.Run(image)
    engine.Writer.WriteBarcode(image, barcodeData, Nothing)

    Using codecs As New RasterCodecs()
        codecs.Save(image, "item-barcode.png", RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
    .ResizeTo(500, 120)
    .SaveAsPng("item-barcode.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128)
    .ResizeTo(500, 120)
    .SaveAsPng("item-barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("ITEM-98765", BarcodeEncoding.Code128) _
    .ResizeTo(500, 120) _
    .SaveAsPng("item-barcode.png")
$vbLabelText   $csharpLabel

サイズ設定、スタイル設定、余白制御、およびサポートされている出力形式の詳細については、 "バーコード画像の作成"を参照してください。

ロゴブランディングを施したQRコードの生成

LEADTOOLSのQRコード生成は、他のバーコードタイプと同様のマルチステップQRCodeWriterを提供します。

LEADTOOLSのアプローチ:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var qrData = new BarcodeData()
{
    Symbology = BarcodeSymbology.QR,
    Value = "https://example.com/product/12345",
    Bounds = new LeadRect(0, 0, 400, 400)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 400, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, qrData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var qrData = new BarcodeData()
{
    Symbology = BarcodeSymbology.QR,
    Value = "https://example.com/product/12345",
    Bounds = new LeadRect(0, 0, 400, 400)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 400, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, qrData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim qrData As New BarcodeData() With {
    .Symbology = BarcodeSymbology.QR,
    .Value = "https://example.com/product/12345",
    .Bounds = New LeadRect(0, 0, 400, 400)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    400, 400, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    Nothing, IntPtr.Zero, 0)

    Dim fillCommand As New FillCommand(RasterColor.White)
    fillCommand.Run(image)
    engine.Writer.WriteBarcode(image, qrData, Nothing)

    Using codecs As New RasterCodecs()
        codecs.Save(image, "product-qr.png", RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("brand-logo.png")
    .SaveAsPng("product-qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("brand-logo.png")
    .SaveAsPng("product-qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/product/12345", 400, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("brand-logo.png") _
    .SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

PDF文書からバーコードを抽出する

LEADTOOLSのPDFバーコード抽出には、別途Leadtools.Pdfパッケージ、明示的なPDF読み込み構成、手動のページカウントクエリ、および各ページをループすることが必要です。 各ページはスキャンする前に個別にRasterImageとしてロードする必要があります。 IronBarcodeは基本パッケージにPDFサポートが含まれており、ページ反復処理を内部的に行います。

LEADTOOLSのアプローチ:

using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;

var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");

for (int page = 1; page <= pageCount; page++)
{
    using var image = codecs.Load(
        "shipment.pdf", 0,
        CodecsLoadByteOrder.BgrOrGray,
        page, page);

    var barcodes = engine.Reader.ReadBarcodes(
        image, LogicalRectangle.Empty, 0, null);

    foreach (var barcode in barcodes)
        results.Add($"Page {page}: {barcode.Value}");
}
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

// Requires: dotnet add package Leadtools.Pdf
using var codecs = new RasterCodecs();
codecs.Options.Pdf.Load.Resolution = 300;
codecs.Options.Pdf.Load.DisplayDepth = 24;

var engine = new BarcodeEngine();
var results = new List<string>();
int pageCount = codecs.GetTotalPages("shipment.pdf");

for (int page = 1; page <= pageCount; page++)
{
    using var image = codecs.Load(
        "shipment.pdf", 0,
        CodecsLoadByteOrder.BgrOrGray,
        page, page);

    var barcodes = engine.Reader.ReadBarcodes(
        image, LogicalRectangle.Empty, 0, null);

    foreach (var barcode in barcodes)
        results.Add($"Page {page}: {barcode.Value}");
}
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

' Requires: dotnet add package Leadtools.Pdf
Using codecs As New RasterCodecs()
    codecs.Options.Pdf.Load.Resolution = 300
    codecs.Options.Pdf.Load.DisplayDepth = 24

    Dim engine As New BarcodeEngine()
    Dim results As New List(Of String)()
    Dim pageCount As Integer = codecs.GetTotalPages("shipment.pdf")

    For page As Integer = 1 To pageCount
        Using image = codecs.Load("shipment.pdf", 0, CodecsLoadByteOrder.BgrOrGray, page, page)
            Dim barcodes = engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, Nothing)

            For Each barcode In barcodes
                results.Add($"Page {page}: {barcode.Value}")
            Next
        End Using
    Next
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

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

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

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

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

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

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

Dockerデプロイメント

IronBarcodeに移行すると、LEADTOOLSのDockerデプロイメントに必ず存在するファイル管理要件が完全に解消されます。

LEADTOOLSのアプローチ:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

# License file must be physically present in the container image
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC

ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

IronBarcodeのアプローチ:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

ENV IRONBARCODE_LICENSE=your-license-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

ライセンスキーは、Dockerシークレット、Kubernetesシークレット、または任意の環境変数メカニズムを介して、コンテナの実行時に注入されます。 ファイルプロビジョニングの手順は不要です。 DockerとLinuxのデプロイガイドでは、AlpineとDebianのベースイメージ、マルチステージビルド、Kubernetesのデプロイパターンについて解説しています。

LEADTOOLSバーコードAPIからIronBarcodeへのマッピングリファレンス

リードツール IronBarcode ノート
RasterSupport.SetLicense(path, key) IronBarCode.License.LicenseKey = "key" キーのみ - ファイルなし
RasterSupport.KernelExpired (removed) 有効期限の確認は不要です
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) (removed) 含まれる機能
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) (removed) 含まれる機能
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) (removed) 含まれる機能
new BarcodeEngine() 静的 - インスタンスなし BarcodeWriterは静的です
new RasterCodecs() (removed) ファイルパスを直接渡す
codecs.Load(imagePath) (removed) ファイルパスを直接渡す
engine.Reader.ReadBarcodes(image, LogicalRectangle.Empty, 0, symbologies) BarcodeReader.Read(imagePath) シンボルを自動検出します
BarcodeData.Value result.Value 同じプロパティ名
BarcodeData.Symbology result.Format 物件名が変更されました
new BarcodeData() { Symbology = BarcodeSymbology.Code128 } BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) 流暢な創作
BarcodeSymbology.Code128 BarcodeEncoding.Code128 名前空間の変更
BarcodeSymbology.QR BarcodeEncoding.QRCode 名前変更
BarcodeSymbology.DataMatrix BarcodeEncoding.DataMatrix 同名
BarcodeSymbology.PDF417 BarcodeEncoding.PDF417 同名
BarcodeSymbology.EAN13 BarcodeEncoding.EAN13 同名
BarcodeSymbology.UPCA BarcodeEncoding.UPCA 同名
BarcodeSymbology.Interleaved2of5 BarcodeEncoding.Interleaved2of5 同名
BarcodeSymbology.Codabar BarcodeEncoding.Codabar 同名
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) .SaveAsPng(path) 1つのメソッドチェーン
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) (removed) IronBarcodeの内部

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

問題1:CI/CDにおける.LICファイルの参照

LEADTOOLS: LEADTOOLSアプリケーションをビルドまたはデプロイするCI/CDパイプラインは、.LICファイルを準備する必要があります — ソース管理にチェックインするか、base64シークレットからデコードするか、ボリュームアーティファクトとしてマウントします。 アプリケーションを実行する各パイプラインステージは、そのファイルにアクセス可能である必要があります。

解決策: パイプラインからすべての.LICファイル処理を削除します。文字列シークレットに置き換えます。

# Example: GitHub Actions environment variable
env:
  IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
# Example: GitHub Actions environment variable
env:
  IRONBARCODE_LICENSE: ${{secrets.IRONBARCODE_LICENSE}}
YAML

文字列値は、他の文字列値の認証情報とともに、CI/CDシークレットストアに保存されます。 ファイルデコード、アーティファクトプロビジョニング、ボリューム構成は不要です。

問題2:WindowsにおけるMSVC++ランタイムの依存関係

LEADTOOLS: Windows Server の展開には、ホストに MSVC++ 2017 ランタイムがインストールされている必要があります。LEADTOOLS の展開に使用されるプロビジョニング スクリプト、コンテナ ベース イメージ、および Windows AMI には、通常、このランタイムをインストールする手順が含まれています。

解決策:すべてのWindowsプロビジョニングスクリプトおよびコンテナイメージから、MSVC++ 2017ランタイムのインストール手順を削除します。 IronBarcodeにはネイティブなランタイム依存関係はありません。 dotnet/aspnetベースイメージは追加のランタイムパッケージなしで十分です。

問題3:RasterSupportType機能のロックチェック

LEADTOOLS: 初期化シーケンスには、すべてのバーコード機能に対してRasterSupport.IsLocked()チェックが含まれています — BarcodeWrite。 これらのチェックは、LEADTOOLSアーキテクチャによって要求される防御コードであり、ライセンスファイルが各必須機能を網羅していることを検証するものです。

解決策: すべてのRasterSupport.IsLocked()呼び出しを削除します。 IronBarcodeは、単一のライセンスで全ての読み取りおよび書き込み機能を提供します。 機能ごとのロック状態はなく、機能検証の手順も不要です。

// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
// Remove these lines entirely:
// if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead)) ...
// if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite)) ...
' Remove these lines entirely:
' If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) ...
' If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) ...
$vbLabelText   $csharpLabel

問題4:バーコードシンボル配列の削除

LEADTOOLS: BarcodeSymbology[]パラメータが必要です。 配列に記載されていないシンボル体系を持つバーコードは検出されないため、入力文書に新しいタイプのバーコードが導入された場合、読み取り漏れが発生する可能性がある。

解決策:シンボル配列を削除します。 BarcodeReader.Read()はサポートされているすべてのフォーマットを自動検出します。 既知のフォーマットセットに対してパフォーマンスチューニングが必要な場合、BarcodeReaderOptionsは完全な列挙を要求せずにオプションのヒントを提供します。

// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
// Optional: hint the reader for performance in format-known scenarios
var options = new BarcodeReaderOptions
{
    ExpectBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.QRCode
};
var results = BarcodeReader.Read("scan.png", options);
Imports System

' Optional: hint the reader for performance in format-known scenarios
Dim options As New BarcodeReaderOptions With {
    .ExpectBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.QRCode
}
Dim results = BarcodeReader.Read("scan.png", options)
$vbLabelText   $csharpLabel

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

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

変更を加える前に、コードベース内のLEADTOOLSの使用状況をすべて監査してください。

grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
grep -r "using Leadtools" --include="*.cs" .
grep -r "RasterSupport\|BarcodeEngine\|RasterCodecs" --include="*.cs" .
grep -r "BarcodeSymbology\|BarcodeData\|RasterImage" --include="*.cs" .
grep -r "LEADTOOLS.LIC\|SetLicense\|KernelExpired" --include="*.cs" .
grep -r "COPY LEADTOOLS.LIC\|LEADTOOLS_LICENSE_PATH" --include="*.dockerfile" --include="Dockerfile" .
SHELL

コードの変更を開始する前に、初期化ブロックの数と場所、読み取り呼び出し箇所、書き込み呼び出し箇所、およびDockerfile参照箇所を文書化してください。

コード更新タスク

  1. リードツール NuGetパッケージ 5 つすべてを削除します (PDF コーデックが存在する場合はそれも削除します)。
  2. dotnet add package IronBarcode経由でインストールします
  3. すべてのusing IronBarCodeに置き換えます
  4. IronBarCode.License.LicenseKey = "key"に置き換えます
  5. すべてのRasterSupport.KernelExpiredチェックを削除します
  6. すべてのRasterSupport.IsLocked(RasterSupportType.*)チェックを削除します
  7. すべてのnew BarcodeEngine()インスタンス化を削除します
  8. バーコードコードパスからすべてのnew RasterCodecs()インスタンス化を削除します
  9. codecs.Load(path) + BarcodeReader.Read(path)に置き換えます
  10. new BarcodeData(...) + new RasterImage(...) + FillCommand + WriteBarcode + BarcodeWriter.CreateBarcode(...).SaveAsPng(path)に置き換えます
  11. BarcodeEncoding.</em>に置き換えます(注意: QRCodeになります)
  12. すべてのDockerfileからCOPY LEADTOOLS.LIC行を削除します
  13. Dockerfileおよびデプロイメント構成からLEADTOOLS_DEVELOPER_KEY環境変数宣言を削除します
  14. Dockerfileおよびシークレット構成にIRONBARCODE_LICENSE環境変数を追加します
  15. WindowsプロビジョニングスクリプトからMSVC++ 2017ランタイムのインストールを削除する

移行後のテスト

  • 過去にBarcodeSymbology[]配列でカバーされていたすべての記号タイプでのバーコード読み取り操作が期待される値を返すことを確認します
  • Code 128、QRコード、およびその他の生成されたバーコードタイプが有効でスキャン可能な出力を生成することを確認します。
  • Leadtools.PdfなしでPDFバーコード抽出が正しく機能することを確認します
  • いかなる.LICファイルをマウントせずにコンテナイメージをビルドおよび起動し、アプリケーションが正しく初期化されることを確認します
  • .LICファイル準備ステップなしでCI/CDパイプラインを実行し、すべてのステージが正常に完了することを確認します 公開された出力サイズとコンテナイメージのプル時間が改善されたことを確認します。

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

簡素化されたデプロイメントアーキテクチャ:移行後、開発環境、CI環境、ステージング環境、本番環境など、すべての環境は、APIキー、データベースパスワード、その他の認証情報に使用されるのと同じ文字列値のシークレットメカニズムを通じてライセンスを受け取ります。 ファイルプロビジョニング、アーティファクト処理、ボリュームマウントは一切不要です。 新しいデプロイメント環境を追加する操作は、他のシークレットを追加する操作と同じです。

依存関係の削減: 1つのNuGetパッケージが5つのパッケージに置き換えられ、MSVC++ 2017ランタイムの要件が不要になります。 バーコードサービスの公開出力サイズは、約148MBから約39MBに減少します。 イメージサイズが小さくなれば、コンテナのプルが高速化され、コンテナレジストリのストレージコストが削減され、サーバーレス環境やオートスケーリング環境におけるコールドスタート時間が短縮されます。

アプリケーションの起動処理が効率化: LEADTOOLSの20行に及ぶ初期化シーケンス(ファイルパスの解決、有効期限の検証、機能ごとの3つのロックチェック)が、わずか1行に置き換えられました。これにより、アプリケーションの起動が高速化され、初期化コードパスには新しい環境で失敗する可能性のあるファイルシステムへの依存関係がなくなりました。

包括的なフォーマット検出: IronBarcodeは、呼び出し元が想定されるフォーマットを指定する必要なく、サポートされている50種類以上のシンボル体系すべてを読み取ります。 LEADTOOLSBarcodeSymbology[]配列から記号を省略することによって引き起こされる静かな読み取り漏れのリスクは排除されます。 IronBarcodeは、入力文書に新しいバーコードタイプが現れた場合、コードの変更を必要とせずにそれを検出します。

予測可能な総コスト: 1回の永久ライセンス購入で、開発、テスト、無制限の運用環境への展開がカバーされ、展開状況の追跡、年間更新の必要、別途運用ライセンスを取得する必要もありません。 チームは、営業担当者とのやり取りなしに、開発開始前にライブラリの総費用を確認できます。

モダンAPI設計: BarcodeWriter.CreateBarcode()は、ファイルパスを直接受け入れる静的エントリポイントです。 LEADTOOLSの読み書きに必要な、コーデックインスタンス、エンジンインスタンス、画像割り当て、背景塗りつぶしといった多層オブジェクト構造は、内部的に処理されます。 バーコードの読み取りと生成を行うコードは、より短く、レビューしやすく、テストしやすい。

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

よくある質問

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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