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

Migrating from Barcoder to IronBarcode

BarcoderからIronBarcodeへの移行

このガイドでは、 .NET開発者向けにBarcoderからIronBarcodeへの移行手順全体を解説します。 移行によって、2つのパッケージが1つに統合され、エンコーダーレンダラーパイプラインが単一のメソッド呼び出しに置き換えられ、すべての形式固有の名前空間インポート — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — が単一のusing IronBarCode;に折りたたまれます。 ImageRendererOptions型が完全に削除されました。 読み取りが欠けている機能であり、Barcoderと共に二次的なライブラリを追加する原因となっていた場合、IronBarcodeはBarcodeReader.Read()でネイティブに読み取りをカバーします。

Barcoderから移行する理由

Barcoderから移行するチームは、以下の要因を報告しています。

補足事項: Barcoderは生成専用ライブラリであり、デコード機能はありません。 アプリケーションが受信したバーコードを検証したり、スキャンしたドキュメントを処理したり、アップロードされたPDFからバーコードを読み取ったりする必要がある場合、Barcoderにはそれを実行する手段がありません。 読み取り用に2つ目のライブラリを追加すると、コードベースが分割され、 NuGetの依存関係が2つになり、維持管理すべきAPIが2つになり、追跡すべきバージョン履歴が2つになります。 IronBarcodeは、生成と読み取りの両方を同じパッケージで処理します。

.NET Frameworkの互換性が破壊されました: Barcoder.Renderer.Imageは.NET Frameworkサポートを削除しました。 .NET Framework 4.x 上でサービスまたはデスクトップアプリケーションを実行しているチームが、定期的な依存関係のメンテナンス中にイメージレンダラーパッケージを更新すると、ビルドエラーが発生します。 IronBarcodeは、異なるターゲット向けに条件付きパッケージングを行うことなく、 .NET Framework 4.6.2から.NET 9までをサポートしています。

パッケージバージョンのドリフト: Barcoder.Renderer.Imageは独立してバージョニングされるNuGetパッケージです。 依存関係の更新時に、一方だけを更新すると、互換性の問題が発生する可能性があります。 複数のプロジェクトを含むリポジトリでは、各レンダラーのバージョンをすべてのプロジェクトで一貫して使用できるようにすることは、チーム規模が大きくなるにつれて増大する調整上の負担となる。

複数のフォーマットが追加される: Code128 から始まり、後で QR、次に DataMatrix を追加するプロジェクトでは、新しい名前空間のインポートを追加し、各フォーマットごとに異なるメソッド パラメータを持つ別のエンコーダ クラスを学習する必要があります。 IronBarcodeはBarcodeEncoding列挙型を使用します — 形式を追加することは、既存の呼び出しに対する一語の変更です。 新しい名前空間も、新しいクラスも、異なるメソッドシグネチャもありません。

MAUIおよびクラウドデプロイメントの要件: Barcoderは、MAUI、Docker、AWS Lambda、またはAzureデプロイメントのサポートについてはドキュメント化していません。 クロスプラットフォームのモバイルアプリケーションやサーバーレスのバーコード処理パイプラインを構築するチームは、Barcoderのドキュメントに記載されているターゲットがこれらのシナリオを網羅していないことに気づきます。

基本的な問題

Barcoderは、フォーマット選択を名前空間のインポートと連動させ、すべての出力操作に対してレンダリングパイプラインを強制的に実行します。 フォーマットや出力タイプを変更するには、コードの構造的な変更が必要です。

// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcode、同じ操作を単一のチェーン呼び出しとして表現できます。

// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

IronBarcodeとBarcoder:機能比較

フィーチャー バーコード IronBarcode
必要なNuGetパッケージ 最小2つ(バーコーダー + バーコーダー.レンダラー.イメージ) 1 (IronBarcode)
バーコード生成 はい はい
バーコードの読み取り/デコード なし はい
フォーマットごとのエンコーダークラス はい — Code128Encoder, QrEncoder, DataMatrixEncoderなど いいえ — BarcodeEncoding列挙型
フォーマットごとの名前空間インポート はい — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrix いいえ — using IronBarCodeのみ
結果オブジェクトの出力メソッド いいえ — IBarcodeには保存メソッドがありません はい — SaveAsPng, ToPngBinaryData, ToStreamがあります
PDFを読む なし はい — BarcodeReader.Read(path)
ロゴ入りQRコード なし はい — .AddBrandLogo(path)
.NET Frameworkのサポート 画像レンダラーにドロップされました .NET Framework 4.6.2以降
.NET 9 のサポート 不明瞭/活動が限定的 はい
MAUIサポート なし はい — iOS、Android、Windows、macOS
Docker/Azure/AWSラムダ 記録なし はい
ライセンス MIT(オープンソース) Commercial — Lite $999, Plus $1,499, Professional $2,999, Unlimited $5,999
読書速度制御 なし はい — ReadingSpeed列挙型
複数バーコード検出 なし はい — ExpectMultipleBarcodesオプション

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

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

