NetBarcode vs IronBarcode: Comparação de bibliotecas de código de barras em C#
A enumeração Type do NetBarcode não possui nenhuma entrada para código QR. 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 é compatível com os formatos Code128, EAN-13, UPC-A e outros dez formatos unidimensionais — todos acessíveis por meio de um construtor simples e um pequeno conjunto de métodos de saída. Sua dependência em SixLabors.ImageSharp fornece a camada de renderização de imagem e, desde a versão 1.8, essa dependência é refletida na API pública por meio do tipo de retorno Image<Rgba32> em GetImage().
O NetBarcode nã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: A enumeração
Typedefine exatamente 14 formatos de código de barras, todos lineares; Não há entradas 2D. - Dependência SixLabors.ImageSharp: A renderização de imagens é delegada ao ImageSharp e, desde a versão 1.8, o método
GetImage()retornaImage<Rgba32>, expondo o tipo do ImageSharp diretamente na API pública. - API baseada em construtor: Os 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; Sem enumeração integrada ou pipeline de lote
O Limite de Projeto do Enum Tipo
A enumeração Type é a lista definitiva do que o NetBarcode pode gerar. Ao inspecioná-la, revela-se a abrangência da biblioteca:
// NetBarcode Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// 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
// NetBarcode Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// 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
Public Enum Type
Code128
Code128A
Code128B
Code128C
Code39
Code39Extended
Code93
EAN8
EAN13
UPCA
UPCE
Codabar
ITF
MSI
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
Esta não é uma funcionalidade ausente que aguarda uma solicitação de pull request. O enum possui quatorze entradas, todas unidimensionais, o que reflete o escopo pretendido da biblioteca. Qualquer aplicação que exija códigos QR, DataMatrix, PDF417 ou asteca 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 interface estática da biblioteca foi projetada de forma que a troca entre formatos de código de barras exija apenas a alteração de uma única constante — a mesma chamada BarcodeWriter.CreateBarcode que gera o Code128 também gera códigos QR, DataMatrix, PDF417 e Aztec.
OIronBarcoderealiza a leitura de códigos de barras através da classe BarcodeReader, que aceita arquivos de imagem e documentos PDF e retorna os resultados decodificados com a identificação do 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: Tanto
BarcodeWriterquantoBarcodeReaderestã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 Fluent Chain:
BarcodeWriter.CreateBarcode(data, encoding)retorna um objetoGeneratedBarcodecom métodos de saída incluindoSaveAsPng(),SaveAsJpeg(),ToPngBinaryData()e sobrecargas baseadas em fluxo - Sem dependência do ImageSharp: a renderização de imagens doIronBarcodeé independente; Não é introduzida nenhuma dependência transitiva SixLabors.
- Suporte a PDF: A API de leitura aceita arquivos
.pdfdiretamente, além de 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 | 14 | 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 | ||
| Código 128, EAN-13, UPC-A, Código 39 | Sim | Sim |
| EAN-8, UPC-E, Code93, Codabar, ITF, MSI | Sim | 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
O NetBarcode fornece 14 formatos de código de barras lineares através da enumeração 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
// 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
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
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 o NetBarcode como 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 do NetBarcode é baseado em construtores. Um objeto Barcode é instanciado com a string de dados e um valor de enumeração Type. A saída é salva diretamente com SaveImageFile() ou recuperada como um Image<Rgba32> via GetImage(). Desde a versão 1.8, o tipo de retorno de GetImage() é o tipo SixLabors.ImageSharp, o que significa que qualquer código que armazene ou processe o valor de retorno deve importar e funcionar dentro da API 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 subsequente à 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 de chamada.
Abordagem do IronBarcode
IronBarcode utiliza uma cadeia fluente. BarcodeWriter.CreateBarcode retorna um objeto GeneratedBarcode que contém 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 doIronBarcode.
Capacidade de leitura
Abordagem NetBarcode
O NetBarcode nã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 o NetBarcode e 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 do NetBarcode e 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.BarcodeType}: {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.BarcodeType}: {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.BarcodeType}: {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
NetBarcode e ImageSharp
O NetBarcode possui 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 de um projeto ou chegar transitivamente através do NetBarcode.
<PackageReference Include="NetBarcode" Version="1.8.2" />
<PackageReference Include="NetBarcode" Version="1.8.2" />
Para uma empresa de varejo ou logística que processa códigos de barras em grande escala — o principal caso de uso visado pela NetBarcode — 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.
A versão 1.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 tipagem explícita apresentou erros em tempo de compilação, e novas diretivas using para SixLabors.ImageSharp e SixLabors.ImageSharp.PixelFormats tornaram-se obrigatórias. Quando a API própria do ImageSharp evolui em versões futuras, a API pública do NetBarcode també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 |
|---|---|---|
| @@--CÓDIGO-64409--@@ | @@--CÓDIGO-64410--@@ | Construtor → método estático |
| @@--CÓDIGO-64411--@@ | @@--CÓDIGO-64412--@@ | Mapeamento direto |
| @@--CÓDIGO-64413--@@ | @@--CÓDIGO-64414--@@ | Mapeamento direto |
| @@--CÓDIGO-64415--@@ | @@--CÓDIGO-64416--@@ | Mapeamento direto |
| @@--CÓDIGO-64417--@@ | @@--CÓDIGO-64418--@@ | Mapeamento direto |
| @@--CÓDIGO-64419--@@ | @@--CÓDIGO-64420--@@ | Mapeamento direto |
| @@--CÓDIGO-64421--@@ | @@--CÓDIGO-64422--@@ | Mapeamento direto |
| @@--CÓDIGO-64423--@@ | @@--CÓDIGO-64424--@@ | Mapeamento direto |
| @@--CÓDIGO-64425--@@ | @@--CÓDIGO-64426--@@ | Método renomear |
| @@--CÓDIGO-64427--@@ | @@--CÓDIGO-64428--@@ | Método renomear |
| @@--CÓDIGO-64429--@@ → @@--CÓDIGO-64430--@@ | .ToPngBinaryData() ou .SaveAsPng() |
Nenhum tipo ImageSharp exposto |
| Não @@--CÓDIGO-64433--@@ | @@--CÓDIGO-64434--@@ | Nova capacidade |
| Não @@--CÓDIGO-64435--@@ | @@--CÓDIGO-64436--@@ | Nova capacidade |
| Não @@--CÓDIGO-64437--@@ | @@--CÓDIGO-64438--@@ | Nova capacidade |
| Não @@--CÓDIGO-64439--@@ | @@--CÓDIGO-64440--@@ | Nova capacidade |
| Sem API de leitura | @@--CÓDIGO-64441--@@ | Nova capacidade |
| @@--CÓDIGO-64442--@@ | @@--CÓDIGO-64443--@@ | Substituição de namespace |
| @@--CÓDIGO-64444--@@ | 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 do NetBarcode para o IronBarcode
Requisitos de formato para código QR e 2D
O fator que mais frequentemente motiva a avaliação de uma alternativa ao NetBarcode é 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. Como a enumeração Type não possui uma entrada QR, esse requisito não pode ser atendido no NetBarcode. As equipes que adicionam uma biblioteca QR separada para suprir essa lacuna enfrentam uma segunda avaliação quando o DataMatrix é exigido para uma integração farmacêutica ou o PDF417 para 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. O NetBarcode nã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 o NetBarcode e 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 o NetBarcode para 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
A remoção do NetBarcode com dotnet remove package NetBarcode é o primeiro passo. O pacote SixLabors.ImageSharp pode reaparecer na árvore de dependências se outros pacotes do projeto também o incluírem transitivamente. 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 a condição da licença comercial ainda se aplica.
Substituição do tipo de retorno de GetImage()
Qualquer código que tenha armazenado 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 fluxo 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, oIronBarcodeoferece:
- 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 : OIronBarcodeoferece 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
OIronBarcodeé compatível com .NET 8 e .NET 9, e mantém a compatibilidade com o .NET Standard para projetos que ainda não migraram para o .NET moderno. Como o .NET 10 está previsto para o final de 2026, o ritmo regular de lançamentos da Iron Software garante que as atualizações de compatibilidade acompanhem cada versão principal do .NET . O NetBarcode tem 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 eIronBarcoderepresentam posições diferentes no espectro do escopo das bibliotecas de código de barras. NetBarcode é uma implementação focada e limpa para geração de códigos de barras 1D: quatorze formatos, uma API de construtora simples e uma licençaMITque facilita a adoção por 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 se limitam genuinamente à geração de códigos de barras lineares — um sistema de ponto de venda que produz códigos EAN-13 e UPC-A para leitores de código de barras tradicionais do varejo, ou uma ferramenta interna com vida útil fixa e curta — o NetBarcode oferece o que é necessário sem introduzir uma dependência comercial. A biblioteca é bem construída dentro de seu escopo, e esse escopo é explícito desde o primeiro olhar para o 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, oIronBarcodeaborda todos os três aspectos por meio de um único pacote. As equipes que começam com o NetBarcode para 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;IronBarcodeconsolida tudo isso em um só.
A escolha decorre diretamente dos requisitos do projeto. Se quatorze formatos 1D e nenhuma capacidade de leitura corresponderem precisamente à especificação, o NetBarcode é uma escolha tecnicamente só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, oIronBarcodeé 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()`.

