DevExpress Barcode vs IronBarcode: Comparação de bibliotecas de código de barras em C#
DevExpress é um kit de ferramentas de interface de usuário .NET muito conceituado. Os controles de grade, agendador, gráfico e tabela dinâmica são realmente excelentes e usados por milhares de equipes Enterprise . O suporte para código de barras, no entanto, é uma história diferente. A DevExpress fornece um BarCodeControl — um controle WinForms e uma tag Blazor DxBarCode — que permite renderizar um código de barras em um formulário em tempo de design. Quando a equipe de suporte foi questionada sobre o reconhecimento de código de barras, a resposta foi consistente: não existe essa funcionalidade e não há planos para adicioná-la. Se seus códigos de barras estiverem em uma tarefa em segundo plano, uma API da web, um documento PDF ou qualquer ambiente sem um formulário de interface do usuário, o controle não se aplica.
Essa restrição limita a oferta de código de barras da DevExpress a um nicho específico: renderizar um código de barras visualmente dentro de uma interface de usuário DevExpress WinForms ou Blazor . Para esse nicho específico, funciona bem. Para qualquer outra coisa — geração no servidor, leitura de imagens ou PDFs, processamento sem interface gráfica em Funções do Azure ou contêineres Docker — você precisa de uma ferramenta diferente.
Entendendo os controles de código de barras da DevExpress
A funcionalidade de código de barras do DevExpress reside em DevExpress.XtraBars.BarCode e namespaces de simbologia relacionados. Não se trata de uma biblioteca independente. Está incluído no Suite DXperience, que custa aproximadamente US$ 2.499 por ano. Não existe um pacote NuGet separado, exclusivo para códigos de barras, que você possa instalar.
O BarCodeControl é um controle WinForms que herda da hierarquia de controles. Você o configura com um objeto de simbologia, define as propriedades e ele é renderizado na tela. Salvar essa renderização em um arquivo requer a chamada de DrawToBitmap, que espera um Bitmap pré-alocado do tamanho correto:
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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();
// DevExpress WinForms: UI control, not a library
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
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()
Observe os vários pontos de atrito aqui. Primeiro, barCode.Module está em unidades de documento em vez de pixels, o que cria uma incompatibilidade se você estiver pensando em dimensões de pixel. Em segundo lugar, você deve saber o tamanho final em pixels antes de alocar o Bitmap. Em terceiro lugar, o controle exige que os assemblies do WinForms sejam carregados — o que significa que uma API mínima do ASP.NET Core ou um serviço em segundo plano do console deve carregar a infraestrutura do Windows Forms apenas para gerar uma imagem de código de barras.
A tag Blazor DxBarCode é conceitualmente semelhante, mas é um componente Razor para renderização de interface do usuário, não uma API de geração do lado do servidor.
Sem capacidade de leitura
A posição oficial da DevExpress é que eles não fornecem funcionalidade de reconhecimento ou digitalização de código de barras. Essa não é uma lacuna que será preenchida em uma versão futura — essa tem sido a resposta consistente há anos.
Para equipes que começam com um aplicativo DevExpress WinForms e posteriormente recebem a necessidade de escanear um código de barras de uma imagem carregada ou ler um código QR de um anexo PDF, o conjunto de ferramentas DevExpress não será suficiente. Será necessário utilizar uma biblioteca separada para lidar com a leitura, o que imediatamente levanta a questão de se a parte de geração também deve migrar para essa biblioteca para manter a consistência da API.
OIronBarcodelida com ambas as direções:
//IronBarcodereading — 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}");
}
//IronBarcodereading — 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}")
Next
A leitura de um arquivo PDF não requer nenhuma biblioteca adicional:
// 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}");
}
// 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}")
Next
A questão do pacote de Suite
Os componentes de código de barras da DevExpress não são vendidos como um produto independente. Para usar o BarCodeControl em qualquer projeto, sua equipe precisa de uma licença do pacote DXperience, que custa aproximadamente US$ 2.499 por ano por desenvolvedor. O Suite inclui o grid, o gráfico, o agendador, a tabela dinâmica e muitos outros controles — o que é razoável se você estiver criando um aplicativo completo DevExpress WinForms ou Blazor . Se você precisa apenas da geração de código de barras para um serviço de backend, estará pagando por um conjunto completo de ferramentas de interface do usuário que o serviço nunca utilizará.
IronBarcode é um pacote independente:
dotnet add package IronBarcode
dotnet add package IronBarcode
A licença Lite perpétua tem um preço inicial de US$ 749 para um desenvolvedor. Não há nenhum conjunto de ferramentas de interface do usuário incluído. Você obtém geração e leitura de códigos de barras, suporte multiplataforma e nada mais que você não tenha solicitado.
Limitação de uso em modo headless
O problema fundamental com BarCodeControl em cenários do lado do servidor é que se trata de um controle WinForms. Em um projeto de API mínima ASP.NET Core .NET 6+, os assemblies do WinForms não são referenciados por padrão. Para instanciar BarCodeControl, seu projeto de API deve ter como alvo o Windows explicitamente e carregar o runtime do Windows Forms, ou adicionar referências de solução alternativa que incluam infraestrutura de interface do usuário que sua API nunca renderizará.
Em um plano de consumo do Azure Functions, você não tem nenhuma camada de interface do usuário. Em um contêiner Docker executando uma imagem base do Linux, as dependências do GDI+ do Windows Forms podem estar completamente ausentes. A DevExpress não oferece suporte oficial ao uso de BarCodeControl nesses ambientes sem interface gráfica.
IronBarcode utiliza uma API estática e totalmente programática:
// 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");
// 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")
Essa chamada exata funciona em um aplicativo de console, um controlador ASP.NET Core , uma Função do Azure acionada por uma mensagem do Service Bus ou um contêiner Docker em execução no Linux. A API não muda entre ambientes. Não há dependência de montagem da interface do usuário.
Um endpoint ASP.NET Core que retorna um código de barras como um arquivo PNG de resposta tem a seguinte aparência:
app.MapGet("/barcode/{sku}", (string sku) =>
{
var bytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.ToPngBinaryData();
return Results.File(bytes, "image/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)
Não existe um padrão equivalente a BarCodeControl sem soluções alternativas significativas.
Entendendo o IronBarcode
IronBarcode é uma biblioteca .NET independente para gerar e ler códigos de barras. A API é totalmente estática — sem instâncias para gerenciar, sem controle de ciclo de vida, sem dependência de interface do usuário. A geração e a leitura funcionam na mesma chamada:
// 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
// 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
Imports 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
A ativação da licença é feita em uma única linha no processo de inicialização:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
Sem chamada de rede. Sem código padrão para tratamento de erros. Validação local.
Código QR lado a lado
Os códigos QR ilustram a lacuna de API entre um controle de interface do usuário e uma biblioteca programática.
Código QR DevExpress — controle WinForms:
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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();
// DevExpress: QR via BarCodeControl + QRCodeGenerator symbology
using DevExpress.XtraBars.BarCode;
using DevExpress.XtraBars.BarCode.Symbologies;
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.XtraBars.BarCode
Imports DevExpress.XtraBars.BarCode.Symbologies
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()
Código QRIronBarcode— mesmo resultado, sem necessidade de montagem de interface de usuário:
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qr.png");
// IronBarcode: QR in one method chain
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qr.png");
Adicionar o logotipo da marca ao centro do código QR:
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");
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("qr-branded.png")
A DevExpress não possui equivalente para logotipos incorporados. O controle exibe um código QR padrão e nada mais.
Comparação de recursos
| Recurso | Código de barras DevExpress | IronBarcode |
|---|---|---|
| Geração de código de barras | Sim (controle WinForms, tag Blazor ) | Sim (API programática, todos os ambientes) |
| Leitura/escaneamento de código de barras | Não — confirmado oficialmente | Sim — imagens, PDFs, matrizes de bytes |
| Leitura de código de barras em PDF | Não | Sim — nativo, sem biblioteca extra |
| Pacote NuGet independente | Não — é necessário o Suite DXperience. | Sim — IronBarcode apenas |
| Custo da Suite | Aproximadamente US$ 2.499+/ano ( Suite completo de interface do usuário) | N/A — independente |
| Custo da licença | Somente por assinatura | Perpétuo a partir de $749 |
| ASP.NET Core / API mínima | Requer soluções alternativas para WinForms. | Suporte nativo |
| Funções do Azure | Não é compatível com modo headless. | Suporte total |
| Docker / Linux | Problemas com GDI+ em imagens base do Linux | Suporte total |
| Aplicativos de console | Requer o carregamento do assembly WinForms. | Suporte nativo |
| Geração de código QR | Sim (via simbologia QRCodeGenerator) | Sim (QRCodeWriter) |
| QR Code com logotipo incorporado | Não | Sim — .AdicionarLogotipoDaMarca() |
| Níveis de correção de erros de QR Code | H, Q, M, L | Máximo, Alto, Médio, Baixo |
| Código 128 | Sim | Sim |
| Matriz de dados | Sim | Sim |
| PDF417 | Sim | Sim |
| asteca | Sim | Sim |
| Saída de arquivo | DrawToBitmap — alocação manual de Bitmap | .SalvarComoPng(), .SalvarComoGif(), .SalvarComoSvg() |
| Saída binária (resposta HTTP) | Bitmap manual → Fluxo de memória | .ToPngBinaryData() |
| Leitura multithread | N/A — sem leitura | MaxParallelThreads = 4 |
| Leitura de múltiplos códigos de barras | N/A — sem leitura | ExpectMultipleBarcodes = true |
| Plataformas | Windows (WinForms / Blazor) | Windows, Linux, macOS, Docker, Azure, AWS Lambda |
| Suporte à versão .NET | .NET Framework + .NET moderno (Windows) | .NET 4.6.2 até .NET 9 |
Referência de Mapeamento de API
Equipes familiarizadas com o padrão DevExpress BarCodeControl acharão estas equivalências úteis:
| Código de barras DevExpress | IronBarcode |
|---|---|
| @@--CÓDIGO-63879--@@ | Estático — nenhuma instância necessária |
| @@--CÓDIGO-63880--@@ + @@--CÓDIGO-63881--@@ | BarcodeEncoding.Code128 passado como parâmetro |
| @@--CÓDIGO-63883--@@ + @@--CÓDIGO-63884--@@ | @@--CÓDIGO-63885--@@ |
| @@--CÓDIGO-63886--@@ + @@--CÓDIGO-63887--@@ | @@--CÓDIGO-63888--@@ |
| @@--CÓDIGO-63889--@@ | @@--CÓDIGO-63890--@@ |
| @@--CÓDIGO-63891--@@ | @@--CÓDIGO-63892--@@ |
| @@--CÓDIGO-63893--@@ (unidades de documento) | @@--CÓDIGO-63894--@@ (pixels) |
| @@--CÓDIGO-63895--@@ | @@--CÓDIGO-63896--@@ |
DrawToBitmap(bitmap, rect) — alocação manual de Bitmap |
.SaveAsPng(path) — lida com o dimensionamento automaticamente |
Manual Bitmap → MemoryStream para resposta HTTP |
@@--CÓDIGO-63901--@@ |
| Sem API de leitura | @@--CÓDIGO-63902--@@ |
| @@--CÓDIGO-63903--@@ tipo | .Value (string), .Format (Codificação de código de barras) |
| A montagem da interface do usuário é necessária em todos os projetos. | Funciona em qualquer tipo de projeto .NET. |
| Somente suíte (a partir de US$ 2.499/ano) | Autônomo (a partir de US$ 749, licença perpétua) |
Quando as equipes trocam
Diversos cenários específicos costumam motivar a migração dos controles de código de barras DevExpress para o IronBarcode.
Chega um requisito de leitura. O cenário mais comum é o de um aplicativo WinForms que gera códigos de barras há anos e, de repente, surge uma nova solicitação de recurso: o aplicativo agora precisa escanear ou verificar códigos de barras a partir de imagens carregadas ou capturas de câmera. DevExpress não possui API de leitura. A equipe precisa de uma nova biblioteca de qualquer forma, e faz sentido consolidar a geração nessa mesma biblioteca.
Necessidade de um endpoint de API web. Uma equipe está desenvolvendo um microsserviço que gera etiquetas de código de barras sob demanda — acionadas por um frontend web, um aplicativo móvel ou outro serviço. O projeto ASP.NET Core não possui dependência do WinForms e a equipe não deseja adicionar uma. A API estática doIronBarcodese integra a um endpoint HTTP sem a necessidade de qualquer configuração adicional de interface de usuário.
Implantação do Azure Functions ou Lambda. Implantações sem servidor geralmente usam imagens base do Linux e tempos de execução mínimos. BarCodeControl não foi projetado para este ambiente. OIronBarcodefunciona no Linux, em contêineres Docker, no Azure Functions e no AWS Lambda sem necessidade de alterações de configuração.
Custo de renovação do pacote para um único recurso. Quando chega a hora da renovação e uma equipe audita o que realmente usa do pacote DXperience, descobrir que o único componente DevExpress em um serviço específico é o BarCodeControl gera uma discussão sobre custos. Pagar uma assinatura Suite para geração de códigos de barras quando uma biblioteca independente custa US$ 749 por uso perpétuo é um argumento difícil de sustentar.
Leitura de múltiplos códigos de barras em PDFs. Os fluxos de trabalho de processamento de documentos — como a leitura de códigos de barras em PDFs de faturas, manifestos de remessa ou formulários digitalizados — exigem suporte a PDF e capacidade de leitura. OIronBarcodelê diretamente arquivos PDF sem necessidade de bibliotecas adicionais. A DevExpress não oferece nenhuma dessas funcionalidades.
Conclusão
A solução de código de barras da DevExpress é melhor compreendida como um recurso de renderização de interface do usuário integrado a um kit de ferramentas de interface do usuário. Se sua aplicação for WinForms ou Blazor e já utilizar o DevExpress para seus controles de grade e gráfico, e sua única necessidade for exibir um código de barras visualmente em um formulário, o BarCodeControl é uma escolha razoável — você já possui a licença.
No momento em que você precisar de qualquer uma das seguintes funcionalidades, BarCodeControl deixa de ser a ferramenta adequada: leitura de códigos de barras, geração de códigos de barras em um contexto de servidor, execução em um ambiente sem interface gráfica, funcionamento no Linux ou operação sem uma referência de assembly WinForms. O suporte da DevExpress confirmou que não há funcionalidade de leitura e que não há planos para adicioná-la. A limitação do modo headless é arquitetônica, não um problema de configuração. Um controle de interface do usuário é um controle de interface do usuário.
OIronBarcodefoi desenvolvido para trabalho programático com códigos de barras — geração e leitura por meio de uma API estática, em qualquer ambiente e em qualquer plataforma. As duas ferramentas resolvem problemas diferentes. O código de barras DevExpress serve para ser renderizado dentro de um formulário.IronBarcodeserve para processar códigos de barras em código.
Perguntas frequentes
O que é o código de barras DevExpress?
DevExpress Barcode é uma biblioteca .NET para geração e leitura de códigos de barras em aplicações C#. É uma das diversas alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.
Quais são as principais diferenças entre o DevExpress Barcode e o IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o DevExpress Barcode normalmente exige a criação e configuração de instâncias antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.
O licenciamento do IronBarcode é mais fácil do que o do DevExpress Barcode?
O IronBarcode utiliza uma única chave de licença que abrange tanto o ambiente de desenvolvimento quanto o de produção. Isso simplifica os pipelines de CI/CD e as configurações do Docker em comparação com sistemas de licenciamento que separam as chaves do SDK das chaves de tempo de execução.
O IronBarcode é compatível com todos os formatos de código de barras suportados pelo DevExpress Barcode?
O IronBarcode suporta mais de 30 simbologias de código de barras, incluindo QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 e muitas outras. A detecção automática de formato significa que não é necessária a enumeração explícita de formatos.
O IronBarcode suporta leitura nativa de códigos de barras em PDF?
Sim. O IronBarcode lê códigos de barras diretamente de arquivos PDF usando BarcodeReader.Read("document.pdf") sem a necessidade de uma biblioteca de renderização de PDF separada. Os resultados por página incluem número da página, formato do código de barras, valor e nível de confiança.
Como o IronBarcode lida com o processamento em lote em comparação com o DevExpress Barcode?
Os métodos estáticos do IronBarcode são sem estado e naturalmente seguros para threads, permitindo o uso direto de Parallel.ForEach sem gerenciamento de instâncias por thread. Não há limite de throughput em nenhum plano de preços.
Quais versões do .NET o IronBarcode suporta?
O IronBarcode é compatível com o .NET Framework 4.6.2+, .NET Core 3.1 e .NET 5, 6, 7, 8 e 9 em um único pacote NuGet. As plataformas suportadas incluem Windows x64/x86, Linux x64 e macOS x64/ARM.
Como faço para instalar o IronBarcode em um projeto .NET?
Instale o IronBarcode via NuGet: execute 'Install-Package IronBarCode' no Console do Gerenciador de Pacotes ou 'dotnet add package IronBarCode' na CLI. Não são necessários instaladores de SDK ou arquivos de tempo de execução adicionais.
Posso avaliar o IronBarcode antes de comprar, ao contrário do DevExpress?
Sim. O modo de avaliação do IronBarcode retorna os valores completos dos códigos de barras decodificados — apenas as imagens de saída geradas recebem uma marca d'água. Você pode testar a precisão de leitura em seus próprios documentos antes de efetuar a compra.
Qual é a diferença de preço entre o DevExpress Barcode e o IronBarcode?
O IronBarcode tem um preço inicial de US$ 749 para uma licença perpétua de desenvolvedor único, que abrange desenvolvimento e produção. Detalhes sobre preços e opções de volume estão disponíveis na página de licenciamento do IronBarcode. Não há necessidade de uma licença de tempo de execução separada.
É simples migrar do DevExpress Barcode para o IronBarcode?
A migração do DevExpress Barcode para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias por métodos estáticos do IronBarcode, a remoção de código repetitivo de licenciamento e a atualização dos nomes das propriedades de resultado. A maioria das migrações consiste em reduzir o código em vez de adicioná-lo.
O IronBarcode gera códigos QR com logotipos?
Sim. O método `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` incorpora uma imagem da marca em um código QR nativamente, com correção de erros configurável. Códigos QR coloridos também são suportados através do método `ChangeBarCodeColor()`.