プロジェクトからすべてのBarcoderパッケージを削除してください。

dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
SHELL

SVGレンダラーも追加した場合:

dotnet remove package Barcoder.Renderer.Svg
dotnet remove package Barcoder.Renderer.Svg
SHELL

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

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

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

プロジェクト内のすべてのファイルからusing Barcoder.*ステートメントをすべて削除してください。

// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
$vbLabelText   $csharpLabel

それら全てを単一のusingディレクティブに置き換えてください。

using IronBarCode;
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

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

アプリケーションの起動時にライセンス初期化を追加— Program.cs, Startup.cs, またはMauiProgram.cs

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

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

無料トライアルキーはironsoftware.comで入手できます。

コード移行の例

コード128生成

バーコード方式:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Code128Encoder, ImageRenderer, ImageRendererOptions, およびストリーム管理が完全に削除されました。 フォーマットは統合されたBarcodeEncoding.Code128として指定されます。 出力メソッドは、返されたGeneratedBarcodeオブジェクトに直接あります。 IronBarcodeのバーコード生成に関するドキュメントでは、スタイル、余白、色のカスタマイズについて説明しています。

QRコード生成

バーコード方式:

using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 4
});

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 4
});

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Qr
Imports Barcoder.Renderers

Dim barcode As IBarcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 4
})

Using stream = File.OpenWrite("qr.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

CreateQrCodeへの第2パラメータは、ピクセル単位の出力寸法です。 エラー訂正レベルはデフォルトで適切な値に設定されており、必要に応じて設定変更が可能です。 IronBarcodeは、Barcoderでは不可能な操作、つまりQRコードセンターにブランドロゴを埋め込む機能もサポートしています。

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

データマトリックス生成

バーコード方式:

using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 5
});

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 5
});

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.DataMatrix
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = DataMatrixEncoder.Encode("ITEM-XYZ-001")

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 5
})

Using stream As FileStream = File.OpenWrite("datamatrix.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("datamatrix.png")
$vbLabelText   $csharpLabel

パターンはCode128と同一ですが、BarcodeEncoding値のみが変更されます。 新しい名前空間のインポートも、異なるクラスも、異なるメソッドシグネチャもありません。

出力サイズの制御

Barcoderは、バーコードモジュールサイズのスケール乗算子としてBarHeightFor1DBarcodeを使用します — 直接的な幅/高さAPIはありません。

バーコード方式:

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports System.IO

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 3,
    .BarHeightFor1DBarcode = 80
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

.ResizeTo(width, height)は明示的なピクセル寸法を取ります。 これは、同じGeneratedBarcodeオブジェクトの他の出力メソッドと連鎖されます。

ファイルではなくバイナリデータを取得する

バーコード方式:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2
});

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2
});

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2
})

Using ms As New MemoryStream()
    renderer.Render(barcode, ms)
    Dim pngBytes As Byte() = ms.ToArray()
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports IronBarCode

Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128).ToPngBinaryData()
$vbLabelText   $csharpLabel

GeneratedBarcodeへの単一の連鎖メソッド呼び出しに置き換えられます。

バーコード読み取り(新機能)

Barcoderには読み取りAPIがありません。 以前に読書用に2つ目のライブラリを追加していた場合は、それを削除できます。 IronBarcodeは、生成に使用したのと同じパッケージを使用して、ファイル、バイト配列、ストリーム、およびPDFからデータを読み取ります。

IronBarcodeのアプローチ:

using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
Imports IronBarCode

' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Format: {result.Format}")
Next

' Read from PDF natively — no image extraction step, no extra dependency
Dim pdfResults = BarcodeReader.Read("invoice.pdf")

' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-sheet.png", options)
For Each result In multiResults
    Console.WriteLine(result.Value)
