Barcoder vs IronBarcode: Comparação de bibliotecas de código de barras em C#
Para gerar um único PNG com o Barcoder, você instala dois pacotes, importa três namespaces, codifica com uma classe específica do formato, cria um renderizador com um objeto de opções, abre um fluxo, renderiza nele e descarta o fluxo. Esse é todo o caminho ideal — e abrange apenas a escrita. O Código de barras não possui nenhuma API de leitura. A licença MIT e a natureza de código aberto da biblioteca a tornam atraente à primeira vista, especialmente para equipes que tentam evitar dependências comerciais. Mas a arquitetura fragmentada — com no mínimo dois pacotes NuGet , uma classe de codificador diferente para cada formato de código de barras e um pipeline de renderização que mantém a codificação e a saída completamente separadas — cria atritos reais assim que os requisitos ultrapassam o cenário mais simples de geração de um único formato.
Entendendo o código de barras
Barcoder é uma biblioteca de código aberto para geração de códigos de barras em .NET , disponível no NuGet sob a licença MIT. Ele codifica dados em formatos de código de barras, incluindo Code128, QR, DataMatrix, EAN-13, PDF417 e outros. A filosofia de design separa completamente a codificação da renderização — a biblioteca principal produz um objeto IBarcode (uma estrutura de dados), e um pacote de renderização separado converte esse objeto em uma imagem.
As consequências práticas desse projeto são visíveis desde a primeira instalação. Dois pacotes NuGet são necessários para que qualquer saída PNG seja possível: Barcoder para codificação e Barcoder.Renderer.Image para renderização. Se também for necessária a saída em SVG, um terceiro pacote — Barcoder.Renderer.Svg — deve ser adicionado. Esses pacotes são versionados independentemente, o que significa que as atualizações de um não se alinham automaticamente com as do outro, e mantê-los sincronizados em todo o projeto torna-se uma tarefa de manutenção recorrente.
Principais características arquitetônicas do Barcoder:
- Dois pacotes NuGet são necessários para a saída em PNG:
Barcoderpara codificação eBarcoder.Renderer.Imagepara renderização em formatos de imagem. - Classes de codificadores específicos para cada formato: Cada tipo de código de barras possui seu próprio codificador em seu próprio namespace —
Code128Encoder,QrEncoder,DataMatrixEncoder, e assim por diante. IBarcodenão possui métodos de saída: O resultado da codificação é um objeto de dados simples. Um renderizador deve ser construído separadamente, um fluxo aberto, renderizado e fechado.- O suporte ao renderizador de imagens deixou de ser compatível com o.NET Framework: equipes que utilizam o.NET Frameworknão podem usar o pacote de renderização de imagens.
- Sem capacidade de leitura: o leitor de código de barras não consegue decodificar códigos de barras de imagens, arquivos ou qualquer outra fonte.
- Versionamento de pacotes independentes:
BarcodereBarcoder.Renderer.Imagepodem divergir durante atualizações de dependências.
Fluxo de trabalho de geração de múltiplos pacotes
O relato da instalação ilustra imediatamente a diferença de escopo. Com o Barcoder, a saída básica em PNG requer dois pacotes separados:
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
O fluxo de trabalho completo para gerar um código de barras Code128 e salvá-lo como PNG requer três importações de namespace, uma chamada de codificador específica do formato, a construção de um renderizador com um objeto de opções, um fluxo de arquivo e uma chamada de renderização:
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;
IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 2,
BarHeightFor1DBarcode = 50
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO
Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 2,
.BarHeightFor1DBarcode = 50
})
Using stream As FileStream = File.OpenWrite("barcode.png")
renderer.Render(barcode, stream)
End Using
A mudança de formato de código de barras não é uma simples alteração de parâmetros — requer a importação de um namespace diferente e a chamada de uma classe diferente. Code128Encoder.Encode aceita um booleano para includeChecksum, QrEncoder.Encode aceita um nível de correção de erros e dois booleanos adicionais, e DataMatrixEncoder.Encode aceita apenas a string. Não existe uma interface unificada para criar um código de barras em um formato específico.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial .NET para códigos de barras que abrange a geração e a leitura em um único pacote NuGet . Ele usa um modelo de API estático construído em torno de duas classes principais — BarcodeWriter para geração e BarcodeReader para leitura — e direciona toda a seleção de formato através do enum BarcodeEncoding em vez de através de classes ou namespaces específicos de formato.
A biblioteca foi projetada para minimizar a distância entre escrever a primeira linha de código de barras e obter um resultado funcional. Geração, leitura, suporte a PDF, códigos QR com logotipos incorporados e todos os tipos de saída estão incluídos em um único pacote com uma única versão para controle.
Principais características do IronBarcode:
- Pacote NuGet único:
IronBarcodeabrange todas as funcionalidades — geração, leitura, PDF e todos os formatos de saída. - Seleção de formato unificado: Todos os tipos de código de barras são endereçados por meio de valores de enumeração
BarcodeEncoding; sem importações ou classes específicas de formato - Métodos de saída no objeto de resultado:
GeneratedBarcodeexpõeSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvgeResizeTodiretamente - Capacidade de leitura nativa:
BarcodeReader.Read()decodifica arquivos de imagem, arrays de bytes, fluxos e PDFs sem uma biblioteca secundária. - Suporte para MAUI, Docker, AWS Lambda e Azure: Destinos de implantação documentados que vão além dos cenários padrão de desktop e servidor.
- Suporte completo ao.NET Frameworke versões modernas do .NET :.NET Framework4.6.2 até .NET 9
Comparação de recursos
| Recurso | Código de barras | IronBarcode |
|---|---|---|
| Pacotes NuGet necessários | 2 mínimos | 1 |
| Geração de código de barras | Sim | Sim |
| Leitura de código de barras | Não | Sim |
| Licença | MIT (código aberto) | Comercial |
| Suporte ao .NET Framework | Renderizador de imagens inserido | .NET Framework4.6.2+ |
| Leitura de PDF | Não | Sim |
| QR com logotipo | Não | Sim |
Comparação Detalhada de Recursos
| Recurso | Código de barras | IronBarcode |
|---|---|---|
| Geração | ||
| Geração Code128 | Sim | Sim |
| Geração de código QR | Sim | Sim |
| Geração de DataMatrix | Sim | Sim |
| EAN-13, PDF417 | Sim | Sim |
| QR Code com logotipo incorporado | Não | Sim — .AddBrandLogo(path) |
| Formato selecionado via enumeração | Não — uma classe de codificador separada por formato. | Sim — BarcodeEncoding enum |
| Saída | ||
| Saída PNG | Sim (via Barcoder.Renderer.Image) | Sim — .SaveAsPng() |
| Saída SVG | Sim (via Barcoder.Renderer.Svg) | Sim — .SaveAsSvg() |
| Saída de dados binários | Sim (via MemoryStream) | Sim — .ToPngBinaryData() |
| Saída de fluxo | Sim (gestão manual de fluxos) | Sim — .ToStream() |
| API de redimensionamento direto | Não — PixelSize apenas fator de escala |
Sim — @@--CÓDIGO-63685--@@ |
| Leitura | ||
| Ler a partir de um arquivo de imagem | Não | Sim |
| Leia a partir do PDF | Não | Sim |
| Leia a partir do fluxo | Não | Sim |
| Detecção de múltiplos códigos de barras | Não | Sim — ExpectMultipleBarcodes |
| Controle de velocidade de leitura | Não | Sim — ReadingSpeed enum |
| Plataforma | ||
| .NET Core / .NET 5+ | Sim | Sim |
| .NET Framework | Renderizador de imagens inserido | .NET Framework4.6.2+ |
| .NET 9 | Atividade pouco clara/limitada | Sim |
| MAUI (iOS, Android, Windows, macOS) | Não | Sim |
| Docker / Azure / AWS Lambda | Não documentado | Sim |
| Embalagem | ||
| risco de versionamento de pacotes independentes | Sim | Não — pacote único |
| Espaço de nomes por formato | Sim | Não — único @@--CÓDIGO-63679--@@ |
| Licenciamento | ||
| Modelo de licença | MIT (código aberto) | Comercial |
| Preços | Livre | Lite $749, Plus $1.499, Professional $2.999, Unlimited $5.999 |
API de seleção e geração de formatos
A escolha de como a seleção do formato do código de barras é estruturada tem efeitos subsequentes em todas as partes de um código-fonte que gera códigos de barras.
Abordagem do código de barras
O Código de barras encaminha a seleção de formato por meio de classes de codificadores separadas em namespaces distintos. A mudança de formato significa adicionar uma nova diretiva using e usar uma classe diferente com uma assinatura de método diferente:
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix
' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)
' QR Code — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix — different namespace, different class again
barcode = DataMatrixEncoder.Encode("data")
Cada codificador possui seu próprio contrato de parâmetros. Adicionar um novo formato a um projeto existente não é uma mudança de uma palavra só — é uma nova importação de namespace, uma nova classe para aprender e novos parâmetros para entender.
Abordagem do IronBarcode
IronBarcode encaminha toda a seleção de formato através da enumeração BarcodeEncoding na classe unificada BarcodeWriter. Adicionar um novo formato consiste em alterar o valor da enumeração em apenas uma palavra:
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");
// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");
// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("qr-branded.png");
Imports IronBarCode
' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")
' DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")
' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("qr-branded.png")
Para uso em produção, adicione a chave de licença na inicialização do aplicativo:
IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-KEY"
A documentação de geração de códigos de barras do IronBarcode abrange toda a gama de opções de geração, incluindo estilo, margens e personalização de cores.
Opções de renderização e saída
Converter a saída do código de barras em diferentes formatos — um arquivo, dados binários, um fluxo — é um requisito comum que cada biblioteca aborda de maneira muito diferente.
Abordagem do código de barras
A separação entre codificação e renderização no Código de barras é fundamentada em sua arquitetura, mas gera sobrecarga a cada mudança de formato de saída. Salvar em um arquivo requer a abertura de um FileStream. Para obter dados binários, é necessário abrir um MemoryStream e chamar ToArray(). Cada cenário de saída requer a construção de um renderizador com um objeto de opções:
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
ImageFormat = ImageFormat.Png,
PixelSize = 3,
BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);
// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream As FileStream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
renderer.Render(barcode, ms)
Dim pngBytes As Byte() = ms.ToArray()
End Using
O controle de tamanho é indireto: PixelSize é um multiplicador de escala no tamanho do módulo de código de barras, não uma especificação direta de largura e altura.
Abordagem do IronBarcode
IronBarcode retorna um objeto GeneratedBarcode a partir do qual qualquer formulário de saída pode ser obtido por meio de chamadas de método encadeadas. Sem construção de renderizador, sem gerenciamento de fluxo:
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;
var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100);
// File
barcode.SaveAsPng("barcode.png");
// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();
// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode
Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100)
' File
barcode.SaveAsPng("barcode.png")
' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()
' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
.ResizeTo(width, height) recebe dimensões de pixel explícitas e encadeia com qualquer método de saída no mesmo objeto.
Leitura de códigos de barras
A ausência de uma API de leitura no Código de barras é uma limitação arquitetônica rígida, não uma escolha de configuração.
Abordagem do código de barras
O leitor de código de barras não possui capacidade de leitura ou decodificação. Não existe API, nem API planejada, e nenhuma solução alternativa dentro da biblioteca. Se um aplicativo precisar ler códigos de barras, uma segunda biblioteca — uma dependência NuGet separada com sua própria API e versão a ser controlada — deverá ser adicionada juntamente com o Barcoder. Isso significa, no mínimo, duas dependências relacionadas à leitura: um leitor de código de barras para geração e outro componente para leitura.
Abordagem do IronBarcode
OIronBarcodeabrange tanto a geração quanto a leitura de códigos de barras, com o mesmo pacote e padrões de API consistentes. O método BarcodeReader.Read() aceita arquivos de imagem, arrays de bytes, fluxos e PDFs nativamente:
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Leia a partir do PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;
// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine(result.Value);
Console.WriteLine(result.Format);
}
// Leia a partir do PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");
// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode
' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine(result.Value)
Console.WriteLine(result.Format)
Next
' Leia a partir do PDF — no conversion step, no extra dependency
Dim pdfResults = BarcodeReader.Read("document.pdf")
' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
A leitura de PDFs é nativa — sem extração intermediária de imagens, sem biblioteca de conversão, sem pacote adicional. A documentação de leitura de código de barras do IronBarcode abrange PDFs com várias páginas, leitura de regiões de interesse e otimização de desempenho.
Referência de Mapeamento de API
| Código de barras | IronBarcode |
|---|---|
| @@--CÓDIGO-63656--@@ | @@--CÓDIGO-63657--@@ |
| @@--CÓDIGO-63658--@@ | @@--CÓDIGO-63659--@@ |
| @@--CÓDIGO-63660--@@ | @@--CÓDIGO-63661--@@ |
new ImageRenderer(new ImageRendererOptions { ... }) |
Não é necessário — a saída é encadeada a partir de GeneratedBarcode |
| @@--CÓDIGO-63663--@@ | @@--CÓDIGO-63664--@@ / @@--CÓDIGO-63665--@@ / @@--CÓDIGO-63666--@@ |
IBarcode (estrutura de dados, sem métodos de saída) |
GeneratedBarcode (possui SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, etc.) |
Barcoder + Barcoder.Renderer.Image (2 pacotes) |
@@--CÓDIGO-63675--@@ (1 pacote) |
| @@--CÓDIGO-63676--@@ | @@--CÓDIGO-63679--@@ (espaço de nomes único, todos os formatos) |
| @@--CÓDIGO-63678--@@ | @@--CÓDIGO-63679--@@ |
| @@--CÓDIGO-63680--@@ | @@--CÓDIGO-63679--@@ |
| Sem API de leitura | @@--CÓDIGO-63682--@@ |
| Não há renderizador de imagens do .NET Framework. | .NET Framework4.6.2+ |
PixelSize + BarHeightFor1DBarcode opções |
@@--CÓDIGO-63685--@@ |
Quando as equipes consideram migrar do Código de barras para o IronBarcode
A leitura foi adicionada aos requisitos.
Muitos projetos começam como fluxos de trabalho puramente de geração — imprimir etiquetas, gerar códigos para documentos, incorporar códigos de barras em relatórios. O Código de barras atende a esses projetos desde o início. Quando a mesma aplicação precisa posteriormente verificar códigos de barras recebidos, processar documentos digitalizados ou decodificar códigos de barras de PDFs carregados, o Código de barras não oferece uma solução. A equipe deve avaliar uma segunda biblioteca, aprender sua API, gerenciar sua versão NuGet separadamente e lidar com a superfície de integração entre as duas bibliotecas. As equipes que chegam a esse ponto geralmente consolidam suas operações em uma biblioteca que lida com ambos os lados, em vez de manter duas dependências de código de barras separadas.
Quebra de compatibilidade com o .NET Framework
Barcoder.Renderer.Image removeu o suporte ao .NET Framework. Equipes que mantêm serviços ou aplicativos de desktop no.NET Framework4.x e que atualizam o pacote de renderização de imagens durante a manutenção rotineira de dependências encontram uma falha na compilação. Isso não é uma configuração incorreta — é uma decisão da biblioteca relacionada ao suporte da plataforma. OIronBarcodeé compatível com o.NET Framework4.6.2 até o .NET 9 sem necessidade de empacotamento especial ou dependências condicionais para diferentes plataformas.
A diferença entre versões de pacotes cria problemas de coordenação.
Com Barcoder e Barcoder.Renderer.Image versionados independentemente, atualizar um sem o outro durante uma atualização de dependências pode introduzir incompatibilidades sutis. Em um repositório com múltiplos projetos — cada um consumindo uma versão diferente de cada pacote de renderização — garantir um comportamento consistente entre os projetos torna-se um problema de coordenação que cresce com o tamanho da equipe. Equipes que adotaram oIronBarcoderelatam que gerenciar um único pacote e uma única versão elimina completamente esse tipo de problema.
A cobertura de formatos se expande ao longo do tempo.
Um projeto pode começar com etiquetas Code128 e, posteriormente, adicionar códigos QR para links voltados para o cliente e, em seguida, DataMatrix para requisitos de conformidade. Com o Barcoder, cada adição de formato significa uma nova importação de namespace, uma classe de codificador diferente com parâmetros de método diferentes e, potencialmente, um novo pacote NuGet . Com o IronBarcode, adicionar um formato é uma alteração no valor da enumeração BarcodeEncoding em uma chamada existente. Equipes com planos que incluem a expansão da cobertura de formatos de código de barras consideram o modelo baseado em enumerações significativamente mais fácil de manter.
Requisitos de implantação MAUI e multiplataforma
O Código de barras não documenta suporte para implantações em MAUI, Docker, AWS Lambda ou Azure. Equipes que desenvolvem aplicativos MAUI multiplataforma ou implementam processamento de código de barras em infraestrutura sem servidor descobrem que a documentação e os testes do Código de barras não abrangem esses objetivos. AIronBarcodedocumenta e testa ativamente a implementação em dispositivos iOS, Android, Windows, macOS (MAUI), contêineres Docker e nas principais plataformas de nuvem.
Considerações Comuns de Migração
A alteração do tipo IBarcode para GeneratedBarcode
O código do leitor de código de barras que armazena uma variável IBarcode e a passa para um renderizador posteriormente precisa ser refatorado. Em IronBarcode, GeneratedBarcode possui seus próprios métodos de saída — não há uma etapa de renderização separada. Qualquer assinatura de método que atualmente aceite IBarcode deve ser alterada para aceitar GeneratedBarcode, e a chamada de renderização dentro desse método deve se tornar uma chamada direta como .SaveAsPng() ou .ToPngBinaryData(). O sistema de tipos revelará todos os locais que precisam ser atualizados durante a compilação — IBarcode não será resolvido após a remoção dos pacotes Barcoder.
PixelSize Não possui equivalente direto
O código PixelSize do leitor de código de barras é um multiplicador de escala no tamanho do módulo natural do código de barras, e não uma dimensão explícita em pixels. A largura de saída depende do conteúdo do código de barras, do formato e do multiplicador em combinação.IronBarcodeusa @@--CÓDIGO-63685--@@ com dimensões de pixel explícitas. Durante a migração, meça as dimensões reais de saída que o código Código de barras existente produz e use esses valores na chamada .ResizeTo():
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ResizeTo(300, 80)
.SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ResizeTo(300, 80) _
.SaveAsPng("barcode.png")
Consolidação de Namespaces
Os projetos de código de barras acumulam declarações using Barcoder.* — uma por formato usado. Durante a migração, todos estes se condensam em um único using IronBarCode;. Uma busca por using Barcoder em toda a solução identificará todos os arquivos que precisam ser atualizados. O número de arquivos afetados costuma ser maior do que as equipes esperam, porque cada arquivo que utiliza um formato de código de barras importa seu próprio namespace específico do formato.
Alterações no caminho de saída SVG
Projetos que utilizam Barcoder.Renderer.Svg e a classe SvgRenderer substituem o pipeline de renderização por uma chamada de método direta em GeneratedBarcode:
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.SaveAsSvg("barcode.svg");
Imports System.IO
' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
svgRenderer.Render(barcode, stream)
End Using
' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.SaveAsSvg("barcode.svg")
O pacote Barcoder.Renderer.Svg pode ser removido assim que todos os sites de renderização SVG forem migrados.
Funcionalidades adicionais do IronBarcode
Além dos pontos de comparação abordados acima, oIronBarcodeinclui recursos para os quais o Código de barras não possui equivalente:
- Códigos QR com logotipos incorporados :
.AddBrandLogo(path)incorpora a imagem da marca no centro do código QR sem comprometer a legibilidade. Leitura nativa de código de barras em PDF :BarcodeReader.Read("document.pdf")processa PDFs diretamente, sem extrair imagens primeiro. -Detecção de múltiplos códigos de barras : a opçãoExpectMultipleBarcodeslê todos os códigos de barras de uma única imagem ou página PDF em uma única chamada. - Controle de velocidade de leitura :
ReadingSpeed.Balanced,FastereSlowerajustam a relação entre precisão e velocidade para diferentes casos de uso. - Implantação multiplataforma do MAUI : iOS, Android, Windows e macOS. Os alvos do MAUI são testados ativamente e documentados.
- Docker e implantação na nuvem : Caminhos de implantação documentados para contêineres Docker, AWS Lambda e Azure Functions
- Estilização e personalização do código de barras : personalização de cor, margem, texto de anotação e plano de fundo em
GeneratedBarcode
Compatibilidade com .NET e Preparação para o Futuro
OIronBarcodeé compatível com.NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 e .NET 9. O desenvolvimento ativo continua com atualizações regulares, e a compatibilidade com o .NET 10 (prevista para o final de 2026) faz parte do roteiro publicado. O renderizador de imagens do Código de barras deixou de oferecer suporte ao.NET Framework, e a atividade no repositório tem sido limitada nas versões recentes, deixando incerto o status de compatibilidade da biblioteca com o .NET 9 e versões futuras. Para equipes que precisam de um longo período de suporte e compatibilidade previsível com as próximas versões do .NET , o ritmo ativo de lançamentos doIronBarcodeoferece maior segurança.
Conclusão
Barcoder eIronBarcoderefletem escopos fundamentalmente diferentes. Código de barras é uma biblioteca somente de geração com uma separação clara entre codificação e renderização — a estrutura de dados IBarcode e o pipeline de renderização são camadas distintas por design.IronBarcodeé uma biblioteca completa de códigos de barras onde a geração e a leitura compartilham um único pacote, um único namespace e uma API estática consistente. A diferença arquitetônica torna-se mais visível quando os requisitos aumentam: o design multi-pacote, multi-namespace e sem leitura do Código de barras faz com que cada adição seja uma tarefa estrutural, enquanto oIronBarcodetrata novas adições de formato ou capacidade como alterações de configuração.
O Código de barras é a escolha certa quando um projeto realmente precisa apenas de geração de códigos de barras, é voltado exclusivamente para o .NET Core , usará um número reduzido de formatos de código de barras e a licença MIT é um requisito indispensável. A biblioteca funciona conforme documentado dentro desses limites, e para projetos com escopo restrito, sem requisitos de leitura e sem suporte ao.NET Framework, a opção de código aberto e custo zero é razoável.
OIronBarcodeé a escolha certa quando um projeto precisa tanto de leitura quanto de geração de códigos de barras, é voltado para o.NET Frameworkou para implantações MAUI multiplataforma, prevê a adição de formatos de código de barras ao longo do tempo ou requer implantação em ambientes Docker ou em nuvem. O modelo de pacote único e a seleção de formato baseada em enumeração eliminam a sobrecarga que se acumula com o Código de barras à medida que o escopo do projeto aumenta.
A decisão prática se resume à trajetória. Um projeto que certamente permanecerá um gerador simples de formato único, sem requisitos de leitura, pode ser bem atendido pelo Barcoder. Um projeto com qualquer ambiguidade em seus requisitos de código de barras — adição de formatos, adição de leitura, implantação multiplataforma — encontrará os limites arquitetônicos do Código de barras mais cedo do que o esperado. Ambas as bibliotecas são ferramentas honestas; A questão é qual delas corresponde ao escopo real do trabalho.
Perguntas frequentes
O que é um Barcoder?
Barcoder é uma biblioteca .NET para gerar e ler códigos de barras em aplicações C#. É uma das várias 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 Barcoder e IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o Barcoder normalmente exige a criação e configuração de uma instância 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 IronBarcode é mais fácil de licenciar do que o Barcoder?
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 que o Barcoder suporta?
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 Barcoder?
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 Barcoder?
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 Barcoder e 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 Barcoder para o IronBarcode?
A migração do Barcoder 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 relacionado a 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()`.

