C#でバーコードの向きを修正する方法 | IronBarcode
Telerik RadBarcodeからIronBarcodeへの移行
このガイドは、Telerik RadBarcodeからIronBarcodeへの完全な移行パスを提供し、.NET開発者がRadBarcodeReaderの限界に達した場合の内容です。 本書では、パッケージの置き換え、名前空間の更新、ライセンスの初期化、コードレベルの移行例、APIマッピングのリファレンス、および移行が完了したことを確認するためのチェックリストについて解説しています。 これらの事例は、Telerikバーコード移行時に最もよく発生するシナリオ、すなわちXAMLコントロールの置換、読み取りフォーマットの拡張、サーバーサイドでの展開、およびPDF処理に焦点を当てています。
Telerik RadBarcodeから移行する理由
Telerik RadBarcodeの移行は、既存のコンポーネントでは満たせない具体的な技術要件によって引き起こされます。 以下に挙げる理由は、この移行を完了した、または現在評価中のチームから最も多く報告された状況を表しています。
2D読み取り境界: WPFのDecodeType列挙子で制限されています。 その列挙型には、1次元線形フォーマット(Code128、Code39、EAN13、EAN8、UPCA、UPCE、Codabar、ITF)のエントリのみが含まれており、それ以外のものは含まれていません。 QRコード、DataMatrix、PDF417、Aztecに関するエントリは存在しません。 新しい要件が入り込むQRコードの処理やスキャンした文書からのDataMatrixラベルの読み取りを求められた場合、Telerik製品ファミリー内ではDecodeType制約が回避不可能なハードブロッカーとなります。
プラットフォームコードの断片化: Telerikでの読み取りにはUIフレームワークの依存が必要です: System.Drawing.Image)を使用します。 これらの型は、共有.NETライブラリ、コンソール アプリケーション、 ASP.NET Coreプロジェクト、またはBlazorサーバーでは参照できません。 バーコード読み取りロジックを共有サービスレイヤーに集中させたいチームは、Telerik の型ではそれができません。リーダーの実装は、それぞれの UI フレームワークに恒久的に結び付けられているからです。
PDF処理のギャップ:多くのバーコードワークフローは、画像ファイルではなく文書ファイルに対して動作します。 Telerik RadBarcodeReaderはビットマップ画像のみを受け付けます。 PDFページに埋め込まれたバーコードを読み取るには、別のライブラリを使用してページを画像に変換し、その画像をTelerikリーダーに渡す必要があります。これは依存関係を追加するだけでなく、得られる結果も1次元のものに限られます。 主にPDF形式の文書を扱うチームにとって、この回避策はワークフローのあらゆる段階で摩擦を生じさせる。
サブスクリプションライセンス: Telerikのバーコード機能は、単体パッケージとしては販売されていません。 プラットフォーム固有のUIスイートサブスクリプションと一緒にRadBarcodeReaderへのアクセスがバンドルされています — プラットフォームごとのTelerik UIサブスクリプションは1開発者年間$749 (Liteティア) から始まり、Telerikの公開2026年価格による全プラットフォーム合計でのDevCraft UIは1開発者年間$1,149です。 主な要件がバーコード機能であり、他のTelerik UIコントロールを使用しないチームは、購入総額のごく一部を占めるコンポーネントのために、Suite全体のコストを負担することになります。
基本的な問題
Telerikの読み取り制限を最も明確に示しているのは、フォーマットを生成するコンポーネントが、そのフォーマットをリーダーを通して往復させることができないという点です。
// Telerik — generates a QR code, then cannot read it back
var qrBarcode = new RadBarcode();
qrBarcode.Value = "https://example.com/order/4821";
qrBarcode.Symbology = new QRCode { ErrorCorrectionLevel = ErrorCorrectionLevel.H };
// Save to file...
// Attempt to read the same QR code:
var reader = new RadBarcodeReader();
// DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = new BitmapImage(new Uri("qr-output.png", UriKind.Absolute));
var result = reader.Decode(bitmap);
// result == null — always, for any QR code image
// Telerik — generates a QR code, then cannot read it back
var qrBarcode = new RadBarcode();
qrBarcode.Value = "https://example.com/order/4821";
qrBarcode.Symbology = new QRCode { ErrorCorrectionLevel = ErrorCorrectionLevel.H };
// Save to file...
// Attempt to read the same QR code:
var reader = new RadBarcodeReader();
// DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = new BitmapImage(new Uri("qr-output.png", UriKind.Absolute));
var result = reader.Decode(bitmap);
// result == null — always, for any QR code image
' Telerik — generates a QR code, then cannot read it back
Dim qrBarcode As New RadBarcode()
qrBarcode.Value = "https://example.com/order/4821"
qrBarcode.Symbology = New QRCode With {.ErrorCorrectionLevel = ErrorCorrectionLevel.H}
' Save to file...
' Attempt to read the same QR code:
Dim reader As New RadBarcodeReader()
' DecodeType.QR does not exist — QR cannot be added to this list
reader.DecodeTypes = New DecodeType() {DecodeType.Code128, DecodeType.EAN13}
Dim bitmap As New BitmapImage(New Uri("qr-output.png", UriKind.Absolute))
Dim result = reader.Decode(bitmap)
' result == null — always, for any QR code image
IronBarcodeはこのギャップを埋めます。生成と読み取りに同じパッケージを使用し、読み取りエンジンはQRコード、DataMatrix、PDF417、およびその他のすべてのフォーマットを自動的に検出します。
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode)
.SaveAsPng("qr-output.png");
// Read that same QR code back — no format specification needed
var results = BarcodeReader.Read("qr-output.png");
Console.WriteLine(results.First().Value);
// Output: https://example.com/order/4821
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode)
.SaveAsPng("qr-output.png");
// Read that same QR code back — no format specification needed
var results = BarcodeReader.Read("qr-output.png");
Console.WriteLine(results.First().Value);
// Output: https://example.com/order/4821
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate a QR code
BarcodeWriter.CreateBarcode("https://example.com/order/4821", BarcodeEncoding.QRCode) _
.SaveAsPng("qr-output.png")
' Read that same QR code back — no format specification needed
Dim results = BarcodeReader.Read("qr-output.png")
Console.WriteLine(results.First().Value)
' Output: https://example.com/order/4821
IronBarcodeとTelerik RadBarcode:機能比較
| フィーチャー | Telerik RadBarcode | IronBarcode |
|---|---|---|
| 1次元バーコード生成 | はい(全プラットフォーム対応) | はい |
| 2次元バーコード生成 | はい(全プラットフォーム対応) | はい |
| 1次元バーコード読み取り | WPF + WinFormsのみ | はい(全プラットフォーム対応) |
| QRコードの読み取り | WPF のみ | はい(全プラットフォーム対応) |
| データマトリックスの読み取り | WPF のみ | はい(全プラットフォーム対応) |
| PDF417の閲覧 | WPF のみ | はい(全プラットフォーム対応) |
| アステカ文字の読み方 | 不可 | はい |
| PDFファイルの閲覧 | 不可 | はい(ネイティブ) |
| 自動フォーマット検出 | いいえ — DecodeType は必須です | はい |
| ASP.NET Core の読み物 | 不可 | はい |
| Blazorの読書 | 不可 | はい |
| Docker / Linux の読み取り | 不可 | はい |
| 共有サービスライブラリ | 不可能(プラットフォームの種類) | はい |
| 静的読み取りAPI | いいえ(インスタンスが必要です) | はい |
| スタンドアロンNuGetパッケージ | いいえ、UISuiteは不要です。 | はい |
| 永久ライセンス | サブスクリプションと並んで永続階層も利用可能 | はい — $749 (ライト階層) から |
クイックスタート
ステップ 1: NuGet パッケージを置き換える
プロジェクト内のプラットフォームに対応するTelerik UIパッケージを削除してください。
# WPF
dotnet remove package Telerik.UI.for.Wpf.60.Xaml
# WinForms
dotnet remove package Telerik.UI.for.WinForms.Common
dotnet remove package Telerik.UI.for.WinForms.Barcode
# Blazor
dotnet remove package Telerik.UI.for.Blazor
# WPF
dotnet remove package Telerik.UI.for.Wpf.60.Xaml
# WinForms
dotnet remove package Telerik.UI.for.WinForms.Common
dotnet remove package Telerik.UI.for.WinForms.Barcode
# Blazor
dotnet remove package Telerik.UI.for.Blazor
プロジェクトで同じパッケージに含まれる他のTelerikコントロールも使用している場合は、パッケージをそのままにして手順2に進んでください。共有パッケージを削除せずに、バーコード固有のAPI呼び出しのみを削除します。
IronBarcodeをインストールしてください:
dotnet add package IronBarcode
dotnet add package IronBarcode
1つのパッケージで、WPF、WinForms、 ASP.NET Core、 Blazor Server、コンソールアプリケーション、Docker、Azure Functions、AWS Lambdaをカバーできます。 プラットフォーム互換性の詳細情報には、サポートされている正確な.NETバージョンとオペレーティングシステムターゲットが記載されています。
ステップ 2: 名前空間の更新
Telerikバーコード名前空間のインポートを削除し、 IronBarcode名前空間に置き換えてください。
// Remove these namespace imports:
// using Telerik.Windows.Controls.Barcode; // WPF reader and generator
// using Telerik.Windows.Controls; // WPF general
// using Telerik.WinControls.UI; // WinForms
// using Telerik.WinControls.UI.Barcode; // WinForms barcode reader
// Add this:
using IronBarCode;
// Remove these namespace imports:
// using Telerik.Windows.Controls.Barcode; // WPF reader and generator
// using Telerik.Windows.Controls; // WPF general
// using Telerik.WinControls.UI; // WinForms
// using Telerik.WinControls.UI.Barcode; // WinForms barcode reader
// Add this:
using IronBarCode;
Imports IronBarCode
ステップ 3: ライセンスの初期化
アプリケーション起動時に、Telerikライセンスの初期化処理をIronBarcodeキーの割り当て処理に置き換えてください。
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("key");
// Add at application startup (Program.cs, App.xaml.cs, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("key");
// Add at application startup (Program.cs, App.xaml.cs, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove:
' Telerik.WinControls.TelerikLicenseManager.InstallLicense("key")
' Add at application startup (Program.vb, App.xaml.vb, or composition root):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
鍵の割り当ては、アプリケーションのエントリポイントで一度だけ行われます。 ライセンスファイルをデプロイする必要はなく、プラットフォームごとの初期化パスもなく、WPFとASP.NET Coreで個別の構成もありません。
コード移行の例
バーコードの生成:XAMLコントロールからコードベースAPIへの変換
TelerikのWPFでの生成は宣言型で — RadBarcode XAML要素がUIツリー直にレンダリングされます。 IronBarcodeはコードでバーコードを生成し、ファイルとして保存したりWPF表示用にGeneratedBarcodeオブジェクトを返します。
Telerikのアプローチ:
<Window xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<telerik:RadBarcode Value="PROD-2026-00184" Symbology="Code128" />
</Window>
<Window xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<telerik:RadBarcode Value="PROD-2026-00184" Symbology="Code128" />
</Window>
@* Blazor — TelerikBarcode renders as a Razor component *@
<TelerikBarcode Value="PROD-2026-00184" Type="@BarcodeType.Code128" />
IronBarcodeのアプローチ:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Display in WPF — assign to an Image control's Source property
var bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ToBitmapSource();
barcodeImageControl.Source = bitmapSource;
// Serve in Blazor or ASP.NET Core — return as base64 src attribute
byte[] bytes = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
string imgSrc = $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Display in WPF — assign to an Image control's Source property
var bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ToBitmapSource();
barcodeImageControl.Source = bitmapSource;
// Serve in Blazor or ASP.NET Core — return as base64 src attribute
byte[] bytes = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
string imgSrc = $"data:image/png;base64,{Convert.ToBase64String(bytes)}";
Imports IronBarCode
' Save to file — replaces XAML generation + manual export
BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
' Display in WPF — assign to an Image control's Source property
Dim bitmapSource = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ToBitmapSource()
barcodeImageControl.Source = bitmapSource
' Serve in Blazor or ASP.NET Core — return as base64 src attribute
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("PROD-2026-00184", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Dim imgSrc As String = $"data:image/png;base64,{Convert.ToBase64String(bytes)}"
Symbology列挙子と同じ記号体系をカバーしています。 QRコード生成に切り替えると、enum引数のみが変更されます。 QRコードのエラー訂正レベルやデータマトリックスの寸法など、 2Dバーコード生成に関するあらゆるオプションについては、 IronBarcodeのドキュメントに完全な例が記載されています。
デスクトップアプリケーションからバーコードを読み取る
Telerikはデスクトッププラットフォーム向けに2つの別々のリーダークラスを提供します - WPF用のRadBarcodeReader - 異なるクラス名、異なるプロパティ名、異なる入力タイプがあります。IronBarcodeはどちらのプロジェクトタイプでも同一に機能する単一の静的呼び出しで両方を代替します。
Telerik WPF のアプローチ:
WPFでの読み取りにはreader.Decode()への呼び出しが必要です。 結果プロパティは.Textです。
using Telerik.Windows.Controls.Barcode;
using System.Windows.Media.Imaging;
public string ReadProductBarcode(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new DecodeType[]
{
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
};
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
var result = reader.Decode(bitmap);
return result?.Text ?? "No barcode found";
}
using Telerik.Windows.Controls.Barcode;
using System.Windows.Media.Imaging;
public string ReadProductBarcode(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new DecodeType[]
{
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
};
var bitmap = new BitmapImage(new Uri(imagePath, UriKind.Absolute));
var result = reader.Decode(bitmap);
return result?.Text ?? "No barcode found";
}
Imports Telerik.Windows.Controls.Barcode
Imports System.Windows.Media.Imaging
Public Function ReadProductBarcode(imagePath As String) As String
Dim reader = New RadBarcodeReader()
reader.DecodeTypes = New DecodeType() {
DecodeType.Code128,
DecodeType.Code39,
DecodeType.EAN13,
DecodeType.EAN8,
DecodeType.UPCA,
DecodeType.UPCE,
DecodeType.Codabar,
DecodeType.ITF
}
Dim bitmap = New BitmapImage(New Uri(imagePath, UriKind.Absolute))
Dim result = reader.Decode(bitmap)
Return If(result?.Text, "No barcode found")
End Function
Telerik WinForms のアプローチ:
WinForms BitmapImageを受け取ります。
using Telerik.WinControls.UI.Barcode;
using System.Drawing;
public string ReadShippingLabel(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeType = new DecodeType[]
{
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
};
using var image = Image.FromFile(imagePath);
var result = reader.Read(image);
return result?.Text ?? "No barcode found";
}
using Telerik.WinControls.UI.Barcode;
using System.Drawing;
public string ReadShippingLabel(string imagePath)
{
var reader = new RadBarcodeReader();
reader.DecodeType = new DecodeType[]
{
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
};
using var image = Image.FromFile(imagePath);
var result = reader.Read(image);
return result?.Text ?? "No barcode found";
}
Imports Telerik.WinControls.UI.Barcode
Imports System.Drawing
Public Function ReadShippingLabel(imagePath As String) As String
Dim reader = New RadBarcodeReader()
reader.DecodeType = New DecodeType() {
DecodeType.Code128,
DecodeType.ITF,
DecodeType.EAN13
}
Using image = Image.FromFile(imagePath)
Dim result = reader.Read(image)
Return If(result?.Text, "No barcode found")
End Using
End Function
IronBarcodeのアプローチ:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadProductBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadProductBarcode(string imagePath)
{
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No barcode found";
}
Imports IronBarCode
Public Function ReadProductBarcode(imagePath As String) As String
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No barcode found")
End Function
BarcodeReader.Read()は静的メソッドで、リーダーインスタンスは不要です。 それはファイルパス文字列を直接受け取り、System.Drawing.Imageのロードを必要としません。 全50種類以上のサポートされたタイプにわたるフォーマット検出は自動的です。結果プロパティは.Textではありません。 この呼び出しは、WPFアプリケーションとWinFormsアプリケーションの両方で変更なしに動作します。プラットフォーム固有のバリエーションはありません。 また、Telerik社のリーダーが1次元フォーマットに限定されているのとは異なり、QRコード、DataMatrix、および画像内に存在するその他のフォーマットも読み取ることができます。
Telerikを使えば、これまで不可能だったQRコードの読み取りが可能になります
コードベースにQR読み取りが利用できないことを記載したコメントやNotSupportedExceptionがある場合、これがその代替です。 TelerikにはQRコード読み取りを有効にする設定パスが存在しません。このシナリオに相当するTelerikの機能はありません。
Telerikのアプローチ:
// RadBarcodeReader does not support QR codes.
// DecodeType.QR does not exist in the Telerik enum.
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Telerik RadBarcodeReader cannot read QR codes. " +
"DecodeType.QR is not a valid enum value.");
}
// RadBarcodeReader does not support QR codes.
// DecodeType.QR does not exist in the Telerik enum.
public string ReadQrCode(string imagePath)
{
throw new NotSupportedException(
"Telerik RadBarcodeReader cannot read QR codes. " +
"DecodeType.QR is not a valid enum value.");
}
' RadBarcodeReader does not support QR codes.
' DecodeType.QR does not exist in the Telerik enum.
Public Function ReadQrCode(imagePath As String) As String
Throw New NotSupportedException("Telerik RadBarcodeReader cannot read QR codes. " & _
"DecodeType.QR is not a valid enum value.")
End Function
IronBarcodeのアプローチ:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No QR code found";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
var results = BarcodeReader.Read(imagePath);
return results.FirstOrDefault()?.Value ?? "No QR code found";
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
' QR codes, DataMatrix, PDF417, and Aztec are all detected automatically
Dim results = BarcodeReader.Read(imagePath)
Return If(results.FirstOrDefault()?.Value, "No QR code found")
End Function
EAN-13バーコードを読み取るのと同じBarcodeReader.Read()呼び出しでQRコードを読み取ります。 2Dフォーマット用の個別の設定はありません。 読み取りと生成の両方でサポートされているバーコード形式の完全なリストについては、 IronBarcodeのドキュメントに50以上の項目すべてと、形式固有の注記が記載されています。
ASP.NET Coreエンドポイントでのバーコードの読み取り
Telerikは、ASP.NET CoreまたはBlazor用のバーコード読み取りコンポーネントを提供していません。 既存のアプリケーションが、WebレイヤーにTelerikリーダーがないため、アップロードされた画像をデスクトップサービスにルーティングして読み取っている場合、その回避策はWebレイヤーでの直接読み取りに置き換えられます。
Telerikのアプローチ:
// No Telerik reading API available in ASP.NET Core.
// Workaround: forward uploaded file to a WPF or WinForms service
// that can reference Telerik.Windows.Controls.Barcode.
[HttpPost("read")]
public async Task<IActionResult> ReadBarcode(IFormFile imageFile)
{
// Must proxy to desktop service — no Telerik reader available here
var bytes = await ReadAllBytesAsync(imageFile);
var result = await _desktopBridgeService.ReadAsync(bytes);
return Ok(result);
}
// No Telerik reading API available in ASP.NET Core.
// Workaround: forward uploaded file to a WPF or WinForms service
// that can reference Telerik.Windows.Controls.Barcode.
[HttpPost("read")]
public async Task<IActionResult> ReadBarcode(IFormFile imageFile)
{
// Must proxy to desktop service — no Telerik reader available here
var bytes = await ReadAllBytesAsync(imageFile);
var result = await _desktopBridgeService.ReadAsync(bytes);
return Ok(result);
}
Imports Microsoft.AspNetCore.Mvc
' No Telerik reading API available in ASP.NET Core.
' Workaround: forward uploaded file to a WPF or WinForms service
' that can reference Telerik.Windows.Controls.Barcode.
<HttpPost("read")>
Public Async Function ReadBarcode(imageFile As IFormFile) As Task(Of IActionResult)
' Must proxy to desktop service — no Telerik reader available here
Dim bytes = Await ReadAllBytesAsync(imageFile)
Dim result = Await _desktopBridgeService.ReadAsync(bytes)
Return Ok(result)
End Function
IronBarcodeのアプローチ:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
[HttpPost("read")]
public IActionResult ReadBarcode(IFormFile imageFile)
{
using var stream = imageFile.OpenReadStream();
var results = BarcodeReader.Read(stream);
return Ok(results.Select(r => new
{
Format = r.BarcodeType.ToString(),
Value = r.Value
}));
}
[HttpGet("generate")]
public IActionResult GenerateBarcode([FromQuery] string data)
{
var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return File(bytes, "image/png");
}
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/barcode")]
public class BarcodeController : ControllerBase
{
[HttpPost("read")]
public IActionResult ReadBarcode(IFormFile imageFile)
{
using var stream = imageFile.OpenReadStream();
var results = BarcodeReader.Read(stream);
return Ok(results.Select(r => new
{
Format = r.BarcodeType.ToString(),
Value = r.Value
}));
}
[HttpGet("generate")]
public IActionResult GenerateBarcode([FromQuery] string data)
{
var bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return File(bytes, "image/png");
}
}
Imports IronBarCode
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("api/barcode")>
Public Class BarcodeController
Inherits ControllerBase
<HttpPost("read")>
Public Function ReadBarcode(imageFile As IFormFile) As IActionResult
Using stream = imageFile.OpenReadStream()
Dim results = BarcodeReader.Read(stream)
Return Ok(results.Select(Function(r) New With {
.Format = r.BarcodeType.ToString(),
.Value = r.Value
}))
End Using
End Function
<HttpGet("generate")>
Public Function GenerateBarcode(<FromQuery> data As String) As IActionResult
Dim bytes = BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Return File(bytes, "image/png")
End Function
End Class
Streamを直接受け取るので、アップロードされたファイルストリームはディスクに書き込まずに渡されます。 このコントローラーは、変更を加えることなくLinux、Docker、またはAzure App Serviceにデプロイできます。
PDFファイルからバーコードを読み取る
TelerikにはPDFバーコード読み取り機能はありません。 既存のTelerikベースのコードベースにPDF読み取りを追加するには、ページを画像に変換するPDFレンダリングライブラリが必要です。 IronBarcodeはPDFファイルを直接読み取ります。
Telerikのアプローチ:
// No direct PDF reading support in RadBarcodeReader.
// Workaround: use a separate PDF library to extract page images
using SomePdfLibrary; // third-party dependency
using Telerik.Windows.Controls.Barcode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
var pages = PdfRenderer.ExtractPages(pdfPath); // third-party call
foreach (var pageImage in pages)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = ConvertToBitmapImage(pageImage); // conversion required
var result = reader.Decode(bitmap);
if (result != null)
results.Add(result.Text); // 1D only — QR codes on PDF pages are missed
}
return results;
}
// No direct PDF reading support in RadBarcodeReader.
// Workaround: use a separate PDF library to extract page images
using SomePdfLibrary; // third-party dependency
using Telerik.Windows.Controls.Barcode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = new List<string>();
var pages = PdfRenderer.ExtractPages(pdfPath); // third-party call
foreach (var pageImage in pages)
{
var reader = new RadBarcodeReader();
reader.DecodeTypes = new[] { DecodeType.Code128, DecodeType.EAN13 };
var bitmap = ConvertToBitmapImage(pageImage); // conversion required
var result = reader.Decode(bitmap);
if (result != null)
results.Add(result.Text); // 1D only — QR codes on PDF pages are missed
}
return results;
}
Imports SomePdfLibrary ' third-party dependency
Imports Telerik.Windows.Controls.Barcode
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results As New List(Of String)()
Dim pages = PdfRenderer.ExtractPages(pdfPath) ' third-party call
For Each pageImage In pages
Dim reader As New RadBarcodeReader()
reader.DecodeTypes = New DecodeType() {DecodeType.Code128, DecodeType.EAN13}
Dim bitmap = ConvertToBitmapImage(pageImage) ' conversion required
Dim result = reader.Decode(bitmap)
If result IsNot Nothing Then
results.Add(result.Text) ' 1D only — QR codes on PDF pages are missed
End If
Next
Return results
End Function
IronBarcodeのアプローチ:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r =>
$"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList();
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
public List<string> ReadBarcodesFromPdf(string pdfPath)
{
var results = BarcodeReader.Read(pdfPath);
return results.Select(r =>
$"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList();
}
Imports IronBarCode
Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
Dim results = BarcodeReader.Read(pdfPath)
Return results.Select(Function(r) $"Page {r.PageNumber}: {r.BarcodeType} — {r.Value}").ToList()
End Function
別途PDFライブラリは必要ありません。 ページ抽出の手順は不要です。画像変換も不要です。 PDFファイルのパスを渡すと、 IronBarcodeはすべてのページを処理し、ページ番号追跡機能付きのすべてのバーコードを返します。 PDFページ上の1次元バーコードと2次元バーコードの両方を検出します。
Telerik RadBarcodeAPI からIronBarcodeへのマッピングリファレンス
| Telerik RadBarcode | IronBarcode |
|---|---|
TelerikLicenseManager.InstallLicense("key") |
IronBarCode.License.LicenseKey = "key" |
<telerik:RadBarcode Value="..." Symbology="Code128" /> |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
<TelerikBarcode Type="@BarcodeType.Code128" /> |
サーバーサイド生成はToPngBinaryData()を返します |
Symbology.Code128 |
BarcodeEncoding.Code128 |
Symbology.QRCode |
BarcodeEncoding.QRCode |
new RadBarcodeReader() (WPF) |
静的クラス - インスタンスは不要 |
new RadBarcodeReader() (WinForms) |
静的クラス - インスタンスは不要 |
| `reader.DecodeTypes = new DecodeType[] { ... WPF | 自動検出 - 仕様は不要 |
| `reader.DecodeType = new DecodeType[] { ... WinForms | 自動検出 - 仕様は不要 |
reader.Decode(bitmapImage) (WPF) |
BarcodeReader.Read(imagePath) |
reader.Read(drawingImage) (WinForms) |
BarcodeReader.Read(imagePath) |
result.Text |
result.Value |
result.Symbology |
result.BarcodeType |
BitmapImageが入力として必要です (WPF) |
ファイルパス、Stream、またはバイト配列が受け入れ可能 |
System.Drawing.Imageが入力として必要です (WinForms) |
ファイルパス、Stream、またはバイト配列が受け入れ可能 |
| 読み取り専用1Dフォーマット | 2Dタイプを含む50種類以上のフォーマット |
| WPFおよびWinFormsの閲覧専用 | すべて for .NETプラットフォーム |
| PDF閲覧サポートなし | BarcodeReader.Read("file.pdf") — ネイティブ |
一般的な移行の問題と解決策
問題1:XAMLバーコードコントロールの置き換え
Telerik: <telerik:RadBarcode>はWPF UI要素ツリー内で直にレンダリングされるビジュアルコントロールです。 それはコードビハインドの変更なしにImage要素に置き換えることはできません。
解決策: <Image>コントロールに置き換え、コードビハインドでバーコードを生成します。 BitmapSourceにバインドします。
// In code-behind or ViewModel
using IronBarCode;
var generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128)
.ResizeTo(400, 100);
BarcodeImage.Source = generated.ToBitmapSource();
// In code-behind or ViewModel
using IronBarCode;
var generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128)
.ResizeTo(400, 100);
BarcodeImage.Source = generated.ToBitmapSource();
Imports IronBarCode
' In code-behind or ViewModel
Dim generated = BarcodeWriter.CreateBarcode(barcodeValue, BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
BarcodeImage.Source = generated.ToBitmapSource()
Blazorの場合、サーバーサイドで生成されたbase64エンコードされたPNGを受け取る<TelerikBarcode>を置き換えます。
問題2:DecodeType削除による副作用
Telerik: DecodeTypes (WPF) または DecodeType (WinForms) プロパティは、リーダーが検出しようとするフォーマットをフィルターします。 IronBarcodeの移行時にこのフィルターを削除すると、 IronBarcodeは画像に含まれるすべてのフォーマットの結果を返すようになり、以前はフィルターによって除外されていたフォーマットも含まれるようになります。
解決策: DecodeType割り当てブロックを完全に削除します。 追加で検出されたフォーマットが下流のロジックで予期しない結果を引き起こす場合 — 例えば、コードが1つのバーコードフォーマットのみが返されると仮定していた場合 — BarcodeReaderOptionsを使用してオプションのフィルタリングを追加します。
using IronBarCode;
var options = new BarcodeReaderOptions
{
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read(imagePath, options);
using IronBarCode;
var options = new BarcodeReaderOptions
{
ExpectedBarcodeTypes = BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};
var results = BarcodeReader.Read(imagePath, options);
Imports IronBarCode
Dim options As New BarcodeReaderOptions With {
.ExpectedBarcodeTypes = BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}
Dim results = BarcodeReader.Read(imagePath, options)
これは任意です。 デフォルトの動作(すべてのフォーマットを検出する)は、ほとんどのユースケースにおいて適切であり、以前のTelerikの実装では実現できなかった結果を生み出します。
問題3:TelerikLicenseManagerのクリーンアップ
Telerik: Program.cs (WinForms) または App.xaml.cs (WPF) 内です。 キーは、アプリの設定、構成ファイルに保存されているか、起動メソッドにハードコードされていることが多い。
解決策: TelerikLicenseManager.InstallLicense()呼び出しを削除します。 同じ起動場所にあるIronBarcodeキー割り当てに置き換えてください。
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY");
// Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove:
// Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY");
// Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove:
' Telerik.WinControls.TelerikLicenseManager.InstallLicense("TELERIK-KEY")
' Add:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Telerikパッケージがインストールされたままの場合(他の非バーコードTelerikコントロールがまだ使用されているため)、それらのコントロールのためのTelerikLicenseManager呼び出しは維持されるべきです。 Telerikパッケージ自体を完全に削除する場合にのみ、この呼び出しを削除してください。
Telerik RadBarcode移行チェックリスト
マイグレーション前のタスク
コードを変更する前に、コードベース全体を監査して、Telerikバーコードの使用状況をすべて確認してください。
# License initialization
grep -r "TelerikLicenseManager.InstallLicense" --include="*.cs" .
# XAML generation controls
grep -r "RadBarcode" --include="*.xaml" .
grep -r "TelerikBarcode" --include="*.razor" .
# Code-behind generation references
grep -r "RadBarcode" --include="*.cs" .
grep -r "Symbology\." --include="*.cs" .
# Reading API — WPF
grep -r "RadBarcodeReader" --include="*.cs" .
grep -r "DecodeTypes\." --include="*.cs" .
grep -r "reader\.Decode(" --include="*.cs" .
# Reading API — WinForms
grep -r "BarCodeReader" --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
grep -r "reader\.Read(" --include="*.cs" .
# Result property access
grep -r "result\.Text" --include="*.cs" .
grep -r "result\.Symbology" --include="*.cs" .
# License initialization
grep -r "TelerikLicenseManager.InstallLicense" --include="*.cs" .
# XAML generation controls
grep -r "RadBarcode" --include="*.xaml" .
grep -r "TelerikBarcode" --include="*.razor" .
# Code-behind generation references
grep -r "RadBarcode" --include="*.cs" .
grep -r "Symbology\." --include="*.cs" .
# Reading API — WPF
grep -r "RadBarcodeReader" --include="*.cs" .
grep -r "DecodeTypes\." --include="*.cs" .
grep -r "reader\.Decode(" --include="*.cs" .
# Reading API — WinForms
grep -r "BarCodeReader" --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
grep -r "reader\.Read(" --include="*.cs" .
# Result property access
grep -r "result\.Text" --include="*.cs" .
grep -r "result\.Symbology" --include="*.cs" .
各試合の記録を残してください。 どのファイルにXAMLコントロールが含まれているか、どのファイルに読み取りコードが含まれているか、そして各ファイルがどのプラットフォームに属しているかをメモしておきましょう。
コード更新タスク
- Telerik バーコードNuGetパッケージを削除します(他のコントロールに必要な場合は保持します)。
- バーコード機能を必要とする各プロジェクトに
IronBarcodeNuGetパッケージをインストールします - 各アプリケーションのスタートアップエントリポイントに
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"を追加します - Telerik名前空間のインポートを削除し、
using IronBarCodeを追加します <telerik:RadBarcode>XAML要素を<Image>コントロールに置き換えますBarcodeWriter.CreateBarcode(...).ToBitmapSource()を使用してコードビハインドでバーコード画像を生成します<TelerikBarcode>Razorコンポーネントをサーバーサイドで生成されたbase64の<img>ソースで置き換えますBarcodeReader.Read(path)の静的呼び出しに置き換えますBarcodeReader.Read(path)の静的呼び出しに置き換えます- すべての
reader.DecodeTypes = new DecodeType[] { ... }andreader.DecodeType = new DecodeType[] { ... }ブロック BarcodeReader.Read(imagePath)に置き換えますBarcodeReader.Read(imagePath)に置き換えます- すべての読み取り結果アクセスポイントで
result.Valueにリネームします - すべてのフォーマットチェックポイントで
result.BarcodeTypeにリネームします BarcodeEncoding.Code128に置き換えます- Telerikパッケージが完全に削除された場所で
TelerikLicenseManager.InstallLicense()呼び出しを削除します
移行後のテスト
- 以前に読み取ったすべての1次元バーコード(Code128、EAN13など)が引き続き正しい値を返すことを確認します。 テスト画像内のQRコードが、以前はnullを返していた箇所で、正常に読み取られるようになったことを確認してください。 生成されたバーコード(PNG形式で保存またはバイトデータとして提供される)が正しく表示され、スキャンできることを確認するテスト。
- 以前は読み取りを実行できなかったASP.NET CoreまたはBlazorエンドポイントが正しく機能するようになったことを確認します。 PDF読み取り機能を追加した場合は、各PDFページのバーコードが正しいページ番号で検出されていることを確認してください。
- 移行前セクションのgrep監査コマンドを実行して、TelerikバーコードAPIへの参照が残っていないことを確認します。
- 最初の
IronBarCode.License.LicenseKeyが設定されていることを確認してください
IronBarcodeへの移行の主なメリット
2Dフォーマットの完全サポート:移行後、QRコード、DataMatrix、PDF417、およびAztecフォーマットは、Code128およびEAN13の読み取りに使用されていたものと同じAPI呼び出しで読み取ることができます。追加の設定は不要で、2Dフォーマット用の別個のライブラリも必要ありません。 読み取りエンジンはフォーマットの識別を自動的に処理します。
統一されたクロスプラットフォームAPI: 同じBarcodeWriter.CreateBarcode()呼び出しは、WPF、WinForms、ASP.NET Core、Blazor、コンソールアプリケーション、Dockerコンテナで同一にコンパイルして実行されます。 共有サービスライブラリに一度記述されたバーコードロジックは、ソリューション内のすべてのプロジェクトタイプで変更なしに機能します。
ネイティブPDFファイル処理: IronBarcodeはPDFファイルからバーコードを直接読み取り、すべてのページを処理して、ページ番号メタデータを含む結果を返します。 従来はPDFレンダリングライブラリとTelerikの読み取りステップが必要だったワークフローが、単一のメソッド呼び出しに統合され、サードパーティへの依存と中間的な画像変換ステップが不要になりました。
バーコードアクセスにおけるサブスクリプションへの依存を解消:移行後、バーコード機能はIronBarcodeの永久ライセンスモデルを通じて利用可能になります。 継続的な利用には、年次更新は不要です。 TelerikSuiteの主な用途がバーコード関連であったチームは、継続的なライセンス費用を1回限りの費用に削減できます。
簡素化されたコードベース: result.Textプロパティチェーンはすべて、自動検出結果コレクションと単一の静的メソッド呼び出しに置き換えられます。 これまでWPFとWinFormsの読み取りにそれぞれ異なる実装が必要だったコードが、単一の共通実装に統合されます。
よくある質問
なぜTelerik BarCodeからIronBarcodeに移行する必要があるのですか?
一般的な理由としては、ライセンスの簡素化(SDK + ランタイムキーの複雑さの排除)、スループット制限の排除、ネイティブPDFサポートの獲得、Docker/CI/CDデプロイの改善、プロダクションコード内のAPI定型文の削減などが挙げられます。
TelerikのAPIコールをIronBarcodeに置き換えるには?
インスタンスの作成とライセンスの定型文をIronBarCode.License.LicenseKey = "key "に置き換えてください。リーダー・コールをBarcodeReader.Read(path)に、ライター・コールをBarcodeWriter.CreateBarcode(data, encoding)に置き換えてください。静的メソッドはインスタンス管理を必要としません。
Telerik BarCodeからIronBarcodeに移行する場合、コードはどのくらい変更されますか?
ほとんどのマイグレーションでは、コード行数は少なくなります。ライセンスの定型文、インスタンス・コンストラクタ、明示的なフォーマット設定が削除されます。コアとなる読み取り/書き込み操作は、より短いIronBarcodeに対応し、よりきれいな結果オブジェクトが得られます。
移行時にTelerik BarCodeとIronBarcodeの両方をインストールしておく必要がありますか?
ほとんどのマイグレーションは、並列操作ではなく、直接置き換えです。一度に1つのサービスクラスを移行し、NuGet参照を置き換え、インスタンス化とAPI呼び出しパターンを更新してから次のクラスに移行します。
IronBarcodeのNuGetパッケージ名は何ですか?
パッケージは'IronBarcode'(大文字のBとC)です。Install-Package IronBarcode'または'dotnet add package IronBarcode'でインストールしてください。コード中のusingディレクティブは'using IronBarcode;'である。
IronBarcodeはTelerik Barcodeと比較して、どのようにDockerデプロイを簡素化しますか?
IronBarcodeは外部SDKファイルやマウントされたライセンス設定のないNuGetパッケージです。Dockerでは、IRONBARCODE_LICENSE_KEY環境変数を設定すると、パッケージが起動時にライセンス検証を処理します。
Telerikから移行した後、IronBarcodeはすべてのバーコードフォーマットを自動的に検出しますか?
IronBarcodeは、サポートされているすべてのフォーマットのシンボルを自動検出します。明示的なBarcodeTypesの列挙は必要ありません。フォーマットが既に知られていて、パフォーマンスが重要な場合、BarcodeReaderOptionsは最適化として検索空間を制限することができます。
IronBarcodeは別のライブラリなしでPDFからバーコードを読み取ることができますか?
BarcodeReader.Read("document.pdf")は、PDFファイルをネイティブに処理します。結果には、見つかった各バーコードの PageNumber、Format、Value、および Confidence が含まれます。外部のPDFレンダリングステップは必要ありません。
IronBarcodeはどのようにパラレルバーコード処理を行うのですか?
IronBarcodeの静的メソッドはステートレスでスレッドセーフです。Parallel.ForEachをスレッドごとのインスタンス管理なしにファイルリスト上で直接使用します。BarcodeReaderOptions.MaxParallelThreadsは内部のスレッドバジェットを制御します。
Telerik 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、ストリームなどの複数の出力形式をサポートしています。

