Comparação entre as bibliotecas de código de barras Infragistics Barcode e IronBarcode em C#
Neodynamic Barcode vs IronBarcode: Arquitetura de SDK Separada e Suporte a Formatos Comparados
O SDK de leitura de código de barras da Neodynamic não consegue ler códigos QR. Você pode adquirir os dois SDKs da Neodynamic e ainda assim não conseguir ler os mesmos códigos QR que o gerador complementar produz. Essa única contradição — um gerador que suporta QR Code, DataMatrix, PDF417 e Aztec, combinado com um leitor que não suporta nenhum desses formatos — define a experiência prática de trabalhar com as ferramentas de código de barras da Neodynamic e estabelece a comparação com o IronBarcode que se segue.
Entendendo o código de barras neodinâmico
A Neodynamic oferece funcionalidade de código de barras por meio de dois produtos comerciais totalmente separados: o Barcode Professional SDK para geração de códigos de barras e o Barcode Reader SDK para leitura de códigos de barras. Cada produto é distribuído como um pacote NuGet individual, requer compra separada e possui sua própria chave de licença. Um projeto que necessita tanto de geração quanto de leitura deve integrar ambos os pacotes de forma independente, mantê-los por meio de ciclos de atualização separados e configurá-los na inicialização do aplicativo.
O SDK Barcode Professional é o componente de geração. Suporta uma ampla gama de simbologias, incluindo formatos lineares (Code 128, Code 39, EAN-13, UPC-A, Codabar, ITF) e formatos 2D (QR Code, DataMatrix, PDF417, Aztec). O SDK usa uma API baseada em instância: um objeto BarcodeProfessional é construído, suas propriedades Code e Symbology são atribuídas, e GetBarcodeImage() é chamado para produzir um System.Drawing.Image que é salvo através do pipeline padrão System.Drawing.Imaging. A edição .NET Framework possui uma dependência de System.Drawing; uma edição separada do .NET Standard é distribuída via ComponentSource.
O SDK do Leitor de Código de Barras é o componente de leitura. Aceita um System.Drawing.Bitmap e retorna resultados apenas para simbologias 1D. O leitor não suporta códigos QR, DataMatrix, PDF417, Aztec e todos os outros formatos 2D. Quando um código de barras 2D é enviado, o SDK não retorna nenhum resultado — ele não lança uma exceção, simplesmente produz um conjunto de resultados vazio. O Barcode Reader SDK foi marcado como fim da vida útil em 31 de dezembro de 2019, e seu pacote NuGet (Neodynamic.SDK.BarcodeReader 1.0.2000) não foi atualizado desde julho de 2012, com .NET Framework 2.0/3.x/4.x como seus únicos alvos. Recuperar a capacidade de leitura 2D, portanto, requer adicionar uma terceira biblioteca fora do ecossistema Neodynamic.
Principais características arquitetônicas do código de barras neodinâmico:
- Produtos separados para geração e leitura: Dois pacotes NuGet , duas compras e duas chaves de licença são necessários para um projeto que utiliza ambas as funcionalidades.
- Geração 2D sem leitura 2D: O SDK Barcode Professional gera códigos QR, DataMatrix, PDF417 e Aztec, mas o SDK Barcode Reader complementar não consegue ler nenhum desses formatos.
- API de geração baseada em instância: A geração requer a construção de um objeto
BarcodeProfessionale a atribuição de propriedades antes de chamarGetBarcodeImage(). - Dependência de System.Drawing na maioria das edições: A edição Barcode Professional .NET Windows e o Barcode Reader SDK dependem de
System.Drawing, o que limita a implantação em Linux e contêineres para essas edições. A edição Barcode Professional .NET Standard usa SkiaSharp e evita essa dependência. - Escopo de leitura somente 1D: O SDK do Leitor de Código de Barras suporta os códigos Code 128, EAN-13, UPC-A, Code 39, Codabar, Interleaved 2 of 5 e MSI/Plessey. Não inclui formato 2D.
- Sem suporte nativo para PDF: Nenhum dos SDKs lê códigos de barras diretamente de documentos PDF; É necessária uma etapa separada de extração de imagem.
- Sem detecção automática de formato: o leitor infere o formato a partir dos recursos suportados, e não do conteúdo da imagem.
A arquitetura do SDK dividido
Um projeto que adquire ambos os SDKs Neodynamic deve configurar dois blocos de licença separados na inicialização. As atribuições duplas LicenseOwner e LicenseKey usam diferentes namespaces e nomes de classe diferentes, e nenhum bloco está ciente do outro:
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
// Neodynamic: two products, two license configurations
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;
// Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company";
BarcodeProfessional.LicenseKey = "GEN-KEY";
// Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader
' Neodynamic: two products, two license configurations
' Generation license (Barcode Professional SDK)
BarcodeProfessional.LicenseOwner = "Company"
BarcodeProfessional.LicenseKey = "GEN-KEY"
' Reader license — separate purchase, separate key
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-KEY"
Esse padrão se repete em todos os ambientes — desenvolvimento, teste e produção — e deve ser mantido sempre que qualquer um dos produtos for atualizado ou renovado.
Entendendo o IronBarcode
IronBarcode é uma biblioteca comercial de código de barras .NET desenvolvida pela Iron Software que fornece geração e leitura de códigos de barras por meio de um único pacote NuGet sob uma única licença. A biblioteca usa um modelo de API estática: a geração é realizada através de BarcodeWriter.CreateBarcode() e a leitura através de BarcodeReader.Read(). Ambos os métodos funcionam em todas as simbologias suportadas sem exigir caminhos de código específicos para cada formato.
IronBarcode é construído sem uma dependência de System.Drawing, o que o torna implantável no Linux, macOS e em contêineres Docker sem configuração específica de plataforma. A biblioteca lê códigos de barras de arquivos de imagem, fluxos de imagens e documentos PDF nativamente, sem exigir uma etapa separada de extração de imagem para fontes PDF.
Principais características do IronBarcode:
- Pacote único para geração e leitura: Um pacote NuGet , uma chave de licença e um bloco de configuração abrangem todas as operações de código de barras.
- Suporte unificado a 1D e 2D: A mesma API lê e gera mais de 50 simbologias, incluindo Code 128, EAN-13, QR Code, DataMatrix, PDF417 e Aztec.
- API fluente estática:
BarcodeWriter.CreateBarcode()retorna um resultado encadeável;BarcodeReader.Read()aceita caminhos de arquivo, fluxos e documentos PDF. - Detecção automática de formato: O leitor identifica a simbologia a partir do conteúdo da imagem sem exigir que o usuário especifique o formato esperado.
- Sem dependência de System.Drawing: a implantação multiplataforma no Linux e em contêineres funciona sem configuração adicional de biblioteca nativa.
- Leitura nativa de PDF: Os códigos de barras incorporados em documentos PDF são lidos diretamente, retornando os metadados do número da página juntamente com os valores dos códigos de barras.
- Processamento assíncrono e em lote:
BarcodeReader.ReadAsync()e operações em lote de várias páginas suportam cargas de trabalho de servidor de alta taxa de transferência.
Comparação de recursos
A tabela a seguir resume as principais diferenças entre os produtos da Neodynamic e da IronBarcode:
| Recurso | Professional de código de barras neodinâmico | Leitor de código de barras neodinâmico | IronBarcode |
|---|---|---|---|
| Geração de código de barras | Sim | Não | Sim |
| Leitura de código de barras 1D | Não | Sim | Sim |
| Leitura de código de barras 2D | Não | Não | Sim |
| Produtos necessários | 1 (apenas geração) | 1 (somente leitura) | 1 (ambos) |
| Chaves de licença necessárias | 1 por produto comprado | 1 por produto comprado | 1 no total |
| Leitura nativa de código de barras em PDF | Não | Não | Sim |
| Dependência de desenho do sistema | Edição específica | Sim | Não |
Comparação Detalhada de Recursos
| Recurso | Professional de código de barras neodinâmico | Leitor de código de barras neodinâmico | IronBarcode |
|---|---|---|---|
| Geração | |||
| Geração de código 128 | Sim | N / D | Sim |
| Geração EAN-13 / UPC-A | Sim | N / D | Sim |
| Geração do código 39 | Sim | N / D | Sim |
| Geração de código QR | Sim | N / D | Sim |
| Geração de DataMatrix | Sim | N / D | Sim |
| Geração PDF417 | Sim | N / D | Sim |
| geração asteca | Sim | N / D | Sim |
| Leitura | |||
| Leitura do código 128 | N / D | Sim | Sim |
| Leitura EAN-13 / UPC-A | N / D | Sim | Sim |
| Leitura do código 39 | N / D | Sim | Sim |
| Leitura Codabar | N / D | Sim | Sim |
| Leitura de código QR | N / D | Não | Sim |
| Leitura de DataMatrix | N / D | Não | Sim |
| Leitura PDF417 | N / D | Não | Sim |
| Leitura asteca | N / D | Não | Sim |
| Detecção automática de formato | N / D | Não | Sim |
| Fontes de entrada | |||
| Entrada de arquivo de imagem | Sim | Sim | Sim |
| Entrada de documento PDF | Não | Não | Sim |
| Entrada de fluxo | Sim | Sim | Sim |
| Plataforma e Licenciamento | |||
| Dependência de desenho do sistema | Edição específica | Sim | Não |
| Suporte para Linux/Docker | Sim (edição .NET Standard) | Não | Sim |
| .NET Standard 2.0 | Sim (edição .NET Standard) | Não | Sim |
| .NET 8 / .NET 9 | Sim (edição .NET Standard) | Não | Sim |
| Pacotes NuGet necessários | 1 por produto | 1 por produto | 1 no total |
| Chaves de licença necessárias | 1 por produto | 1 por produto | 1 no total |
Suporte ao formato de leitura
A diferença técnica mais significativa nesta comparação reside na fronteira entre os formatos de leitura dos dois SDKs da Neodynamic e do IronBarcode.
Abordagem Neodinâmica para Leitor de Código de Barras
O leitor de código de barras Neodynamic suporta apenas códigos de barras lineares. Quando um código de barras 2D é enviado ao leitor, o SDK retorna um conjunto de resultados vazio ou nulo. Nenhuma exceção é lançada e nenhuma mensagem de erro indica o que aconteceu. As equipes que trabalham com este SDK normalmente descobrem a limitação após implantar um código que chama o leitor para imagens de código QR e observar que a coleção de resultados está sempre vazia.
Um padrão defensivo comum em bases de código que utilizam o Neodynamic Reader é uma verificação explícita que gera uma exceção quando um formato 2D é esperado:
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;
public string ReadQrCode(string imagePath)
{
using var bitmap = new Bitmap(imagePath);
var reader = new BarcodeReader();
var results = reader.Read(bitmap);
// Results will be null or empty — QR codes are not recognised by this SDK
if (results == null || !results.Any())
{
throw new NotSupportedException(
"Neodynamic Barcode Reader does not support QR codes");
}
return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing
Public Function ReadQrCode(imagePath As String) As String
Using bitmap As New Bitmap(imagePath)
Dim reader As New BarcodeReader()
Dim results = reader.Read(bitmap)
' Results will be null or empty — QR codes are not recognised by this SDK
If results Is Nothing OrElse Not results.Any() Then
Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End If
Return results.First().Value
End Using
End Function
Este método não pode ser concluído apenas com o SDK do Neodynamic Reader. O NotSupportedException não é uma solução alternativa — ele reflete o limite de capacidade real do leitor para entrada 2D.
Abordagem do IronBarcode
IronBarcode lê todas as simbologias suportadas através da mesma chamada BarcodeReader.Read(). O formato é detectado automaticamente a partir do conteúdo da imagem. Um código QR, um código Code 128 e um código de barras DataMatrix usam o mesmo código de chamada:
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
using IronBarCode;
public string ReadQrCode(string imagePath)
{
// QR codes, DataMatrix, PDF417 — all handled automatically
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
return result?.Value;
}
Imports IronBarCode
Public Function ReadQrCode(imagePath As String) As String
' QR codes, DataMatrix, PDF417 — all handled automatically
Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
Return If(result?.Value, Nothing)
End Function
Quem fez a chamada não especificou um formato esperado. O IronBarcode identifica a simbologia e retorna o valor. Para obter detalhes completos sobre as opções de leitura de imagens, incluindo detecção de múltiplos códigos de barras e pré-processamento de imagens, consulte o guia de leitura de códigos de barras a partir de imagens .
Geração de código de barras
Tanto o Professional de código de barras neodinâmico quanto o IronBarcode são capazes de gerar códigos de barras 1D e 2D. A diferença reside no estilo da API e na quantidade de dependências, e não na capacidade de saída.
Abordagem Professional de código de barras neodinâmico
A API de geração do Neodynamic é baseada em instâncias. Um objeto BarcodeProfessional é construído, suas propriedades são atribuídas individualmente, e GetBarcodeImage() é chamado para retornar um System.Drawing.Image. A imagem é então salva usando a enumeração System.Drawing.Imaging.ImageFormat:
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
using Neodynamic.SDK.Barcode;
// Configure license first
BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "YOUR-KEY";
// Build the barcode through property assignment
var barcode = new BarcodeProfessional();
barcode.Code = "12345678";
barcode.Symbology = Symbology.Code128;
barcode.BarcodeUnit = BarcodeUnit.Pixel;
// Get image and save via System.Drawing
System.Drawing.Image image = barcode.GetBarcodeImage();
image.Save("output.png", System.Drawing.Imaging.ImageFormat.Png);
Imports Neodynamic.SDK.Barcode
Imports System.Drawing
' Configure license first
BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "YOUR-KEY"
' Build the barcode through property assignment
Dim barcode As New BarcodeProfessional()
barcode.Code = "12345678"
barcode.Symbology = Symbology.Code128
barcode.BarcodeUnit = BarcodeUnit.Pixel
' Get image and save via System.Drawing
Dim image As Image = barcode.GetBarcodeImage()
image.Save("output.png", Imaging.ImageFormat.Png)
O SDK oferece opções legítimas de personalização, incluindo controle de DPI, alinhamento de texto, configurações de cores e dimensionamento da zona silenciosa. São úteis para fluxos de trabalho de impressão onde as dimensões físicas precisas são importantes. A capacidade de geração em si está completa; As limitações que motivam a migração estão no lado da leitura, não no lado da geração.
Abordagem do IronBarcode
IronBarcode utiliza uma abordagem estática fluente. A codificação e os dados são passados como parâmetros para BarcodeWriter.CreateBarcode(), e o formato de saída é expresso como um nome de método no objeto retornado. Não é necessária a importação de System.Drawing:
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("output.png");
Imports IronBarCode
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.SaveAsPng("output.png")
Para a geração de códigos de barras 2D, a classe dedicada QRCodeWriter oferece opções adicionais específicas para códigos QR:
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qrcode.png");
using IronBarCode;
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
.SaveAsPng("qrcode.png");
Imports IronBarCode
QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
.SaveAsPng("qrcode.png")
Para obter orientações sobre como gerar simbologias 1D com opções de dimensionamento e anotação, consulte o guia de criação de códigos de barras 1D . Para a criação de códigos de barras 2D, incluindo DataMatrix e PDF417, consulte o guia de criação de códigos de barras 2D .
Licenciamento e estrutura de produtos
O modelo de licenciamento representa uma das diferenças mais práticas entre as duas opções para equipes que desenvolvem sistemas que exigem tanto geração quanto leitura.
Abordagem Neodinâmica
A funcionalidade de código de barras da Neodynamic está dividida em dois produtos licenciados separadamente. O SDK Barcode Professional abrange a geração de código de barras e o SDK Barcode Reader abrange a leitura. Cada produto requer uma compra separada e possui uma chave de licença individual. Uma equipe que adquire ambos os produtos deve manter dois blocos de configuração LicenseOwner / LicenseKey, acompanhar duas datas de renovação separadas e lidar com dois canais de suporte separados quando surgirem problemas.
O SDK Barcode Professional tem preços a partir de aproximadamente $352 por uma licença de desenvolvedor único na edição Básica e a partir de aproximadamente $705 na edição Ultimate (licenças de desenvolvedor via ComponentSource). O SDK Barcode Reader tem um custo separado e é fornecido sob preços legados — o produto foi marcado como fim de serviço em 31 de dezembro de 2019. Um projeto que requer leitura 2D não pode atender a esse requisito com produtos da Neodynamic a qualquer preço; uma terceira biblioteca deve ser adicionada. Consulte a página de formatos de código de barras suportados IronBarcode para obter uma lista completa do que uma única licença unificada cobre.
Abordagem do IronBarcode
O IronBarcode é vendido como um produto único que abrange todas as operações de código de barras — geração e leitura em todas as simbologias suportadas — sob uma única chave de licença. Não há licença de leitor separada, nem licença de gerador separada, e o suporte ao formato 2D não tem custo adicional. A chave de licença é definida uma única vez na inicialização do aplicativo e não requer nenhuma configuração adicional:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
O IronBarcode Lite custa US$ 749 para um único desenvolvedor e abrange o conjunto completo de recursos. Para informações sobre preços e opções de volume atuais, consulte a página de licenciamento do IronBarcode .
Referência de Mapeamento de API
| API Neodinâmica | Equivalente ao IronBarcode | Notas |
|---|---|---|
BarcodeProfessional.LicenseOwner = "..." |
IronBarCode.License.LicenseKey = "key" |
Uma única chave substitui o par de chaves do proprietário |
BarcodeProfessional.LicenseKey = "..." |
(part of single key above) | Não há campo de proprietário separado |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner |
(removed) | Não é necessário |
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey |
(removed) | Não é necessário |
new BarcodeProfessional() |
BarcodeWriter.CreateBarcode(data, encoding) |
Método estático, sem instância |
barcode.Code = data |
Primeiro parâmetro de CreateBarcode |
Aprovado na construção |
barcode.Symbology = Symbology.Code128 |
BarcodeEncoding.Code128 |
Segundo parâmetro |
barcode.Symbology = Symbology.QRCode |
BarcodeEncoding.QRCode |
Viagem completa de ida e volta com suporte |
barcode.GetBarcodeImage().Save(path, ImageFormat.Png) |
.SaveAsPng(path) |
Fluente, sem enumeração ImageFormat |
new BarcodeReader().Read(bitmap) |
BarcodeReader.Read(imagePath) |
Método estático, aceita caminho de arquivo |
result.Value |
result.Value |
Mesmo nome de propriedade |
throw new NotSupportedException(...) para QR |
BarcodeReader.Read(imagePath) |
Substitua pela chamada de leitura padrão. |
Quando as equipes consideram migrar do Neodynamic Barcode para o IronBarcode
Requisitos de leitura de código QR
O cenário mais comum que leva equipes da Neodynamic a migrarem para a IronBarcode é a descoberta de que os códigos QR gerados pelo SDK Barcode Professional não podem ser lidos pelo SDK Barcode Reader. As equipes que desenvolvem sistemas de etiquetagem de produtos, ferramentas de gestão de estoque ou fluxos de trabalho de rastreamento de documentos geralmente implementam a geração e a leitura como fases separadas de um sistema maior. Quando a geração é feita primeiro usando o Barcode Professional, a limitação do leitor só se torna aparente quando o componente de leitura é tentado. Nesse ponto, o projeto já havia se comprometido com o Neodynamic para geração de dados, e adicionar uma terceira biblioteca para cobrir a leitura 2D introduz uma complexidade de gerenciamento de versões que não existiria com um SDK unificado.
Reduzindo a complexidade do produto
Algumas equipes migram não por causa de uma diferença específica de formato, mas porque o custo de manter dois produtos separados para o que conceitualmente é uma única funcionalidade se torna um ponto de atrito recorrente. Dois pacotes no arquivo .csproj, dois ciclos de renovação de licença, dois conjuntos de notas de versão para revisar e duas potenciais fontes de incompatibilidade quando atualizações do .NET ou Windows são aplicadas — nada desse overhead entrega funcionalidade além do que um único pacote unificado proporcionaria. As equipes que fazem uma auditoria de dependência como parte de uma atualização do .NET frequentemente identificam o arranjo de pacotes duplos de Neodynamic como uma oportunidade de simplificação.
Processamento de código de barras PDF
Aplicações que processam documentos PDF contendo códigos de barras representam um cenário onde ambos os SDKs da Neodynamic apresentam deficiências simultaneamente. Nem o SDK de geração nem o SDK de leitura conseguem abrir um arquivo PDF e extrair os valores dos códigos de barras de suas páginas. As equipes que trabalham com manifestos de remessa, documentos de faturas, registros médicos ou qualquer fluxo de trabalho de documentos em que códigos de barras estejam incorporados em PDFs devem implementar uma etapa intermediária de extração de imagem antes que qualquer leitura possa ocorrer. Essa etapa de extração requer uma biblioteca adicional, o que significa que o projeto já possui uma terceira dependência para contornar uma limitação que uma única instalação do IronBarcode eliminaria.
Consistência de formatação entre leitura e escrita
Equipes que operam fluxos de trabalho com código de barras em grande escala às vezes descobrem que inconsistências no suporte de formato entre a geração e a leitura criam problemas de teste e validação. Quando um sistema gera códigos QR para uma finalidade e lê diferentes tipos de formato para outra, a divergência entre o que o gerador suporta e o que o leitor suporta cria lacunas nos testes de ida e volta. Um sistema onde a geração e a leitura compartilham a mesma biblioteca e a mesma lista de formatos suportados é mais simples de validar. A verificação de que um código de barras gerado pode ser lido com sucesso passa a ser uma operação de biblioteca única, em vez de um teste de integração de múltiplas bibliotecas.
Considerações Comuns de Migração
Remoção de Pacote Duplo
Migrar do Neodynamic requer a remoção de ambos os pacotes NuGet: Neodynamic.SDK.Barcode e Neodynamic.SDK.BarcodeReader. Ambos devem ser removidos do arquivo .csproj e ambas as diretivas using correspondentes devem ser removidas dos arquivos de origem. Executar dotnet remove package para cada é suficiente; Não existem dependências compartilhadas entre os dois que exijam limpeza adicional.
Limpeza da configuração de licença dupla
Os dois blocos de configuração de licença — um para BarcodeProfessional e um para Neodynamic.SDK.BarcodeReader.BarcodeReader — são ambos substituídos por uma única atribuição IronBarCode.License.LicenseKey. Esta atribuição é feita uma vez na inicialização do aplicativo, tipicamente em Program.cs ou no bootstrap de injeção de dependência do aplicativo. Qualquer arquivo de configuração ou variável de ambiente que armazene chaves de licença Neodynamic pode ser desativado após a verificação da migração.
Remoção de exceção NotSupportedException
Bases de código que encontraram a limitação de leitura 2D durante o desenvolvimento frequentemente contêm métodos de espaço reservado que lançam NotSupportedException para leitura de códigos QR ou DataMatrix. Esses métodos não são soluções alternativas — são reconhecimentos honestos de que a capacidade não existia. Após a migração para o IronBarcode, cada corpo de método é substituído por uma chamada padrão BarcodeReader.Read(imagePath). Não é necessário nenhum cuidado especial; O formato é detectado automaticamente.
Funcionalidades adicionais do IronBarcode
Além dos principais pontos de comparação, o IronBarcode oferece funcionalidades que não estão disponíveis em nenhum dos produtos da Neodynamic:
- Leitura nativa de código de barras PDF:
BarcodeReader.Read("document.pdf")lê códigos de barras diretamente de documentos PDF, retornando informações de número de página junto com os valores dos códigos de barras, sem necessidade de extração intermediária de imagem. - Processamento assíncrono em lote:
BarcodeReader.ReadAsync()suporta leituras não-bloqueantes adequadas para cargas de trabalho do lado do servidor processando altos volumes de imagens ou documentos simultaneamente. - Correção de erros por aprendizado de máquina: o IronBarcode aplica correção de erros baseada em aprendizado de máquina para recuperar valores de imagens de código de barras danificadas, parcialmente obscurecidas ou de baixa resolução que retornariam resultados vazios em decodificadores padrão.
- Detecção de múltiplos códigos de barras: Uma única chamada
BarcodeReader.Read()retorna todos os códigos de barras presentes em uma imagem, incluindo imagens de formato misto contendo simbologias 1D e 2D simultaneamente. - Inserção de códigos de barras em PDFs: O IronBarcode pode gravar imagens de códigos de barras diretamente em documentos PDF existentes, sem a necessidade de uma biblioteca PDF separada.
- Opções de pré-processamento de imagem: Correção de brilho, correção de rotação e redução de ruído podem ser configuradas no leitor para melhorar as taxas de reconhecimento em imagens capturadas em condições difíceis.
Compatibilidade com .NET e Preparação para o Futuro
IronBarcode suporta .NET Standard 2.0, .NET Framework 4.6.2 e superiores, .NET Core 3.1, e todas as versões atuais do .NET, incluindo .NET 8 e .NET 9. A biblioteca não depende de System.Drawing, o que significa que roda sem modificação no Linux e em contêineres Docker. O SDK Barcode Reader da Neodynamic tem como alvo apenas .NET Framework 2.0/3.x/4.x — seu pacote NuGet não foi atualizado desde julho de 2012, e o produto foi marcado como fim de serviço em 31 de dezembro de 2019, então ele não suporta .NET Core, .NET 5+, Linux ou Docker. O SDK Barcode Professional é fornecido em várias edições; a edição .NET Standard usa SkiaSharp e roda em .NET Core / .NET 5+, enquanto a edição .NET Windows mantém a dependência System.Drawing. O IronBarcode recebe atualizações alinhadas com o ritmo de lançamento do .NET.
Conclusão
O SDK Professional de código de barras neodinâmico e o SDK Leitor de código de barras neodinâmico representam, juntos, um modelo de produto dividido, no qual a geração e a leitura são ofertas comerciais separadas com limites de capacidade distintos. O gerador suporta códigos QR, DataMatrix, PDF417 e Aztec. O leitor não. Essa assimetria não é uma omissão menor — significa que os dois produtos não podem formar um fluxo de trabalho completo de código de barras para qualquer aplicação que exija leitura de código de barras 2D, e significa que os formatos mais usados em pagamentos móveis, rastreamento farmacêutico, logística de remessas e processamento de documentos estão ausentes do conjunto de recursos do leitor.
O Professional de código de barras neodinâmico é uma escolha legítima quando a necessidade é apenas a geração de código de barras. O SDK produz resultados de alta qualidade em uma ampla gama de simbologias, oferece suporte ao controle de DPI e à personalização específica para impressão, além de se integrar ao ecossistema mais amplo do Neodynamic ThermalLabel. Equipes com implantações exclusivas para Windows que precisam apenas de leitura de códigos 1D também podem usar o SDK do Leitor de Código de Barras sem se deparar com suas limitações de formato. Dentro desse escopo operacional restrito — somente geração ou leitura unidimensional no Windows — os produtos da Neodynamic entregam o que prometem.
IronBarcode é a escolha apropriada quando um projeto precisa tanto de geração quanto de leitura de códigos de barras, quando qualquer parte do fluxo de trabalho envolve formatos 2D, quando documentos PDF são uma fonte de entrada de códigos de barras ou quando uma arquitetura de pacote único é preferida para o gerenciamento de dependências. O modelo de licenciamento unificado, a ausência de uma dependência System.Drawing e a detecção automática de formato em todas as simbologias suportadas o tornam adequado para aplicativos multiplataforma, implantações em nuvem e sistemas que processam uma mistura de formatos de código de barras de várias fontes.
A escolha entre os dois se resume, em última análise, à questão de saber se o limite de formato no leitor de Neodynamic afeta o projeto em questão. Para equipes cujos fluxos de trabalho se limitam à geração e leitura de códigos de barras 1D no Windows, essa barreira pode nunca ser encontrada. Para equipes que precisam de códigos QR tanto na geração quanto na leitura do mesmo sistema, a barreira é intransponível dentro da família de produtos Neodynamic, sendo necessária uma biblioteca diferente, independentemente da escolhida.
Perguntas frequentes
O que é o Neodynamic Barcode Professional?
Neodynamic Barcode Professional é 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 o Neodynamic Barcode Professional e o IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o Neodynamic Barcode Professional 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 licenciamento do IronBarcode é mais fácil do que o do Neodynamic Barcode Professional?
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 suportados pelo Neodynamic Barcode Professional?
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 Neodynamic Barcode Professional?
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 Neodynamic?
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 o Neodynamic Barcode Professional e o 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 Neodynamic Barcode Professional para o IronBarcode?
A migração do Neodynamic Barcode Professional para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias pelos métodos estáticos do IronBarcode, a remoção de código repetitivo de 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()`.

