Ir para o conteúdo do rodapé
COMPARAR COM OUTROS COMPONENTES

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: Barcoder para codificação e Barcoder.Renderer.Image para 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.
  • IBarcode nã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: Barcoder e Barcoder.Renderer.Image podem 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
SHELL

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
$vbLabelText   $csharpLabel

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: IronBarcode abrange 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: GeneratedBarcode expõe SaveAsPng, ToPngBinaryData, ToStream, SaveAsSvg e ResizeTo diretamente
  • 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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

.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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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:

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()`.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim