IRONSOFTWAREHOME
COMPARE TO OTHER COMPONENTS

DevExpress Barcode vs IronBarcode: UI Control vs Standalone Library

Curtis Chau
Curtis Chau
Updated: August 1, 2026

DevExpress is a well-regarded .NET UI toolkit. The grid, scheduler, chart, and pivot table controls are widely used by enterprise teams. The barcode support, however, is a different story. DevExpress ships a BarCodeControl - a WinForms control and a Blazor DxBarCode tag - that lets you render a barcode onto a form. DevExpress support has confirmed that no reading capability exists and there are no current plans to add it. If your barcodes live in a background job, a web API, a PDF document, or any environment without a UI form in play, the control does not apply.

That constraint narrows the DevExpress barcode offering to a specific niche: rendering a barcode visually inside a DevExpress WinForms or Blazor UI. For that niche it works fine. For anything else - server-side generation, reading from images or PDFs, headless processing in Azure Functions or Docker containers - you need a different tool.

Understanding DevExpress Barcode Controls

DevExpress BarCodeControl lives in DevExpress.XtraEditors, with its symbology generator classes in DevExpress.XtraPrinting.BarCode. It is not a standalone library. It is bundled in the DXperience suite, which starts at $1,699.99 per year (Universal subscriptions are $2,299.99). There is no separate barcode-only NuGet package you can install.

The BarCodeControl is a WinForms control. You configure it with a symbology object, set properties, and it renders on screen. Saving that rendering to a file requires calling DrawToBitmap, which expects a pre-allocated Bitmap of the right size:

// 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();

Notice several friction points here. First, barCode.Module is in document units rather than pixels, which creates a mismatch if you are thinking in pixel dimensions. Second, you must know the final pixel size before allocating the Bitmap. Third, the control requires the WinForms assemblies to be loaded - which means an ASP.NET Core minimal API or a console background service must load Windows Forms infrastructure just to generate a barcode image.

The Blazor DxBarCode tag is conceptually similar but is a Razor component for UI rendering, not a server-side generation API.

No Reading Capability

DevExpress's official position is that they do not provide barcode recognition or scanning functionality. The DevExpress Support Center states: "DevExpress BarCode control is designed for barcode generation only. We do not provide barcode recognition/scanning functionality." There are no current plans to add it.

For teams that start with a DevExpress WinForms application and later receive a requirement to scan a barcode from an uploaded image or read a QR code from a PDF attachment, the DevExpress toolbox cannot help. You will need to bring in a separate library to handle reading, which immediately raises the question of whether the generation side should also move to that library for API consistency.

IronBarcode handles both directions:

// 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}");
}

Reading from a PDF file requires zero extra libraries:

// 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}");
}

The Suite Bundling Issue

DevExpress barcode components are not sold as a standalone product. To use BarCodeControl in any project, your team needs a DevExpress subscription - the ASP.NET & Blazor tier starts at $1,099.99/year, DXperience (WinForms + WPF) is $1,699.99/year, and Universal is $2,299.99/year. The suite includes the grid, chart, scheduler, pivot, and many other controls - which is reasonable if you are building a full DevExpress WinForms or Blazor application. If you only need barcode generation for a backend service, you are paying for an entire UI toolkit that the service will never use.

IronBarcode is a standalone package:

dotnet add package IronBarcode
SHELL

The perpetual Lite license starts at $999 for one developer. There is no UI toolkit bundled in. You get barcode generation and reading, cross-platform support, and nothing else you did not ask for.

Headless Usage Limitation

The fundamental problem with BarCodeControl in server-side scenarios is that it is a WinForms control. In a .NET 6+ ASP.NET Core minimal API project, WinForms assemblies are not referenced by default. To instantiate BarCodeControl, your API project must either target Windows explicitly and load the Windows Forms runtime, or add workaround references that pull in UI infrastructure that your API will never render.

In an Azure Function consumption plan, you have no UI layer at all. In a Docker container running a Linux base image, the Windows Forms GDI+ dependencies may be absent entirely. DevExpress does not officially support BarCodeControl usage in these headless environments.

IronBarcode uses a fully programmatic, static 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");

This exact call works in a console application, an ASP.NET Core controller, an Azure Function triggered by a Service Bus message, or a Docker container running on Linux. The API does not change between environments. There is no UI assembly dependency.

An ASP.NET Core endpoint that returns a barcode as a PNG file response looks like this:

app.MapGet("/barcode/{sku}", (string sku) =>
{
    var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});

There is no equivalent pattern with BarCodeControl without significant workarounds.

Understanding IronBarcode

IronBarcode is a standalone .NET library for generating and reading barcodes. The API is fully static - no instances to manage, no control lifecycle, no UI dependency. Generation and reading both work in the same call:

// 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-9921

License activation is a single line at startup:

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

No network call. No error-handling boilerplate. Local validation.

QR Code Side-by-Side

QR codes illustrate the API gap between a UI control and a programmatic library.

DevExpress QR code - WinForms control:

// 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();

IronBarcode QR code - same result, no UI assembly required:

// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .SaveAsPng("qr.png");

Adding a brand logo to the center of the QR code:

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

DevExpress has no equivalent for embedded logos. The control renders a standard QR code and nothing more.

Feature Comparison

