Aspose.BarCode for .NET vs IronBarcode: Comparação de bibliotecas de código de barras em C#
Código de barras vs IronBarcode: Geração Multi-Pacote vs Geração e Leitura de Pacote Único
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, PDF417e 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 renderizador 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 antes que qualquer saída PNG seja possível: Barcoder para codificação e Barcoder.Renderer.Image para renderização. Se a saída SVG também for necessária, 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 necessários para saída PNG:
Barcoderpara codificação eBarcoder.Renderer.Imagepara renderização em formatos de imagem - Classes codificadoras específicas de formato: Cada tipo de código de barras tem seu próprio codificador em seu próprio namespace —
Code128Encoder,QrEncoder,DataMatrixEncoder, etc. 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 se desatualizar durante as atualizações de dependência
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:
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);
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 leva um bool para includeChecksum, QrEncoder.Encode leva um nível de correção de erro e dois bools adicionais, e DataMatrixEncoder.Encode leva 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ática 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 ao invés de classes específicas de formato ou namespaces.
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 toda a funcionalidade — geração, leitura, PDF, e todos os formatos de saída - Seleção de formato unificada: Todos os tipos de códigos de barras são tratados através dos valores enum
BarcodeEncoding; no format-specific imports or classes - Métodos de saída no objeto de resultado:
GeneratedBarcodeexpõeSaveAsPng,ToPngBinaryData,ToStream,SaveAsSvg, eResizeTodiretamente - Capacidade de leitura nativa:
BarcodeReader.Read()decodifica de arquivos de imagem, matrizes 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 Framework 4.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 — enum BarcodeEncoding |
| 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 — apenas fator de escala PixelSize |
Sim — .ResizeTo(width, height) |
| 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 — enum ReadingSpeed |
| Plataforma | ||
| .NET Core / .NET 5+ | Sim | Sim |
| .NET Framework | Renderizador de imagens inserido | .NET Framework 4.6.2+ |
| .NET 9 | Não documentado | 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 using IronBarCode |
| 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. Trocar formatos 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
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);
// QR Code
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);
// DataMatrix
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
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)
' DataMatrix
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 direciona toda a seleção de formato através do enum 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");
// QR — dedicated 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
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")
' QR — dedicated 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-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 abrir um FileStream. Obter dados binários requer 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:
// File output
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);
// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// File output
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);
// Binary data via MemoryStream
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO
' File output
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
.ImageFormat = ImageFormat.Png,
.PixelSize = 3,
.BarHeightFor1DBarcode = 80
})
Using stream = File.OpenWrite("barcode-large.png")
renderer.Render(barcode, stream)
End Using
' Binary data via MemoryStream
Using ms = 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 do qual qualquer forma de saída pode ser alcançada através 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) leva dimensões de pixels 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
O IronBarcode abrange 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, matrizes 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 natively
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 natively
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 natively
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 |
|---|---|
Code128Encoder.Encode("data", false) |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) |
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) |
QRCodeWriter.CreateQrCode("data", 500) |
DataMatrixEncoder.Encode("data") |
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix) |
new ImageRenderer(new ImageRendererOptions { ... }) |
Não é necessário — a saída é encadeada de GeneratedBarcode |
renderer.Render(barcode, stream) |
.SaveAsPng(path) / .ToPngBinaryData() / .ToStream() |
IBarcode (estrutura de dados, sem métodos de saída) |
GeneratedBarcode (tem SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, etc.) |
Barcoder + Barcoder.Renderer.Image (2 pacotes) |
IronBarcode (1 pacote) |
using Barcoder.Code128 |
using IronBarCode (namespace único, todos os formatos) |
using Barcoder.Qr |
using IronBarCode |
using Barcoder.DataMatrix |
using IronBarCode |
| Sem API de leitura | BarcodeReader.Read(path / bytes / stream / pdf) |
| Não há renderizador de imagens do .NET Framework. | .NET Framework 4.6.2+ |
PixelSize + opções BarHeightFor1DBarcode |
.ResizeTo(width, height) |
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 deixou de suportar .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. O IronBarcode é compatível com o.NET Framework4.6.2 até o.NET 9sem 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ência pode introduzir sutis incompatibilidades. 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 o IronBarcode relatam 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 IronBarcode, adicionar um formato é uma alteração no valor enum 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. A IronBarcode documenta 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 mudança de tipo IBarcode para GeneratedBarcode
O código do Código de barras que armazena uma variável IBarcode e a passa a um renderizador posteriormente deve ser refatorado. Não IronBarcode, GeneratedBarcode possui seus próprios métodos de saída — não há uma etapa de renderizador separada. Qualquer assinatura de método que atualmente aceita IBarcode deve mudar 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 de atualização durante a compilação — IBarcode não será resolvido após a remoção dos pacotes do Barcoder.
PixelSize Não Tem Equivalente Direto
O PixelSize do Código de barras é um multiplicador de escala no tamanho natural do módulo de código de barras, não uma dimensão de pixel explícita. A largura de saída depende do conteúdo do código de barras, do formato e do multiplicador em combinação.IronBarcode usa .ResizeTo(width, height) com dimensões de pixels explícitas. Durante a migração, meça as dimensões reais de saída que o código existente do Código de barras 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 do Código de barras acumulam declarações using Barcoder.* — uma por formato usado. Durante a migração, todas essas se colapsam em um único using IronBarCode;. Uma busca por using Barcoder por toda a solução identificará todos os arquivos que precisam de atualização. 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 usando Barcoder.Renderer.Svg e a classe SvgRenderer substituem o pipeline de renderizador por uma chamada direta de método 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 uma vez que todos os locais de renderização SVG tiverem sido migrados.
Funcionalidades adicionais do IronBarcode
Além dos pontos de comparação abordados acima, o IronBarcode inclui recursos para os quais o Código de barras não possui equivalente:
- Códigos QR com logos embutidos:
.AddBrandLogo(path)embute uma imagem de marca no centro do código QR sem quebrar 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 barra: a opção
ExpectMultipleBarcodeslê todos os códigos de barra de uma única imagem ou página de PDF em uma chamada - Controle de velocidade de leitura:
ReadingSpeed.Faster,Balanced,Detailed, eExtremeDetailajustam o equilíbrio 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 de código de barras: Personalização de cor, margem, texto de anotação e fundo em
GeneratedBarcode
Compatibilidade com .NET e Preparação para o Futuro
IronBarcode supports.NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8, and .NET 9, with regular updates. O Código de barras v3 retirou o suporte ao.NET Frameworkno pacote renderizador de imagem. Para equipes que precisam de uma janela de suporte longo, abrangendo.NET Frameworke alvos .NET modernos, a matriz de compatibilidade de pacote único do IronBarcode elimina a necessidade de gerenciar dependências condicionais por alvo.
Conclusão
Barcoder e IronBarcode refletem âmbitos fundamentalmente diferentes. Código de barras é uma biblioteca apenas de geração com uma separação principal entre codificação e renderização — a estrutura de dados IBarcode e o pipeline de renderizador 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 o IronBarcode trata 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.
O IronBarcode é 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()`.

