DevExpress バーコード vs IronBarcode: UI制御 vs スタンドアロンライブラリ
DevExpressは、高く評価されている.NET UIツールキットです。 グリッド、スケジューラ、チャート、ピボットテーブルコントロールはエンタープライズチームによって広く使用されています。 しかし、バーコードのサポートに関しては話は別です。 DevExpressはDxBarCodeタグを提供しており、フォームにバーコードをレンダリングすることができます。 DevExpressサポートは、読み取り機能が存在しないことを確認しており、それを追加する計画は現在ありません。 バーコードがバックグラウンドジョブ、Web API、PDFドキュメント、またはUIフォームが使用されていない環境に存在する場合、この制御は適用されません。
この制約により、DevExpressのバーコード関連製品は、DevExpressのWinFormsまたはBlazorのUI内でバーコードを視覚的に表示するという特定のニッチな分野に限定される。 そのニッチな用途であれば問題なく機能します。しかし、それ以外の用途、例えばサーバーサイドでの生成、画像やPDFからの読み込み、Azure FunctionsやDockerコンテナでのヘッドレス処理などには、別のツールが必要です。
DevExpressバーコードコントロールの理解
DevExpress DevExpress.XtraPrinting.BarCodeにあります。 これは単体で動作するライブラリではありません。 この製品はDXperienceスイートにバンドルされており、価格は年間$1,699.99からです(ユニバーサルサブスクリプションは$2,299.99です)。 バーコード専用のNuGetパッケージは別途提供されていません。
BarCodeControlはWinFormsコントロールです。 シンボルオブジェクトを設定してプロパティを設定すると、画面に表示されます。 そのレンダリングをファイルに保存するにはBitmapが必要です。
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraEditors; // BarCodeControl
using DevExpress.XtraPrinting.BarCode; // Code128Generator, etc.
using System.Drawing;
using System.Drawing.Imaging;
var barCode = new BarCodeControl();
var symbology = new Code128Generator();
symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
barCode.Symbology = symbology;
barCode.Text = "ITEM-12345";
barCode.Module = 0.02f; // document units, not pixels
barCode.ShowText = true;
// File output requires DrawToBitmap — you must size the Bitmap manually
barCode.Width = 400;
barCode.Height = 100;
var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save("barcode.png", ImageFormat.Png);
bitmap.Dispose();Imports DevExpress.XtraEditors
Imports DevExpress.XtraPrinting.BarCode
Imports System.Drawing
Imports System.Drawing.Imaging
Dim barCode As New BarCodeControl()
Dim symbology As New Code128Generator()
symbology.CharacterSet = Code128CharacterSet.CharsetAuto
barCode.Symbology = symbology
barCode.Text = "ITEM-12345"
barCode.Module = 0.02F ' document units, not pixels
barCode.ShowText = True
' File output requires DrawToBitmap — you must size the Bitmap manually
barCode.Width = 400
barCode.Height = 100
Dim bitmap As New Bitmap(barCode.Width, barCode.Height)
barCode.DrawToBitmap(bitmap, New Rectangle(0, 0, barCode.Width, barCode.Height))
bitmap.Save("barcode.png", ImageFormat.Png)
bitmap.Dispose()ここにはいくつかの摩擦点があることに注目してください。 まず、barCode.Moduleはドキュメント単位であり、ピクセル単位で考えると不一致が生じます。 次に、Bitmapを割り当てる前に最終的なピクセルサイズを知る必要があります。 第三に、このコントロールはWinFormsアセンブリの読み込みを必要とします。つまり、 ASP.NET Coreの最小限のAPIまたはコンソールのバックグラウンドサービスは、バーコード画像を生成するためだけにWindows Formsインフラストラクチャを読み込む必要があるということです。
BlazorのDxBarCodeタグは概念的には類似していますが、UIレンダリングのためのRazorコンポーネントであって、サーバーサイド生成APIではありません。
読解機能なし
DevExpressの公式見解は、バーコード認識機能やスキャン機能は提供していないというものです。 DevExpressサポートセンターは"DevExpress BarCodeコントロールはバーコード生成専用に設計されています。"と述べています。 "バーコードの認識/スキャン機能は提供していません。"それを追加する計画は現時点でありません。
DevExpress WinFormsアプリケーションから開発を開始したチームが、後からアップロードされた画像からバーコードをスキャンしたり、PDF添付ファイルからQRコードを読み取ったりする必要が生じた場合、DevExpressツールボックスでは対応できません。読み取り処理には別のライブラリを導入する必要があり、APIの一貫性を保つために生成側もそのライブラリに移行すべきかどうかという疑問が生じます。
IronBarcodeは双方向に対応しています。
// IronBarcode reading — works on images, PDFs, and byte arrays
// NuGet: dotnet add package IronBarcode
using IronBarCode;
var results = BarcodeReader.Read("scanned-label.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}Imports IronBarCode
' IronBarcode reading — works on images, PDFs, and byte arrays
' NuGet: dotnet add package IronBarcode
Dim results = BarcodeReader.Read("scanned-label.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
NextPDFファイルの読み込みには、追加のライブラリは一切必要ありません。
// Reading barcodes from a PDF — no PdfiumViewer or similar required
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
{
Console.WriteLine($"Page barcode: {result.Value}");
}Imports System
' Reading barcodes from a PDF — no PdfiumViewer or similar required
Dim pdfResults = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In pdfResults
Console.WriteLine($"Page barcode: {result.Value}")
NextSuiteバンドルの問題
DevExpressのバーコードコンポーネントは、単体製品としては販売されていません。 任意のプロジェクトでBarCodeControlを使用するには、DevExpressのサブスクリプションが必要です。ASP.NET & Blazorティアは年額$1,099.99から始まり、DXperience(WinForms + WPF)は年額$1,699.99、Universalは年額$2,299.99です。 このSuiteには、グリッド、チャート、スケジューラー、ピボット、その他多くのコントロールが含まれています。これは、DevExpress WinFormsまたはBlazorアプリケーションを本格的に構築する場合に妥当な構成です。 バックエンドサービスでのみバーコード生成が必要な場合、そのサービスでは決して使用されないUIツールキット全体に料金を支払うことになります。
IronBarcodeはスタンドアロンパッケージです。
dotnet add package IronBarcode
永久ライセンスのLite版は、開発者1名につき749ドルからとなっています。 UIツールキットは同梱されていません。 バーコードの生成と読み取り、クロスプラットフォーム対応、そしてあなたが要求していないその他の機能は一切含まれていません。
ヘッドレス使用の制限
サーバーサイドシナリオでのBarCodeControlの根本的な問題は、WinFormsコントロールであるということです。 .NET 6以降のASP.NET Coreの最小限のAPIプロジェクトでは、WinFormsアセンブリはデフォルトでは参照されません。 BarCodeControlをインスタンス化するには、APIプロジェクトが明示的にWindowsをターゲットにしてWindows Formsランタイムをロードするか、APIが決してレンダリングしないUIインフラストラクチャを引き込む回避策の参照を追加する必要があります。
Azure Functionsの従量課金プランでは、UIレイヤーは一切存在しません。 Linuxベースイメージを実行するDockerコンテナでは、Windows Forms GDI+の依存関係が完全に欠落している場合があります。 DevExpressはこれらのヘッドレス環境でのBarCodeControlの使用を公式にサポートしていません。
IronBarcodeは、完全にプログラム可能な静的APIを使用しています。
// IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
// NuGet: dotnet add package IronBarcode
using IronBarCode;
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");Imports IronBarCode
' IronBarcode: works in WinForms, ASP.NET Core, Azure Function, console — same code
' NuGet: dotnet add package IronBarcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")この呼び出しは、コンソールアプリケーション、 ASP.NET Coreコントローラー、Service BusメッセージによってトリガーされるAzure Functions、またはLinux上で実行されるDockerコンテナのいずれでも正常に動作します。 APIは環境間で変更されません。 UIアセンブリへの依存関係はありません。
ASP.NET Coreのエンドポイントで、バーコードをPNGファイルとしてレスポンスとして返す例は次のようになります。
app.MapGet("/barcode/{sku}", (string sku) =>
{
var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return Results.File(bytes, "image/png");
});Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http
app.MapGet("/barcode/{sku}", Function(sku As String)
Dim bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.ToPngBinaryData()
Return Results.File(bytes, "image/png")
End Function)大幅な回避策なしではBarCodeControlと同等のパターンはありません。
IronBarcodeを理解する
IronBarcodeは、バーコードの生成と読み取りを行うためのスタンドアロン for .NETライブラリです。 APIは完全に静的です。管理すべきインスタンスはなく、制御ライフサイクルもなく、UIへの依存もありません。 生成と読み込みはどちらも同じ呼び出しで行われます。
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.SaveAsPng("order-label.png");
// Generate and get bytes (for HTTP responses, blob storage, etc.)
byte[] pngBytes = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128)
.ResizeTo(450, 120)
.ToPngBinaryData();
// Read from an image file
var results = BarcodeReader.Read("order-label.png");
Console.WriteLine(results.First().Value); // ORDER-9921Imports IronBarCode
' Generate Code 128
BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128) _
.ResizeTo(450, 120) _
.SaveAsPng("order-label.png")
' Generate and get bytes (for HTTP responses, blob storage, etc.)
Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-9921", BarcodeEncoding.Code128) _
.ResizeTo(450, 120) _
.ToPngBinaryData()
' Read from an image file
Dim results = BarcodeReader.Read("order-label.png")
Console.WriteLine(results.First().Value) ' ORDER-9921ライセンス認証は起動時に1行で行います。
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"ネットワーク呼び出しなし。 エラー処理の定型コードは一切不要です。 ローカル検証。
QRコード並列表示
QRコードは、UIコントロールとプログラムライブラリ間のAPIのギャップを象徴的に示している。
DevExpress QRコード - WinFormsコントロール:
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraEditors; // BarCodeControl
using DevExpress.XtraPrinting.BarCode; // QRCodeGenerator + QRCodeErrorCorrectionLevel
var barCode = new BarCodeControl();
var symbology = new QRCodeGenerator();
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
barCode.Symbology = symbology;
barCode.Text = "https://example.com";
barCode.Width = 500;
barCode.Height = 500;
var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save("qr.png", ImageFormat.Png);
bitmap.Dispose();Imports DevExpress.XtraEditors ' BarCodeControl
Imports DevExpress.XtraPrinting.BarCode ' QRCodeGenerator + QRCodeErrorCorrectionLevel
Imports System.Drawing
Imports System.Drawing.Imaging
Dim barCode As New BarCodeControl()
Dim symbology As New QRCodeGenerator()
symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H
symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric
barCode.Symbology = symbology
barCode.Text = "https://example.com"
barCode.Width = 500
barCode.Height = 500
Dim bitmap As New Bitmap(barCode.Width, barCode.Height)
barCode.DrawToBitmap(bitmap, New Rectangle(0, 0, barCode.Width, barCode.Height))
bitmap.Save("qr.png", ImageFormat.Png)
bitmap.Dispose()IronBarcode QRコード — 同じ結果が得られ、UIアセンブリは不要です。
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qr.png");netQRコードの中央にブランドロゴを追加する:
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.AddBrandLogo("company-logo.png")
.SaveAsPng("qr-branded.png");QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("qr-branded.png")DevExpressには、埋め込みロゴに相当する機能はありません。 このコントロールは標準的なQRコードを表示するだけで、それ以上の機能は提供しません。
機能比較
| フィーチャー | DevExpress バーコード | IronBarcode |
|---|---|---|
| バーコード生成 | はい(WinFormsコントロール、 Blazorタグ) | はい(プログラムによるAPI、全環境) |
| バーコードの読み取り/スキャン | いいえ、公式に確認済みです | はい、画像、PDF、バイト配列 |
| PDFバーコード読み取り | なし | はい、ネイティブで、追加ライブラリは不要です。 |
| スタンドアロンNuGetパッケージ | いいえ — DXperienceSuiteは不要です | はい、IronBarcodeのみ |
| Suite料金 | $1,099.99/年(ASP.NET & Blazor)〜$2,299.99/年(ユニバーサル)から | 該当なし — スタンドアロン |
| ライセンス費用 | サブスクリプションのみ | 永久翻訳 $999より |
| ASP.NET Core / 最小限のAPI | WinFormsの回避策が必要です | ネイティブサポート |
| Azureファンクション | ヘッドレスモードではサポートされていません | フルサポート |
| Docker(Docker)/ Linux(リナックス)。 | LinuxベースイメージにおけるGDI+の問題 | フルサポート |
| コンソールアプリケーション | WinFormsアセンブリの読み込みが必要です | ネイティブサポート |
| QRコード生成 | はい(QRコードジェネレーターのシンボル体系による) | はい(QRコードライター) |
| ロゴが埋め込まれたQRコード | なし | はい — .AddBrandLogo() |
| QRコードのエラー訂正レベル | H、Q、M、L | 最高、高、中、低 |
| コード128 | はい | はい |
| データマトリックス | はい | はい |
| PDF417 | はい | はい |
| アステカ | はい | はい |
| ファイル出力 | DrawToBitmap — 手動ビットマップ割り当て | .SaveAsPng()、.SaveAsGif()、.SaveAsSvg() |
| バイナリ出力(HTTPレスポンス) | 手動ビットマップ → メモリストリーム | .ToPngBinaryData() |
| マルチスレッド読み取り | 該当なし — 読書なし | MaxParallelThreads = 4 |
| 複数バーコード読み取り | 該当なし — 読書なし | ExpectMultipleBarcodes = true です。 |
| プラットフォーム | Windows (WinForms / Blazor) | Windows、Linux、macOS、Docker、Azure、AWS Lambda |
| .NETバージョンのサポート | .NET Framework + 最新 for .NET (Windows) | .NET Framework 4.6.2から現在 for .NET |
APIマッピングリファレンス
DevExpress BarCodeControl パターンに精通したチームにとって、これらの等価性は有用です。
| DevExpress バーコード | IronBarcode |
|---|---|
new BarCodeControl() | 静的 — インスタンスは不要 |
new Code128Generator() + barCode.Symbology = symbology | BarcodeEncoding.Code128 パラメータとして渡される |
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.H | QRCodeWriter.CreateQrCode("data", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) |
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26 | BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new PDF417Generator() | BarcodeWriter.CreateBarcode("data", BarcodeEncoding.PDF417) |
new AztecGenerator() | BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Aztec) |
barCode.Module = 0.02f (文書単位) | .ResizeTo(width, height) (ピクセル) |
barCode.ShowText = true | .AddBarcodeText() |
DrawToBitmap(bitmap, rect) — 手動のBitmap割り当て | .SaveAsPng(path) — サイズを自動的に処理 |
手動のBitmap → MemoryStreamをHTTP応答のために | .ToPngBinaryData() |
| 読み取りAPIはありません | BarcodeReader.Read(imagePath) |
| 読み取り結果型なし | .Value (文字列), .Format (BarcodeEncoding) |
| すべてのプロジェクトでUIアセンブリが必要です | あらゆるタイプ for .NETプロジェクトで動作します |
| スイート専用($1,099.99/年から) | 単体版(永久ライセンス749ドル~) |
チームが切り替わるとき
DevExpressのバーコード制御からIronBarcodeへの移行を促す具体的なシナリオはいくつかあります。
**読み取り要件が発生します。**最も一般的なシナリオは、長年バーコードを生成してきたWinFormsアプリケーションに、新しい機能要求が届く場合です。アプリケーションは、アップロードされた画像やカメラで撮影した画像からバーコードをスキャンまたは検証する必要があります。 DevExpressには読み取りAPIがありません。 いずれにせよ、チームには新しいライブラリが必要であり、生成処理を同じライブラリに統合するのは理にかなっている。
**Web APIエンドポイントの必要性。**チームは、Webフロントエンド、モバイルアプリ、または他のサービスから呼び出されるオンデマンドでバーコードラベルを生成するマイクロサービスを構築しています。ASP.NET ASP.NET CoreプロジェクトにはWinFormsへの依存関係はなく、チームはWinFormsへの依存関係を追加したくありません。 IronBarcodeの静的APIは、UIアセンブリの余計な要素を一切含まず、HTTPエンドポイントに統合されます。
**Azure FunctionsまたはLambdaのデプロイ。**サーバーレスのデプロイでは、多くの場合、Linuxベースのイメージと最小限のランタイムが使用されます。 BarCodeControlはこの環境向けに設計されていません。 IronBarcodeは、設定変更なしでLinux、Dockerコンテナ、Azure Functions、およびAWS Lambda上で動作します。
単一機能のためのスイート更新コスト。 更新の際にチームがDXperienceスイートから実際に使用しているものを監査し、特定のサービス内で唯一のDevExpressコンポーネントがBarCodeControlであることが明らかになると、コストが問題になります。 独立したライブラリが$999の永続的なものである場合、バーコード生成に対して年間$1,699.99のDXperienceサブスクリプションを支払うのは難しい議論です。
**PDFファイルからの複数バーコード読み取り。**請求書PDF、出荷明細書、スキャンされたフォームなどからバーコードを読み取る文書処理ワークフローでは、PDFのサポートと読み取り機能の両方が必要です。 IronBarcodeは、追加のライブラリなしでPDFファイルを直接読み取ります。 DevExpressはどちらの機能も提供していません。
結論
DevExpressのバーコード機能は、UIツールキットに組み込まれたUIレンダリング機能として理解するのが最も適切でしょう。 アプリケーションが既にDevExpressをグリッドとチャートコントロールに使用しているWinFormsまたはBlazorアプリケーションで、バーコードをフォーム上に視覚的に表示するのが唯一の目的である場合、BarCodeControlは合理的な選択です — 既にライセンスがあります。
次のいずれかが必要になった瞬間、BarCodeControlは適切なツールではなくなります。バーコードの読み取り、サーバーサイドコンテキストでのバーコード生成、ヘッドレス環境での実行、Linuxでの作業、またはWinFormsアセンブリ参照なしでの操作。 DevExpressのサポート担当者は、読み取り機能は存在せず、今後も追加する予定はないと確認しました。 ヘッドレスモードの制限はアーキテクチャ上の問題であり、設定上の問題ではありません。 UIコントロールはUIコントロールです。
IronBarcodeは、あらゆる環境、あらゆるプラットフォームにおいて、静的APIを介したバーコードの生成と読み取りといった、プログラムによるバーコード処理のために構築されています。 これら2つのツールは、それぞれ異なる問題を解決する。 DevExpressのバーコードは、フォーム内に表示するためのものです。 IronBarcodeは、バーコードをコード化して処理するためのツールです。

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。