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()
// 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")
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
PDFファイルからバーコードを抽出するためにPDFコーデックが追加された場合:
dotnet remove package Leadtools.Pdf
dotnet remove package Leadtools.Pdf
Windows Server環境では、移行完了後にプロビジョニングスクリプトからMSVC++ 2017ランタイムを削除できます。 IronBarcodeは、どのプラットフォームにおいてもネイティブなランタイム依存関係を持っていません。
ステップ2: IronBarcodeをインストールする
dotnet add package IronBarcode
dotnet add package IronBarcode
この単一パッケージには、すべての画像フォーマットのサポート、ネイティブ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"
ライセンスキーは、環境変数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
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
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
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")
サイズ設定、スタイル設定、余白制御、およびサポートされている出力形式の詳細については、 "バーコード画像の作成"を参照してください。
ロゴブランディングを施した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
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")
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
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
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}}
文字列値は、他の文字列値の認証情報とともに、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) ...
問題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)
リードツール バーコード移行チェックリスト
マイグレーション前のタスク
変更を加える前に、コードベース内の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" .
コードの変更を開始する前に、初期化ブロックの数と場所、読み取り呼び出し箇所、書き込み呼び出し箇所、およびDockerfile参照箇所を文書化してください。
コード更新タスク
- リードツール NuGetパッケージ 5 つすべてを削除します (PDF コーデックが存在する場合はそれも削除します)。
dotnet add package IronBarcode経由でインストールします- すべての
using IronBarCodeに置き換えます IronBarCode.License.LicenseKey = "key"に置き換えます- すべての
RasterSupport.KernelExpiredチェックを削除します - すべての
RasterSupport.IsLocked(RasterSupportType.*)チェックを削除します - すべての
new BarcodeEngine()インスタンス化を削除します - バーコードコードパスからすべての
new RasterCodecs()インスタンス化を削除します codecs.Load(path)+BarcodeReader.Read(path)に置き換えますnew BarcodeData(...)+new RasterImage(...)+FillCommand+WriteBarcode+BarcodeWriter.CreateBarcode(...).SaveAsPng(path)に置き換えますBarcodeEncoding.</em>に置き換えます(注意:QRCodeになります)- すべてのDockerfileから
COPY LEADTOOLS.LIC行を削除します - Dockerfileおよびデプロイメント構成から
LEADTOOLS_DEVELOPER_KEY環境変数宣言を削除します - Dockerfileおよびシークレット構成に
IRONBARCODE_LICENSE環境変数を追加します - 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 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、ストリームなどの複数の出力形式をサポートしています。

