Comparação entre as bibliotecas de código de barras LEADTOOLS Barcode e IronBarcode em C#
NetBarcodevs IronBarcode: Comparando Geração Exclusiva de 1D Contra um Kit Completo de Códigos de Barras
O enum Type doNetBarcodenão tem entrada de QR Code. Quando um projeto de etiqueta de envio adiciona um requisito de código QR no terceiro mês, os desenvolvedores recorrem a uma segunda biblioteca. Essa segunda biblioteca traz sua própria interface de API, seu próprio cronograma de lançamentos e uma dependência compartilhada do SixLabors.ImageSharp, cuja versão pode ficar desalinhada com a versão já exigida pelo NetBarcode. Esta comparação examina o que é o NetBarcode, onde ele se encaixa bem e onde o IronBarcode preenche as lacunas sem adicionar um segundo ou terceiro pacote.
Entendendo o NetBarcode
NetBarcode é uma biblioteca de código aberto para geração de códigos de barras em .NET , publicada sob a licença MIT. Foi desenvolvido para produzir imagens de código de barras lineares a partir de dados de texto, e cumpre essa função com perfeição. A biblioteca tem como alvo Code128, EAN-13, Code39, e alguns outros formatos 1D — todos expostos através de um construtor simples e um pequeno conjunto de métodos de saída. Sua dependência do SixLabors.ImageSharp fornece a camada de renderização de imagem, e desde a versão 1.8 essa dependência está refletida na API pública através do tipo de retorno Image<Rgba32> no GetImage().
ONetBarcodenão pretende ser um conjunto de ferramentas de código de barras de uso geral. Não possui capacidade de leitura nem suporte para formato 2D. Essas são decisões de escopo deliberadas. A biblioteca é ideal para aplicações que necessitam apenas de códigos de barras 1D, e sua licençaMITfacilita a adoção em contextos de código aberto.
Principais características arquitetônicas:
- Licença MIT: A biblioteca em si possui licença MIT, embora sua dependência SixLabors.ImageSharp tenha uma licença comercial dividida que se aplica a partir de um determinado limite de receita.
- Design Somente 1D: O enum
Typedefine 11 valores em 8 famílias de simbologia linear; não há entradas 2D, e também não UPC-A, UPC-E, ITF, ou MSI - Dependência do SixLabors.ImageSharp: A renderização de imagem é delegada ao ImageSharp, e desde a v1.8, o método
GetImage()retornaImage<Rgba32>, expondo o tipo do ImageSharp diretamente na API pública - API Baseada em Construtor: Códigos de barras são criados com
new Barcode(data, Type.X)e salvos ou recuperados comSaveImageFile()ouGetImage() - Sem API de leitura:NetBarcodeé apenas para geração; Não existe nenhum método ou classe para decodificar imagens de código de barras.
- Sem processamento em lote: cada código de barras é uma chamada de construtor independente; no built-in enumeration or batch pipeline
O Limite de Projeto do Enum Tipo
O enum Type é a lista autoritativa do que oNetBarcodepode gerar. Ao inspecioná-la, revela-se a abrangência da biblioteca:
//NetBarcodeType enum — complete list as of v1.8
public enum Type
{
Codabar,
Code11,
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39E,
Code93,
EAN13,
EAN8
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
// Type.UPCA — does not exist
// Type.UPCE — does not exist
// Type.ITF — does not exist
// Type.MSI — does not exist
//NetBarcodeType enum — complete list as of v1.8
public enum Type
{
Codabar,
Code11,
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39E,
Code93,
EAN13,
EAN8
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
// Type.UPCA — does not exist
// Type.UPCE — does not exist
// Type.ITF — does not exist
// Type.MSI — does not exist
Public Enum Type
Codabar
Code11
Code128
Code128A
Code128B
Code128C
Code39
Code39E
Code93
EAN13
EAN8
End Enum
' These entries do not exist — attempting to use them produces a BC30456 compile error:
' Type.QRCode — does not exist
' Type.DataMatrix — does not exist
' Type.PDF417 — does not exist
' Type.Aztec — does not exist
' Type.UPCA — does not exist
' Type.UPCE — does not exist
' Type.ITF — does not exist
' Type.MSI — does not exist
O enum tem onze entradas em oito famílias de simbologias lineares, e isso reflete o escopo pretendido da biblioteca. Qualquer aplicação que requeira códigos QR, DataMatrix, PDF417, Aztec, UPC-A, UPC-E, ITF, ou MSI deve obter um pacote separado para fornecer esses formatos.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial .NET para códigos de barras que abrange tanto a geração quanto a leitura em um único pacote. É desenvolvido e mantido pela Iron Software , com atualizações regulares para as versões atuais do .NET . A superfície da API da biblioteca é projetada para que mudar de um formato de código de barras para outro exija apenas a troca de uma única constante — a mesma chamada BarcodeWriter.CreateBarcode que gera Code128 também gera QR codes, DataMatrix,PDF417e Aztec.
IronBarcode lida com a leitura de códigos de barras através da classe BarcodeReader, que aceita arquivos de imagem e documentos PDF e retorna resultados decodificados com identificação de formato. Isso significa que a geração e a leitura compartilham uma única dependência, uma única licença e um único conjunto de notas de versão para rastreamento.
Principais características:
- Geração e Leitura Unificadas: Ambos
BarcodeWritereBarcodeReaderestão incluídos em um único pacote NuGet - Mais de 50 formatos suportados: os formatos 1D incluem todos os equivalentes em NetBarcode; Os formatos 2D incluem QR Code, DataMatrix, PDF417, asteca e outros.
- API de Cadeia Fluente:
BarcodeWriter.CreateBarcode(data, encoding)retorna um objetoGeneratedBarcodecom métodos de saída incluindoSaveAsPng(),SaveAsJpeg(),ToPngBinaryData()e sobrecargas baseadas em stream - Sem dependência do ImageSharp: a renderização de imagens do IronBarcode é independente; Não é introduzida nenhuma dependência transitiva SixLabors.
- Suporte a PDF: A API de leitura aceita arquivos
.pdfdiretamente além dos formatos de imagem - Licença comercial: É necessária uma chave de licença; O modo de avaliação está disponível e remove as marcas d'água após a compra.
Comparação de recursos
| Recurso | NetBarcode | IronBarcode |
|---|---|---|
| Geração de código de barras 1D | Sim | Sim |
| Geração de código de barras 2D | Não | Sim |
| Leitura de código de barras | Não | Sim |
| Suporte a PDF | Não | Sim |
| Simbologias totais | 11 valores enum / 8 famílias | 50+ |
| Dependência do ImageSharp | Sim (licença dividida) | Não |
| Modelo de licença | MIT(+ condições ImageSharp) | Comercial |
Comparação Detalhada de Recursos
| Recurso | NetBarcode | IronBarcode |
|---|---|---|
| Geração | ||
| Code128 (plus 128A/B/C), Code39, Code39 Extended, Code93, Code11 | Sim | Sim |
| EAN-13, EAN-8, Codabar | Sim | Sim |
| UPC-A, UPC-E, ITF, MSI | Não | Sim |
| Código QR | Não | Sim |
| DataMatrix | Não | Sim |
| PDF417 | Não | Sim |
| asteca | Não | Sim |
| GS1-128, GS1 DataBar | Não | Sim |
| Formatos postais (Intelligent Mail, Royal Mail) | Não | Sim |
| Saída SVG | Não | Sim |
| Leitura | ||
| Decodificar imagens de código de barras | Não | Sim |
| Leia documentos em PDF | Não | Sim |
| Detecção de múltiplos códigos de barras | Não | Sim |
| Detecção automática de formato | Não | Sim |
| Design de API | ||
| Criação baseada em construtores | Sim | Não (método estático) |
| Cadeia de saída fluente | Não | Sim |
| Suporte ao processamento em lote | Manual | Embutido |
| Licenciamento e Dependências | ||
| Licença da biblioteca | MIT | Comercial |
| Dependência do ImageSharp | Sim | Não |
| Suporte comercial | Comunidade | Professional |
Cobertura de Formato
Abordagem NetBarcode
NetBarcode fornece 11 valores de enumeração de código de barras linear em 8 famílias de simbologia através do enum Type. Nesse contexto, a seleção do formato é simples — basta passar o membro de enumeração apropriado para o construtor. O limite é igualmente claro: tentar usar um formato fora do enum produz um erro de compilação.
//NetBarcode— formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
//NetBarcode— formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
// var upca = new Barcode("data", Type.UPCA); // error CS0117
// var itf = new Barcode("data", Type.ITF); // error CS0117
//NetBarcode— formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
//NetBarcode— formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
// var upca = new Barcode("data", Type.UPCA); // error CS0117
// var itf = new Barcode("data", Type.ITF); // error CS0117
Imports NetBarcode
Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")
Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")
'NetBarcode— formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode) ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417) ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec) ' error CS0117
' Dim upca As New Barcode("data", Type.UPCA) ' error CS0117
' Dim itf As New Barcode("data", Type.ITF) ' error CS0117
Em setores onde essa limitação se torna um problema, incluem-se o rastreamento de produtos farmacêuticos (DataMatrix exigido pelas normas de código de barras 2D da FDA), cartões de embarque de companhias aéreas (Aztec), manifestos logísticos (PDF417) e marketing móvel (código QR). Cada um desses requisitos elimina oNetBarcodecomo uma solução independente.
Abordagem do IronBarcode
IronBarcode expõe todos os formatos suportados através do mesmo método BarcodeWriter.CreateBarcode. A superfície da API não muda ao passar de um formato 1D para um formato 2D — apenas a constante BarcodeEncoding difere.
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
Imports IronBarCode
' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("shipping.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product.png")
' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-label.png")
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
.SaveAsPng("boarding-pass.png")
A lista completa de constantes suportadas está disponível na referência de formatos de código de barras suportados , abrangendo todos os formatos de geração de código de barras 2D, além do conjunto completo de códigos de barras 1D.
Design de API de geração
Abordagem NetBarcode
O modelo de geração doNetBarcodeé baseado em construtores. Um objeto Barcode é instanciado com a string de dados e um valor enum Type. A saída é salva diretamente com SaveImageFile() ou recuperada como Image<Rgba32> via GetImage(). Desde a versão 1.8, o tipo de retorno de GetImage() é do tipo SixLabors.ImageSharp, o que significa que qualquer código que armazena ou processa o valor de retorno deve importar e trabalhar dentro da API do ImageSharp.
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO
' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)
' Save to file — straightforward
barcode.SaveImageFile("code128.png")
' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()
' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
image.SaveAsPng(stream)
Dim bytes As Byte() = stream.ToArray()
End Using
O tipo de retorno do método GetImage() vincula o código a jusante à biblioteca ImageSharp. Qualquer método que aceite ou armazene o resultado deve declará-lo como Image<Rgba32>, introduzindo uma dependência transitiva no código chamador.
Abordagem do IronBarcode
IronBarcode utiliza uma cadeia fluente. BarcodeWriter.CreateBarcode retorna um objeto GeneratedBarcode que transporta múltiplos métodos de saída. O processamento de imagens é interno — nenhum tipo ImageSharp é exposto ao código que faz a chamada.
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode
' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("code128.png")
' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()
Using stream As New MemoryStream()
barcode.SaveAsPng(stream)
End Using
As opções detalhadas para geração de códigos de barras 1D, incluindo largura, altura e configuração de etiquetas, são abordadas na documentação do IronBarcode.
Capacidade de leitura
Abordagem NetBarcode
ONetBarcodenão possui API de leitura. Não existe nenhum método, classe ou configuração que decodifique uma imagem de código de barras de volta para sua sequência de dados. Este é um limite de escopo deliberado, não uma omissão que se aguarda um lançamento. Um projeto que gera códigos de barras com oNetBarcodee posteriormente precisa lê-los — para validar uma etiqueta impressa, escanear uma remessa de devolução ou extrair valores de uma fatura de fornecedor — deve introduzir uma biblioteca separada para essa finalidade.
//NetBarcode— no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
//NetBarcode— no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
'NetBarcode— no reading method exists
' The following does not compile because the method does not exist:
' Dim result = barcode.Read("image.png") ' method does not exist
' The typical workaround requires ZXing.Net as a third-party dependency
A biblioteca ZXing .NET é o complemento mais comum para leitura em conjunto com o NetBarcode, trazendo uma terceira interface de API e um terceiro pacote para gerenciar versões, além doNetBarcodee de qualquer biblioteca 2D já adicionada para códigos QR.
Abordagem do IronBarcode
IronBarcode inclui BarcodeReader no mesmo pacote que BarcodeWriter. A API de leitura aceita arquivos de imagem e documentos PDF e retorna uma coleção de resultados decodificados, cada um com o valor do código de barras, o tipo de formato e o número da página, caso a leitura seja feita a partir de um PDF.
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode
' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
Console.WriteLine($"{r.Format}: {r.Value}")
Next
' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
O guia de leitura de códigos de barras a partir de imagens aborda o ajuste de velocidade, a detecção de múltiplos códigos de barras e as opções de correção de imagem disponíveis na API de leitura.
Considerações sobre dependências e licenciamento
NetBarcodee ImageSharp
ONetBarcodepossui licença MIT. A biblioteca SixLabors.ImageSharp, da qual depende, utiliza um modelo diferente: gratuita para projetos de código aberto e para empresas com receita bruta anual abaixo de um limite definido, mas uma licença comercial é necessária acima desse limite. Essa divisão se aplica independentemente de o ImageSharp estar listado explicitamente no .csproj do projeto ou chegar de forma transitiva através do NetBarcode.
<PackageReference Include="NetBarcode" Version="1.8.3" />
<PackageReference Include="NetBarcode" Version="1.8.3" />
Para uma empresa de varejo ou logística que processa códigos de barras em grande escala — o principal caso de uso visado pelaNetBarcode— a receita anual geralmente ultrapassa o limite a partir do qual a licença comercial da ImageSharp se aplica. Uma auditoria de conformidade pode revelar essa obrigação embutida na árvore de pacotes.
O lançamento da v1.8 introduziu uma consequência adicional da dependência do ImageSharp: o tipo de retorno de GetImage() mudou de uma representação interna para SixLabors.ImageSharp.Image<Rgba32>. O código existente que chamava GetImage() sem digitação explícita quebrou no tempo de compilação, e novas diretivas using para SixLabors.ImageSharp e SixLabors.ImageSharp.PixelFormats tornaram-se necessárias. Quando a API própria do ImageSharp evolui em versões futuras, a API pública doNetBarcodetambém será afetada.
Código de barras IronBarcode
IronBarcode não possui dependência de SixLabors.ImageSharp. Os termos de licenciamento estão descritos diretamente na página de licenciamento do IronBarcode, sem limite mínimo de licenciamento ou obrigação comercial transitiva. Uma chave de teste está disponível para avaliação; As licenças adquiridas removem a marca d'água de avaliação dos arquivos gerados.
Referência de Mapeamento de API
| NetBarcode | IronBarcode | Notas |
|---|---|---|
new Barcode(data, Type.Code128) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
Construtor → método estático |
new Barcode(data, Type.Code128A/B/C) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
O IronBarcode seleciona automaticamente o subconjunto |
new Barcode(data, Type.EAN13) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) |
Mapeamento direto |
new Barcode(data, Type.EAN8) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) |
Mapeamento direto |
new Barcode(data, Type.Code39) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) |
Mapeamento direto |
new Barcode(data, Type.Code39E) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39Extended) |
Mapeamento direto |
new Barcode(data, Type.Code93) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code93) |
Mapeamento direto |
new Barcode(data, Type.Code11) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code11) |
Mapeamento direto |
new Barcode(data, Type.Codabar) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) |
Mapeamento direto |
barcode.SaveImageFile("x.png") |
.SaveAsPng("x.png") |
Método renomear |
barcode.SaveImageFile("x.jpg") |
.SaveAsJpeg("x.jpg") |
Método renomear |
barcode.GetImage() → Image<Rgba32> |
.ToPngBinaryData() ou .SaveAsPng() |
Nenhum tipo ImageSharp exposto |
Sem Type.UPCA / UPCE / ITF / MSI |
BarcodeEncoding.UPCA / UPCE / ITF / MSI |
Nova capacidade |
Sem Type.QRCode |
BarcodeEncoding.QRCode |
Nova capacidade |
Sem Type.DataMatrix |
BarcodeEncoding.DataMatrix |
Nova capacidade |
Sem Type.PDF417 |
BarcodeEncoding.PDF417 |
Nova capacidade |
Sem Type.Aztec |
BarcodeEncoding.Aztec |
Nova capacidade |
| Sem API de leitura | BarcodeReader.Read(path) |
Nova capacidade |
using NetBarcode; |
using IronBarCode; |
Substituição de namespace |
using SixLabors.ImageSharp; |
Remover | Não é mais necessário |
A referência completa do formato está disponível na documentação dos formatos de código de barras suportados .
Quando as equipes consideram migrar doNetBarcodepara o IronBarcode
Requisitos de formato para código QR e 2D
O fator que mais frequentemente motiva a avaliação de uma alternativa aoNetBarcodeé uma nova exigência de códigos QR. Aplicações que começam com a geração de códigos de barras 1D para etiquetas de varejo ou manifestos de remessa geralmente recebem uma exigência subsequente de códigos QR — links sem contato, links diretos para aplicativos móveis, campanhas de marketing. Porque o enum Type não possui uma entrada QR, esse requisito não pode ser atendido dentro do NetBarcode. As equipes que adicionam uma biblioteca QR separada para suprir essa lacuna enfrentam uma segunda avaliação quando oDataMatrixé exigido para uma integração farmacêutica ou oPDF417para uma transportadora logística que o exige nas etiquetas de envio.
A leitura de códigos de barras torna-se necessária
Alguns projetos começam com a geração pura e, posteriormente, adicionam um requisito de validação ou processamento de documentos: confirmar se um código de barras impresso corresponde aos seus dados de origem, extrair valores de código de barras de faturas de fornecedores recebidas ou digitalizar etiquetas de remessa de devolução. ONetBarcodenão oferece nenhuma solução para isso. A adição do ZXing .NET ou de uma biblioteca de leitura comparável introduz uma terceira API para aprender e manter na mesma base de código que já contém oNetBarcodee uma biblioteca de QR Code. Projetos que preveem necessidades de leitura, mesmo em uma fase futura, muitas vezes consideram mais eficiente selecionar uma biblioteca que atenda a ambas as demandas desde o início.
Auditoria de Licença Comercial ImageSharp
Análises legais e de conformidade de dependências de terceiros ocasionalmente revelam a condição de licença comercial SixLabors.ImageSharp incorporada na árvore de pacotes do NetBarcode. Para empresas cujo faturamento bruto anual ultrapasse o limite, a obrigação se aplica independentemente de a ImageSharp ter sido escolhida deliberadamente ou ter chegado por meio da NetBarcode. As equipes que descobrem isso durante uma auditoria — em vez de antes da adoção — enfrentam uma correção retroativa em vez de uma migração planejada. Avaliar a licença de dependência antes de iniciar um projeto é o caminho mais correto.
Reduzindo a complexidade de múltiplas bibliotecas
Equipes que acumularam oNetBarcodepara geração 1D, uma biblioteca específica para Código QR para saída 2D e o ZXing .NET para leitura, se veem na necessidade de manter a compatibilidade de versões entre três pacotes distintos. Cada ciclo de atualização exige a verificação se as três bibliotecas concordam com a versão compartilhada do ImageSharp. Cada novo desenvolvedor no projeto se depara com três APIs diferentes para o que, conceitualmente, é uma única preocupação. A consolidação em uma única biblioteca de códigos de barras simplifica a integração, reduz a superfície de conflito de versões e concentra a manutenção em um único ciclo de lançamento.
Considerações Comuns de Migração
Troca de pacotes e limpeza de dependências transitivas
Remover oNetBarcodecom dotnet remove package NetBarcode é o primeiro passo. O pacote SixLabors.ImageSharp pode reaparecer na árvore de dependências se outros pacotes no projeto também o puxarem de forma transitiva. Após a remoção, inspecione a lista de pacotes restaurada com dotnet list package --include-transitive para confirmar se o ImageSharp ainda está presente e se sua condição de licença comercial ainda se aplica.
Substituição do tipo de retorno de GetImage()
Qualquer código que armazenou o resultado de GetImage() como Image<Rgba32> deve ser atualizado. O tipo ImageSharp não possui equivalente direto no IronBarcode; A substituição depende de como a imagem foi usada posteriormente. O código que salvou a imagem em um stream pode ser substituído por .SaveAsPng(stream) diretamente no objeto GeneratedBarcode. O código que recuperou bytes brutos pode usar .ToPngBinaryData(). O código que realizou manipulações adicionais do ImageSharp na imagem retornada precisará que essas operações sejam avaliadas individualmente.
Atualização de namespace
Os arquivos que importaram using NetBarcode;, using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats; ou using SixLabors.Fonts; precisam que essas diretivas sejam substituídas por using IronBarCode;. Uma busca em todo o projeto por essas declarações "using" identifica todos os arquivos que exigem atenção antes da tentativa de compilação.
Funcionalidades adicionais do IronBarcode
Além das funcionalidades principais de geração e leitura abordadas nesta comparação, o IronBarcode oferece:
- Saída de código de barras SVG : Gere imagens de código de barras em formato vetorial adequadas para fluxos de trabalho de impressão e designs de etiquetas escaláveis.
- Estilização de código de barras : configure a cor da barra, a cor de fundo, a fonte da anotação, a margem e a rotação dos códigos de barras gerados.
- GS1-128 e GS1 DataBar : Códigos de barras com estrutura de identificador de aplicação para conformidade no varejo e na cadeia de suprimentos.
- Formatos Postais : Intelligent Mail, Royal Mail e outras simbologias postais para aplicações de envio de correspondências Extração de código de barras de PDF : Leia códigos de barras diretamente de documentos PDF com várias páginas, sem a necessidade de uma biblioteca PDF separada.
- Geração em lote : Processe conjuntos de dados de código de barras de forma eficiente em um único pipeline.
- MAUI e plataformas móveis : O IronBarcode oferece suporte a aplicativos .NET MAUI para fluxos de trabalho de código de barras multiplataforma em dispositivos móveis e desktops.
Compatibilidade com .NET e Preparação para o Futuro
O IronBarcode tem como alvo as versões atuais do .NET e mantém a compatibilidade com o .NET Standard para projetos que ainda não migraram para o .NET moderno. A cadência regular de lançamentos da Iron Software alinha as atualizações de compatibilidade com cada grande lançamento do .NET. ONetBarcodetem como alvo o .NET Standard 2.0 e funciona nos runtimes atuais por meio dessa camada de compatibilidade, embora a frequência de atualização da biblioteca e o conjunto de formatos 2D sejam fixos devido ao seu escopo de projeto.
Conclusão
NetBarcode e IronBarcode representam posições diferentes no espectro do escopo das bibliotecas de código de barras. ONetBarcodeé uma implementação focada e limpa de geração de código de barras 1D: onze valores enum em oito famílias de simbologias lineares, uma API de construtor direta, e uma licençaMITque mantém a adoção sem atrito para projetos de código aberto dentro do limite de receita do ImageSharp.IronBarcode é um conjunto de ferramentas mais abrangente que cobre a geração em mais de 50 formatos, leitura de imagens e PDFs, e uma API fluente que trata formatos 1D e 2D de forma idêntica.
Para projetos em que os requisitos estão genuinamente limitados à geração de código de barras linear dentro do conjunto suportado — um sistema de ponto de venda produzindo códigos EAN-13 para scanners de varejo europeu, ou uma ferramenta interna com uma vida útil curta e fixa — oNetBarcodeentrega o necessário sem introduzir uma dependência comercial. A biblioteca está bem construída dentro de seu escopo, e esse escopo é explícito desde a primeira olhada no enum Type.
Para projetos em que o escopo do formato pode se expandir, em que a leitura eventualmente será necessária ou em que uma revisão de conformidade da dependência transitiva do ImageSharp seja uma preocupação, o IronBarcode aborda todos os três aspectos por meio de um único pacote. As equipes que começam com oNetBarcodepara geração 1D e posteriormente adicionam o QRCoder para 2D e o ZXing .NET para leitura acumulam três obrigações distintas de manutenção de biblioteca;IronBarcode consolida tudo isso em um só.
A escolha decorre diretamente dos requisitos do projeto. Se os onze valores 1D enum em oito famílias de simbologias doNetBarcodee nenhuma capacidade de leitura corresponderem precisamente à especificação, oNetBarcodeé uma seleção tecnicamente válida. Se a especificação incluir qualquer formato 2D, qualquer fluxo de trabalho de leitura ou qualquer preocupação com as condições da licença ImageSharp, o IronBarcode é a resposta mais completa.
Perguntas frequentes
O que é NetBarcode?
NetBarcode é uma biblioteca .NET para geração e leitura de códigos de barras em aplicações C#. É uma das diversas alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.
Quais são as principais diferenças entre NetBarcode e IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o NetBarcode normalmente exige a criação e configuração de instâncias antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.
O licenciamento do IronBarcode é mais fácil do que o do NetBarcode?
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 NetBarcode 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 NetBarcode?
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 NetBarcode?
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 NetBarcode 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 NetBarcode para o IronBarcode?
A migração do NetBarcode 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()`.