Next

' Read from a stream directly
Using fileStream = File.OpenRead("barcode.png")
    Dim streamResults = BarcodeReader.Read(fileStream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのバーコード読み取りに関するドキュメントには、複数ページのPDFファイル、関心領域の読み取り、およびパフォーマンス調整オプションについて記載されています。

SVG出力

バーコード方式:

using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
Imports Barcoder.Renderers

Dim svgRenderer = New SvgRenderer()
Using stream = File.OpenWrite("barcode.svg")
    svgRenderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcodeのアプローチ:

using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
Imports IronBarCode

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .SaveAsSvg("barcode.svg")
$vbLabelText   $csharpLabel

すべてのSVGレンダリングサイトが移行されると、Barcoder.Renderer.Svgパッケージは削除できます。

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

バーコード IronBarcode
Code128Encoder.Encode("data", false) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M) QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... }) 不要
renderer.Render(barcode, fileStream) .SaveAsPng(path)
renderer.Render(barcode, memoryStream) + ms.ToArray() .ToPngBinaryData()
IBarcode GeneratedBarcode
PixelSize = 2, BarHeightFor1DBarcode = 50 .ResizeTo(width, height)
SvgRenderer + renderer.Render(barcode, stream) .SaveAsSvg(path)
読み取りAPIはありません BarcodeReader.Read(path / stream / bytes / pdf)
2つのパッケージ — Barcoder + Barcoder.Renderer.Image 1つのパッケージ — IronBarcode
エンコーダーごとのフォーマット名前空間(Barcoder.Code128, Barcoder.Qrなど) BarcodeEncoding列挙型、単一の名前空間

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

問題1:IBarcodeには保存メソッドがない

Barcoder:IBarcode変数を格納し、後でレンダラーに渡すコードは、遅延レンダリングパターンに従います。 renderer.Render()を呼び出すすべてのヘルパーメソッドはリファクタリングが必要です。

解決策: GeneratedBarcodeに変更します。 GeneratedBarcodeオブジェクトは、それ自体の出力メソッドを持っているので、結果を保存またはシリアル化する必要があるメソッドに渡します。

// IronBarcode — GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
// IronBarcode — GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
SaveBarcodeToFile(barcode, "output.png")

Private Sub SaveBarcodeToFile(barcode As GeneratedBarcode, path As String)
    barcode.SaveAsPng(path)
End Sub
$vbLabelText   $csharpLabel

ソリューション全体でrenderer.Render(を検索すると、すべての遅延レンダリングサイトが見つかります。

問題2:PixelSizeには直接的な同等のものが存在しない

Barcoder:PixelSizeは、バーコードの自然なモジュールサイズへのスケール乗算子です。出力寸法は、コンテンツの長さ、フォーマット、および乗数の組み合わせに依存します。 BarHeightFor1DBarcodeは、1Dの高さを独立して制御します。 幅や高さに関する直接的な指定はありません。

解決策:既存のBarcoderコードが生成する実際のピクセル出力を測定し、それらの値を.ResizeTo(width, height)に渡します。

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .ResizeTo(300, 80) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

問題3:フォーマット名前空間インポートの蓄積

Barcoder:プロジェクトで使用される各バーコードフォーマットは、それを使用する各ファイルにusing Barcoder.[Format]ディレクティブを追加します。 Code128、QR、およびDataMatrixを使用するプロジェクトでは、通常、ファイルごとに3つの形式固有のインポートがあり、using Barcoder.Renderersもあります。

解決策:すべてのusing IronBarCode;に置き換えます。

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
SHELL

すべての結果は削除すべき行であり、ファイルごとに1回、単一のusing IronBarCode;ディレクティブに置き換えられます。

問題4:パッケージバージョンの同期エラー

Barcoder:Barcoder.Renderer.Imageのいずれか1つを更新後にビルドすると、タイプ解決エラーが発生する可能性があります。これは、2つのパッケージが異なるバージョンの組み合わせで互換性がない可能性があるためです。

解決策:両方のBarcoderパッケージを削除してIronBarcodeをインストールした後、1つのパッケージと1つのバージョンになります。 このカテゴリにおけるパッケージロックの競合は解消されます。 Barcoder.*参照がないことを確認してください。

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

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

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

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
SHELL

IBarcodeが変数型として格納されたり、メソッドパラメーターとして渡されたりするすべての場所を文書化してください。これらは、最も注意を要する遅延レンダリングのサイトです。 BarHeightFor1DBarcodeのすべての値を記録し、対応する出力寸法を測定します。

コード更新タスク

  1. すべてのプロジェクトからBarcoder NuGetパッケージを削除します
  2. すべてのプロジェクトからBarcoder.Renderer.Image NuGetパッケージを削除します
  3. Barcoder.Renderer.Svg NuGetパッケージが存在する場合、削除します
  4. IronBarcode NuGetパッケージをインストールします
  5. アプリケーションの起動時にIronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";を追加します
  6. すべてのusing IronBarCode;に置き換えます
  7. BarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128)で置き換えます
  8. QRCodeWriter.CreateQrCode(..., size)で置き換えます
  9. BarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix)で置き換えます
  10. すべてのnew ImageRenderer(new ImageRendererOptions {...})構築を削除します
  11. .SaveAsPng(path)に置き換えます
  12. renderer.Render(barcode, memoryStream) + .ToPngBinaryData()で置き換えます
  13. .SaveAsSvg(path)に置き換えます
  14. GeneratedBarcodeに変更します
  15. .ResizeTo(width, height)に置き換えます

移行後のテスト

生成された各バーコード形式が、標準スキャナーまたはIronBarcode独自のリーダーで正しくスキャンできることを確認してください。

  • マイグレーション前の出力寸法と視覚出力寸法を比較し、.ResizeTo()の値が同等のサイズを生成することを確認します
  • QRコードの出力をスマートフォンのスキャナーでテストし、エラー訂正レベルが適切であることを確認する。 プロジェクトでSVGを使用している場合は、ブラウザと印刷環境でSVG出力が正しくレンダリングされることを確認してください。
  • 第2の読み取りライブラリを削除した場合、BarcodeReader.Read()が同じ入力で同等のデコード値を生成することを確認してください プロジェクトで PDF 文書を処理する場合は、PDF の読み取りをテストしてください。複数ページの PDF 文書がすべてのページを正しく読み取ることを確認してください。
  • すべてのBarcoder.*参照が残っていない状態でビルドを実行し、コンパイラーエラーが発生する場合は、見逃した移行サイトを示しています

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

パッケージ依存関係の統合: 1つのNuGetパッケージで2つ(SVGレンダラーも使用していた場合は3つ)のパッケージを置き換えます。 追跡するバージョンは1つ、監視する変更履歴も1つ、そして依存関係の更新時にパッケージ間の互換性の問題は発生しません。 packages.lock.jsonの複雑さは即座に減少します。

ネイティブ読み取り機能:従来バーコード読み取りのために別のライブラリが必要だったアプリケーションは、 IronBarcodeに統合できます。 BarcodeReader.Read()は、画像ファイル、バイト配列、ストリーム、およびPDFを同一のAPIを介して受け取り、マルチバーコード検出および読み取り速度調整機能が組み込まれています。

形式選択を設定として:既存のプロジェクトに新しいバーコード形式を追加することは、既存のBarcodeEncoding列挙型の値を一語変更するだけです。 新しい名前空間のインポートも、新しいエンコーダークラスも、新しいパッケージもありません。 これにより、製品要件の変化に応じてフォーマットを拡張する際の摩擦が軽減されます。

明示的な出力寸法:PixelSize乗数システムを明示的なピクセル指定で置き換えます。 コードと出力の関係は直接的かつ予測可能であり、バーコードの内容の長さやフォーマット固有のモジュールサイズとは無関係である。

プラットフォーム対応範囲の拡大: IronBarcodeは、 .NET Framework 4.6.2から.NET 9までをサポートし、iOS、Android、Windows、macOSへのMAUIデプロイメント、およびDocker、AWS Lambda、Azure Functionsへのデプロイメントに関するドキュメントを提供しています。 プラットフォームの要件が.NET Coreを超えて拡張されるチームは、Barcoder.Renderer.Imageに影響を与えるフレームワークサポートのギャップに直面しません。

積極的なメンテナンスと将来的な互換性: IronBarcodeは、 .NETとの互換性に関するタイムラインを文書化した定期的なアップデートをリリースしています。 アクティブなリリースサイクルは、ライブラリを現在 for .NETバージョンに合わせ続け、最近のリリース活動が限定されているライブラリからは保証されません。

よくある質問

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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