FeatureDevExpress BarcodeIronBarcode
Barcode generationYes (WinForms control, Blazor tag)Yes (programmatic API, all environments)
Barcode reading / scanningNo - officially confirmedYes - images, PDFs, byte arrays
PDF barcode readingNoYes - native, no extra library
Standalone NuGet packageNo - DXperience suite requiredYes - IronBarcode only
Suite costFrom $1,099.99/yr (ASP.NET & Blazor) up to $2,299.99/yr (Universal)N/A - standalone
License costSubscription onlyPerpetual from $999
ASP.NET Core / minimal APIRequires WinForms workaroundsNative support
Azure FunctionsNot supported headlesslyFull support
Docker / LinuxGDI+ issues on Linux base imagesFull support
Console applicationsRequires WinForms assembly loadingNative support
QR code generationYes (via QRCodeGenerator symbology)Yes (QRCodeWriter)
QR with embedded logoNoYes - .AddBrandLogo()
QR error correction levelsH, Q, M, LHighest, High, Medium, Low
Code 128YesYes
Data MatrixYesYes
PDF417YesYes
AztecYesYes
File outputDrawToBitmap - manual Bitmap allocation.SaveAsPng(), .SaveAsGif(), .SaveAsSvg()
Binary output (HTTP response)Manual Bitmap → MemoryStream.ToPngBinaryData()
Multi-thread readingN/A - no readingMaxParallelThreads = 4
Multi-barcode readingN/A - no readingExpectMultipleBarcodes = true
PlatformsWindows (WinForms / Blazor)Windows, Linux, macOS, Docker, Azure, AWS Lambda
.NET version support.NET Framework + modern .NET (Windows).NET Framework 4.6.2 through current .NET

API Mapping Reference

Teams familiar with the DevExpress BarCodeControl pattern will find these equivalences useful:

DevExpress BarcodeIronBarcode
new BarCodeControl()Static - no instance needed
new Code128Generator() + barCode.Symbology = symbologyBarcodeEncoding.Code128 passed as parameter
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.HQRCodeWriter.CreateQrCode("data", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new PDF417Generator()BarcodeWriter.CreateBarcode("data", BarcodeEncoding.PDF417)
new AztecGenerator()BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Aztec)
barCode.Module = 0.02f (document units).ResizeTo(width, height) (pixels)
barCode.ShowText = true.AddBarcodeText()
DrawToBitmap(bitmap, rect) - manual Bitmap allocation.SaveAsPng(path) - handles sizing automatically
Manual BitmapMemoryStream for HTTP response.ToPngBinaryData()
No reading APIBarcodeReader.Read(imagePath)
No reading result type.Value (string), .Format (BarcodeEncoding)
UI assembly required in every projectWorks in any .NET project type
Suite-only (from $1,099.99/yr)Standalone (from $999 perpetual)

When Teams Switch

Several specific scenarios commonly trigger the move from DevExpress barcode controls to IronBarcode.

Reading requirement arrives. The most common scenario is a WinForms application that has been generating barcodes for years, and a new feature request arrives: the application must now scan or verify barcodes from uploaded images or camera captures. DevExpress has no reading API. The team needs a new library regardless, and it makes sense to consolidate generation onto that same library.

Need for a web API endpoint. A team builds a microservice that generates barcode labels on demand - called from a web frontend, a mobile app, or another service. The ASP.NET Core project has no WinForms dependency and the team does not want to add one. IronBarcode's static API integrates into an HTTP endpoint without any UI assembly baggage.

Azure Function or Lambda deployment. Serverless deployments often use Linux base images and minimal runtimes. BarCodeControl is not designed for this environment. IronBarcode runs on Linux, in Docker containers, in Azure Functions, and in AWS Lambda without configuration changes.

Suite renewal cost for a single feature. When renewal comes around and a team audits what they actually use from the DXperience suite, discovering that the only DevExpress component in a particular service is BarCodeControl creates a cost conversation. Paying a full DXperience subscription ($1,699.99/year new, $849.99/year on renewal) for barcode generation when a standalone library costs $999 perpetual is a hard argument to make.

Multi-barcode reading from PDFs. Document processing workflows - reading barcodes from invoice PDFs, shipping manifests, or scanned forms - require both PDF support and reading capability. IronBarcode reads directly from PDF files with no extra library. DevExpress provides neither capability.

Conclusion

DevExpress's barcode offering is best understood as a UI rendering feature bundled inside a UI toolkit. If your application is a WinForms or Blazor application that already uses DevExpress for its grid and chart controls, and your only barcode need is displaying a barcode visually on a form, the BarCodeControl is a reasonable choice - you already have the license.

The moment you need any of the following, BarCodeControl stops being the right tool: reading barcodes, generating barcodes in a server-side context, running in a headless environment, working on Linux, or operating without a WinForms assembly reference. DevExpress support has confirmed no reading functionality and no plans to add it. The headless limitation is architectural, not a configuration problem. A UI control is a UI control.

IronBarcode is built for programmatic barcode work - generation and reading through a static API, in any environment, on any platform. The two tools solve different problems. DevExpress barcode is for rendering inside a form. IronBarcode is for processing barcodes in code.

Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

Get your free 30-day Trial Key instantly.

Your trial license will be sent to your email address

No limitations. 100% unlocked. No credit card.

bullet_checkedNo credit card or account creation requiredNo limitations. 100% unlocked. No credit card.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Book your free Live Demo
Booking Badge

Trusted by Millions of Engineers Worldwide

Iron Software's customer logos
Get Your No-Obligation Consult
Complete the form below or email sales@ironsoftware.com
Your details will always be kept confidential.
Trusted by Millions of Engineers Worldwide
Iron Software's customer logos
Get your free 30-day Trial Key instantly.
No credit card or account creation required