Comparação entre as bibliotecas de código de barras LEADTOOLS Barcode e IronBarcode em C#
Para usar o Código de barras LEADTOOLS no Docker, você precisa montar um arquivo de licença no seu contêiner em um caminho específico. Esse arquivo deve acompanhar cada implantação. As variáveis de ambiente não são suficientes. Cada implementação do LEADTOOLS é um problema de gerenciamento de arquivos.
Isso não é uma crítica à engenharia da LEADTOOLS — reflete uma arquitetura de licenciamento de 30 anos, projetada antes mesmo da existência de contêineres. Mas em 2026, quando seu pipeline de CI/CD precisar construir e enviar uma imagem de contêiner, você estará ou incorporando um arquivo .LIC na imagem ou montando-a como um volume em tempo de execução. De qualquer forma, sua biblioteca de código de barras requer acesso ao sistema de arquivos antes de ser inicializada. Essa é a principal compensação que esta comparação explora.
Entendendo o código de barras LEADTOOLS
O Código de barras LEADTOOLS faz parte do abrangente SDK de imagens de documentos da LEAD Technologies, que está em desenvolvimento contínuo desde 1990. O módulo de código de barras suporta mais de 40 simbologias e integra-se perfeitamente ao amplo ecossistema LEADTOOLS para OCR, processamento de formulários, manipulação de PDFs e visualização de imagens. Essa integração do ecossistema é realmente valiosa quando um aplicativo requer todas essas funcionalidades de um único fornecedor. Quando o requisito é a leitura de código de barras em um microsserviço independente ou em uma aplicação específica, essa mesma integração representa uma sobrecarga que deve ser considerada em cada implementação.
A arquitetura da biblioteca reflete sua idade. O LEADTOOLS foi projetado em uma era de gerenciamento explícito de recursos, configuração manual e licenciamento baseado em sistema de arquivos. Cada uma dessas decisões de projeto fazia sentido dentro do seu contexto. Não desenvolvimento .NET moderno — cargas de trabalho conteinerizadas, pipelines CI/CD, sistemas de gerenciamento de segredos — essas mesmas decisões criam atritos que as equipes precisam contornar ativamente.
A implantação do Código de barras LEADTOOLS requer, no mínimo, cinco pacotes NuGet . A extração de código de barras de PDF adiciona um sexto pacote. Não Windows, o MSVC++ 2017 Runtime deve estar presente no host. O arquivo de saída publicado de um aplicativo de código de barras LEADTOOLS tem cerca de 148 MB.
Principais características arquitetônicas do código de barras LEADTOOLS:
- Arquitetura de Licença Baseada em Arquivo: Requer um arquivo
.LICfisicamente presente no disco em um caminho conhecido, além de uma string de chave de desenvolvedor. Ambos devem estar acessíveis em tempo de execução para que a biblioteca seja inicializada. - Modelo de licenciamento de dois níveis: as licenças de desenvolvimento e as licenças de implantação têm preços e são obtidas separadamente. Para obter orçamentos para implantação em produção, entre em contato com a equipe de vendas da LEADTOOLS.
- Instalação de múltiplos pacotes: Uma instalação mínima compatível com código de barras requer
Leadtools.Barcode,Leadtools,Leadtools.Codecs,Leadtools.Codecs.PngeLeadtools.Codecs.Jpeg. Cada formato de imagem adicional requer seu próprio pacote de codecs. - Dependência de Runtime Nativo: As implementações do Windows exigem o Runtime do MSVC++ 2017, além do runtime do .NET .
- Declaração explícita de simbologia: A leitura de código de barras requer a passagem de um array de valores enum
BarcodeSymbologyespecificando quais formatos devem ser lidos. Os formatos omitidos não serão detectados. - Sequência de inicialização em camadas: Após carregar o arquivo de licença, o aplicativo deve verificar se a licença não expirou e se cada recurso necessário — leitura 1D, leitura 2D, gravação — está desbloqueado individualmente antes de criar um
BarcodeEngine. - Mais de 40 simbologias suportadas: Ampla cobertura de formatos para códigos de barras 1D e 2D, como parte de uma plataforma de imagem completa.
A arquitetura de licenciamento baseada em arquivos
A inicialização do LEADTOOLS requer aproximadamente 20 linhas de código antes que a primeira operação de leitura de código de barras possa ser executada. A sequência abrange a resolução do caminho do arquivo, a verificação de expiração e a verificação de bloqueio por recurso:
// LEADTOOLS: Mais de 20 linhas before the first barcode operation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
// LEADTOOLS: Mais de 20 linhas before the first barcode operation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode
' LEADTOOLS: Mais de 20 linhas before the first barcode operation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")
If RasterSupport.KernelExpired Then
Throw New InvalidOperationException("LEADTOOLS license has expired")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
Throw New InvalidOperationException("1D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
Throw New InvalidOperationException("2D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
Throw New InvalidOperationException("Barcode writing is locked")
End If
Dim engine As New BarcodeEngine()
Este bloco de inicialização deve ser executado com sucesso antes que qualquer operação de leitura ou gravação de código de barras funcione. Se o arquivo .LIC estiver ausente, o caminho estiver incorreto ou as permissões do arquivo estiverem erradas, o LEADTOOLS não será inicializado — não silenciosamente, mas com um erro que interrompe a operação.
Entendendo o IronBarcode
IronBarcode é uma biblioteca .NET especializada em códigos de barras, criada especificamente para leitura e geração de códigos de barras em aplicações .NET . Em vez de ser apenas um módulo dentro de um SDK de imagens maior, oIronBarcodetem como objetivo principal a funcionalidade de código de barras. A biblioteca é distribuída como um único pacote NuGet que inclui suporte para todos os formatos de imagem, extração nativa de código de barras PDF e correção de erros baseada em aprendizado de máquina, sem exigir pacotes de codecs adicionais ou dependências de tempo de execução nativas.
IronBarcode utiliza um design de API estático. As operações de leitura e escrita estão disponíveis como chamadas de métodos estáticos em BarcodeReader e BarcodeWriter sem exigir a criação de instâncias ou objetos de inicialização. A ativação da licença consiste na atribuição de uma única sequência de caracteres. A biblioteca detecta automaticamente os formatos de código de barras em todas as mais de 50 simbologias suportadas, eliminando a necessidade de enumerar os formatos esperados antes de cada operação de leitura.
A biblioteca é compatível com o.NET Standard 2.0e versões superiores, oferecendo compatibilidade com o .NET Framework 4.6.2+, .NET 5, .NET 6, .NET 7, .NET 8 e .NET 9. Não é necessário nenhum ambiente de execução nativo específico da plataforma em nenhum sistema operacional compatível.
Principais características do IronBarcode:
- Licenciamento por chave de sequência: A ativação da licença requer a atribuição de uma única sequência de caracteres. A chave pode vir de uma variável de ambiente, um arquivo de configuração, um gerenciador de segredos ou qualquer fonte que forneça um valor de string.
- Pacote NuGet único: Todo o suporte a formatos de imagem, extração de PDF e recursos de código de barras estão incluídos em
IronBarcode. Não são necessários pacotes de codecs adicionais. - API Fluente Estática:
BarcodeReader.Read()eBarcodeWriter.CreateBarcode()são pontos de entrada estáticos. Não é necessário criar instâncias de mecanismo ou objetos de codec. - Detecção automática de formato: Lê em todas as mais de 50 simbologias suportadas sem exigir que o usuário especifique os formatos esperados.
- Suporte integrado para PDF: A extração de código de barras de PDF está incluída no pacote básico, sem necessidade de instalação adicional.
- Mais de 50 simbologias suportadas: Abrange todos os principais formatos de código de barras 1D e 2D, incluindo Code 128, Code 39, QR Code, Data Matrix, PDF417, EAN-13 e UPC-A.
- Correção de erros por aprendizado de máquina: A correção de imagens baseada em aprendizado de máquina melhora a precisão da leitura em imagens de código de barras danificadas ou de baixa qualidade.
Comparação de recursos
A tabela a seguir destaca as diferenças fundamentais entre o código de barras LEADTOOLS e o IronBarcode:
| Recurso | Código de barras LEADTOOLS | IronBarcode |
|---|---|---|
| Modelo de licença | Arquivo + chave (dois níveis) | Somente chave (nível único) |
| Área de atuação do SDK | Mais de 5 pacotes + tempo de execução nativo | 1 pacote |
| Código de inicialização | Mais de 20 linhas | 1 linha |
| Implantação em Docker | Montagem de arquivo necessária | Variável de ambiente |
| Extração de código de barras PDF | Pacote separado | Embutido |
| Detecção automática de formato | Limitado | Sim |
| Simbologias totais | 40+ | 50+ |
| Correção de erros de aprendizado de máquina | Não | Sim |
Comparação Detalhada de Recursos
| Recurso | Código de barras LEADTOOLS | IronBarcode |
|---|---|---|
| Licenciamento | ||
| Modelo de licença | Arquivo + chave de desenvolvedor | Somente a chave de string |
| Níveis de licença | Desenvolvimento + Implantação (separados) | Licença perpétua única |
| Preços de implantação | Entre em contato com vendas | Preço publicado |
| Licença em variável de ambiente | Parcial (somente a chave, o arquivo ainda é necessário) | Sim |
| Licença em gerente de segredos | Arquivo ainda necessário | Sim (somente texto) |
| Instalação | ||
| Pacotes NuGet necessários | 5+ | 1 |
| Dependência de tempo de execução nativa | MSVC++ 2017 (Windows) | Nenhum |
| Pacote de suporte para PDF | Separar (Leadtools.Codecs.Pdf) |
Incluído |
| Tamanho de saída publicado | ~148 MB | ~39 MB |
| Leitura | ||
| Simbologias 1D | 25+ | 30+ |
| Simbologias 2D | 15+ | 15+ |
| Detecção automática de formato | Limitado | Sim |
| É necessária uma declaração explícita da simbologia. | Sim | Não |
| Extração de código de barras PDF | Sim (pacote separado) | Sim (integrado) |
| Correção de erros de aprendizado de máquina | Não | Sim |
| Detecção de múltiplos códigos de barras | Sim | Sim |
| Geração | ||
| Geração de código 128 | Sim | Sim |
| Geração de código QR | Sim | Sim |
| Logotipo de código QR | Não | Sim |
| API de geração fluente | Não | Sim |
| Formatos de saída | PNG, JPEG, BMP | PNG, JPEG, BMP, SVG, HTML, PDF |
| Design de API | ||
| Estilo API | Gráfico de objetos legados | Estático fluente |
| Linhas de inicialização | 20+ | 1 |
| Camada de carregamento de imagem | RasterCodecs (separados) | Automático |
| Plataforma | ||
| Multiplataforma | Parcial (dependências nativas) | Completo (.NET Standard) |
| Suporte a Docker/containers | Montagem de arquivo necessária | Variável de ambiente |
| .NET Standard 2.0 | Sim | Sim |
| .NET 8 / .NET 9 | Sim | Sim |
Arquitetura de Licenças
A arquitetura de licenciamento é a diferença mais significativa entre essas duas bibliotecas para equipes que implantam em infraestrutura moderna.
Abordagem LEADTOOLS
O licenciamento do LEADTOOLS requer um arquivo .LIC fisicamente presente no sistema de arquivos em um caminho conhecido, além de uma string de chave de desenvolvedor passada para RasterSupport.SetLicense. Após chamar SetLicense, o aplicativo deve verificar se a licença não expirou e se cada recurso de código de barras está desbloqueado individualmente. Somente após todas as verificações serem aprovadas é que um BarcodeEngine pode ser criado:
// LEADTOOLS: Mais de 20 linhas before the first barcode operation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
// LEADTOOLS: Mais de 20 linhas before the first barcode operation
using Leadtools;
using Leadtools.Barcode;
RasterSupport.SetLicense(
@"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
"your-developer-key-here");
if (RasterSupport.KernelExpired)
throw new InvalidOperationException("LEADTOOLS license has expired");
if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
throw new InvalidOperationException("1D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
throw new InvalidOperationException("2D barcode reading is locked");
if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
throw new InvalidOperationException("Barcode writing is locked");
var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode
' LEADTOOLS: Mais de 20 linhas before the first barcode operation
RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")
If RasterSupport.KernelExpired Then
Throw New InvalidOperationException("LEADTOOLS license has expired")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
Throw New InvalidOperationException("1D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
Throw New InvalidOperationException("2D barcode reading is locked")
End If
If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
Throw New InvalidOperationException("Barcode writing is locked")
End If
Dim engine As New BarcodeEngine()
Este modelo baseado em arquivos é anterior aos modernos sistemas de gerenciamento de segredos. O arquivo .LIC deve ser provisionado em todos os ambientes onde o aplicativo é executado: máquinas de desenvolvimento, agentes de compilação de CI, servidores de teste e hosts de produção.
Abordagem do IronBarcode
A inicialização da licença doIronBarcodeconsiste em uma única linha:
// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
Essa chave pode vir de uma variável de ambiente, um arquivo de configuração ou um gerenciador de segredos — de qualquer lugar de onde uma string possa vir. Não há arquivo para localizar, nenhuma verificação de expiração para gravar e nenhum bloqueio de recurso para verificar. Para opções de configuração e implantação de licenças , a documentação abrange todos os padrões: variáveis de ambiente, Azure Key Vault e muito mais.
Implantação de contêineres e Docker
A diferença na arquitetura de licenciamento torna-se concreta ao escrever um Dockerfile.
Abordagem LEADTOOLS
A implantação do Docker do LEADTOOLS requer a cópia do arquivo .LIC para a imagem do contêiner ou a montagem dele como um volume em tempo de execução:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
# The license file must be physically present in the container
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
Essa abordagem acarreta complicações posteriores. A rotação ou revogação de uma chave de licença requer a reconstrução da imagem ou a remontagem do volume. O pipeline de CI/CD deve incluir o arquivo .LIC no checkout ou decodificá-lo a partir de um segredo codificado em base64 durante a compilação. Os segredos do Kubernetes, projetados para pares de strings chave-valor, agora precisam armazenar o conteúdo de arquivos. As equipes que executam contêineres efêmeros precisam resolver o problema de provisionamento de arquivos em cada novo nó.
Abordagem do IronBarcode
IronBarcode não requer nenhum arquivo no contêiner:
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY publish/ .
ENV IRONBARCODE_LICENSE=your-license-key
ENTRYPOINT ["dotnet", "YourApp.dll"]
O modelo de variáveis de ambiente funciona nativamente com segredos do Docker, segredos do Kubernetes, AWS Secrets Manager, Azure Key Vault e HashiCorp Vault — qualquer sistema que possa injetar uma string no ambiente de um contêiner. Existe um guia completo de implantação do Docker e do Linux que abrange imagens base Alpine e Debian.
Leitura de código de barras
Abordagem LEADTOOLS
A leitura do LEADTOOLS requer a criação de uma instância RasterCodecs para carregar a imagem, uma instância BarcodeEngine para analisá-la e uma matriz explícita de valores BarcodeSymbology especificando quais formatos procurar. Omitir uma simbologia da matriz significa que o LEADTOOLS não detectará códigos de barras desse tipo:
// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
return barcodes.Select(b => b.Value).ToArray();
// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();
var symbologies = new[]
{
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
};
var barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies);
return barcodes.Select(b => b.Value).ToArray();
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim barcodes As IEnumerable(Of BarcodeData)
Using codecs As New RasterCodecs()
Using image As RasterImage = codecs.Load(imagePath)
Dim engine As New BarcodeEngine()
Dim symbologies As BarcodeSymbology() = {
BarcodeSymbology.Code128,
BarcodeSymbology.QR,
BarcodeSymbology.DataMatrix,
BarcodeSymbology.EAN13,
BarcodeSymbology.UPCA
}
barcodes = engine.Reader.ReadBarcodes(
image,
LogicalRectangle.Empty,
0,
symbologies)
End Using
End Using
Return barcodes.Select(Function(b) b.Value).ToArray()
Abordagem do IronBarcode
OIronBarcodedetecta automaticamente os formatos em todas as mais de 50 simbologias suportadas. O caminho do arquivo é passado diretamente; Não é necessária nenhuma camada de carregamento de imagem ou matriz de simbologia:
// IronBarcode: auto-detect, no object setup
using IronBarCode;
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
// IronBarcode: auto-detect, no object setup
using IronBarCode;
var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
Imports IronBarCode
Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
Para obter mais detalhes sobre opções de leitura, ajuste de velocidade versus precisão e tratamento de imagens complexas, o guia de leitura de códigos de barras a partir de imagens abrange toda a API.
Geração de código de barras
Abordagem LEADTOOLS
A geração de código de barras LEADTOOLS requer a criação de um objeto BarcodeData com simbologia, valor e limites — em seguida, a criação de um objeto em branco RasterImage com dimensões de pixel explícitas, profundidade de bits, ordem de bytes e perspectiva de visualização — em seguida, o preenchimento com um fundo branco usando FillCommand — em seguida, a chamada de engine.Writer.WriteBarcode() — e, por fim, o salvamento com RasterCodecs. São cinco operações distintas em vários tipos de objetos:
// LEADTOOLS: 5 operations, 25+ lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
Value = data,
Bounds = new LeadRect(0, 0, 400, 100)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 100, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
// LEADTOOLS: 5 operations, 25+ lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;
var engine = new BarcodeEngine();
var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
Value = data,
Bounds = new LeadRect(0, 0, 400, 100)
};
using var image = new RasterImage(
RasterMemoryFlags.Conventional,
400, 100, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
null, IntPtr.Zero, 0);
new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);
using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs
Dim engine As New BarcodeEngine()
Dim barcodeData As New BarcodeData(BarcodeSymbology.Code128) With {
.Value = data,
.Bounds = New LeadRect(0, 0, 400, 100)
}
Using image As New RasterImage(
RasterMemoryFlags.Conventional,
400, 100, 24,
RasterByteOrder.Bgr,
RasterViewPerspective.TopLeft,
Nothing, IntPtr.Zero, 0)
Dim fillCommand As New FillCommand(RasterColor.White)
fillCommand.Run(image)
engine.Writer.WriteBarcode(image, barcodeData, Nothing)
Using codecs As New RasterCodecs()
codecs.Save(image, outputPath, RasterImageFormat.Png, 0)
End Using
End Using
Abordagem do IronBarcode
OIronBarcodegerencia internamente a criação de imagens, o preenchimento de fundo e a codificação:
// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng(outputPath);
Imports IronBarcode
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng(outputPath)
Para a criação de imagens de código de barras , a APIIronBarcodeexpõe estilos, margens, rotação e conversão de formato por meio de uma cadeia fluente, em vez de uma série de objetos de configuração imperativos.
Referência de Mapeamento de API
| Código de barras LEADTOOLS | IronBarcode | Notas |
|---|---|---|
| @@--CÓDIGO-64170--@@ | @@--CÓDIGO-64171--@@ | Somente a chave — nenhum arquivo |
| @@--CÓDIGO-64172--@@ | (removed) | Não é necessário verificar a data de validade. |
| @@--CÓDIGO-64173--@@ | (removed) | Todas as funcionalidades incluídas |
| @@--CÓDIGO-64174--@@ | (removed) | Todas as funcionalidades incluídas |
| @@--CÓDIGO-64175--@@ | (removed) | Todas as funcionalidades incluídas |
| @@--CÓDIGO-64176--@@ | Estático — nenhuma instância | BarcodeReader, BarcodeWriter são estáticos |
| @@--CÓDIGO-64179--@@ | (removed) | Passe o caminho do arquivo diretamente |
| @@--CÓDIGO-64180--@@ | (removed) | Passe o caminho do arquivo diretamente |
| @@--CÓDIGO-64181--@@ | @@--CÓDIGO-64182--@@ | Detecta simbologias automaticamente |
| @@--CÓDIGO-64183--@@ | @@--CÓDIGO-64184--@@ | Mesmo nome de propriedade |
| @@--CÓDIGO-64185--@@ | @@--CÓDIGO-64186--@@ | Propriedade renomeada |
| @@--CÓDIGO-64187--@@ | @@--CÓDIGO-64188--@@ | Criação fluente |
| @@--CÓDIGO-64189--@@ | @@--CÓDIGO-64190--@@ | Alteração de namespace |
| @@--CÓDIGO-64191--@@ | @@--CÓDIGO-64192--@@ | Mudança de nome |
| @@--CÓDIGO-64193--@@ | @@--CÓDIGO-64194--@@ | Mesmo nome |
| @@--CÓDIGO-64195--@@ | @@--CÓDIGO-64196--@@ | Mesmo nome |
| @@--CÓDIGO-64197--@@ | @@--CÓDIGO-64198--@@ | Mesmo nome |
| @@--CÓDIGO-64199--@@ | @@--CÓDIGO-64200--@@ | Mesmo nome |
| @@--CÓDIGO-64201--@@ + @@--CÓDIGO-64202--@@ | @@--CÓDIGO-64203--@@ | Uma cadeia de métodos |
| @@--CÓDIGO-64204--@@ + @@--CÓDIGO-64205--@@ | (removed) | Interno aoIronBarcode |
Quando as equipes consideram migrar do código de barras LEADTOOLS para o IronBarcode
Implantação de contêineres e nuvem
Equipes que migram cargas de trabalho para Docker, Kubernetes ou ambientes sem servidor se deparam com o modelo de licenciamento baseado em arquivos como um problema operacional concreto. Cada nova instância de contêiner, cada nova região de nuvem e cada novo ambiente devem ter o arquivo .LIC provisionado e acessível antes que o aplicativo seja iniciado. Sistemas de gerenciamento de segredos projetados para segredos com valores de string não se adaptam bem a artefatos baseados em arquivos. As equipes que padronizaram a injeção de variáveis de ambiente para configuração descobrem que o LEADTOOLS exige uma etapa de provisionamento separada, que fica fora de seu fluxo de trabalho normal de segredos. Quando o volume de implantações aumenta — escalonamento automático, implantação azul-verde, replicação multirregional — o custo operacional do provisionamento de arquivos aumenta na mesma proporção.
Gerenciamento de dependências e presença do SDK
Quando a leitura ou geração de código de barras é o requisito principal ou único de um serviço, a instalação do LEADTOOLS, composto por cinco pacotes, e a dependência do MSVC++ 2017 Runtime representam uma sobrecarga que afeta o tamanho da imagem do contêiner, a latência de inicialização a frio em funções sem servidor e os tempos de compilação em pipelines de CI/CD. Equipes que desenvolvem microsserviços leves ou funções no estilo Lambda descobrem que a inclusão de um SDK de imagens completo para atender a uma necessidade específica de código de barras cria uma superfície de dependência difícil de justificar em revisões de código e arquitetura. Quando uma futura atualização da plataforma exigir o teste de uma alteração na dependência de tempo de execução nativa, essa tarefa ficará a cargo da equipe que mantém o serviço.
Transparência de preços
As equipes de desenvolvimento que precisam orçar um projeto antes de iniciá-lo não conseguem obter uma visão completa dos custos a partir dos preços publicados pela LEADTOOLS. As licenças de desenvolvimento estão cotadas entre US$ 1.295 e US$ 1.469 por desenvolvedor por ano, mas as licenças de implantação em produção para aplicativos de servidor são cotadas separadamente pela equipe de vendas. Uma equipe de cinco desenvolvedores que precisa implementar soluções em três servidores de produção deve obter um orçamento personalizado antes de confirmar se o LEADTOOLS se encaixa em seu orçamento. Equipes que preferem tomar decisões de compras com base em preços publicados — comparando opções, obtendo aprovação interna ou planejando orçamentos plurianuais — descobrem que esse modelo exige uma conversa com a equipe de vendas antes que a avaliação seja concluída.
Requisitos que exigem apenas código de barras
Aplicações que precisam ler ou gerar códigos de barras sem exigir OCR, imagens DICOM, anotação de documentos ou outros recursos do Suite LEADTOOLS estão pagando por uma plataforma mais abrangente do que suas necessidades exigem. O valor de integração do LEADTOOLS — a capacidade de transferir dados entre seus módulos de OCR, código de barras e processamento de documentos — é real, mas só se aplica quando várias funcionalidades desse Suite estão em uso ativo. Quando a necessidade se limita à leitura de códigos de barras em uma API da web ou à geração em um fluxo de processamento de documentos, uma biblioteca de códigos de barras específica atende diretamente à necessidade, sem a complexidade de uma plataforma de imagens abrangente.
Considerações Comuns de Migração
Substituição de inicialização de licença
Todo o bloco de inicialização do LEADTOOLS — caminho do arquivo, verificação de expiração e verificação de bloqueio por recurso — é substituído por uma única linha. A chave de licença doIronBarcodepode ser armazenada em qualquer sistema de gerenciamento de segredos que armazene strings.
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
' Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
Padrão de variável de ambiente do Docker
A linha COPY LEADTOOLS.LIC em qualquer Dockerfile é removida completamente. A licença é fornecida por meio de uma variável de ambiente em tempo de execução, que funciona com todos os mecanismos padrão de injeção de segredos:
# Remove: COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
# Remove: ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
# Add:
ENV IRONBARCODE_LICENSE=your-license-key
Remoção de Pacotes
Os cinco pacotes LEADTOOLS — e o codec PDF opcional — foram removidos e substituídos por um único pacote:
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf
dotnet add package IronBarcode
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf
dotnet add package IronBarcode
Funcionalidades adicionais do IronBarcode
Além das funcionalidades abordadas nas seções anteriores, oIronBarcodeoferece os seguintes recursos relevantes para cenários comuns de código de barras em .NET :
- Extração de código de barras de PDF : Leia códigos de barras de documentos PDF com várias páginas com iteração automática de páginas e relatório de cada resultado — sem necessidade de percorrer todas as páginas.
- Correção de erros baseada em aprendizado de máquina : O pré-processamento de imagens por aprendizado de máquina melhora a precisão de leitura em imagens de código de barras danificadas, com baixo contraste ou rotacionadas, sem necessidade de configuração adicional.
- Processamento em lote assíncrono :
BarcodeReader.ReadAsync()suporta leitura assíncrona, permitindo processamento em lote de alto rendimento sem bloquear threads. - Logotipo em código QR :
QRCodeWriterpermite incorporar uma imagem de logotipo no centro de um código QR com uma única chamada de método, usando correção de erros integrada para manter a legibilidade. - Saída em SVG e HTML :
BarcodeWriterpode gerar códigos de barras como arquivos SVG escaláveis ou como elementos HTML embutidos, além de formatos de imagem raster. - Ajustes do BarcodeReaderOptions : A velocidade de leitura, as dicas de simbologia esperadas, a detecção de múltiplos códigos de barras e o pré-processamento de imagem podem ser configurados por leitura, sem afetar o estado global.
Compatibilidade com .NET e Preparação para o Futuro
OIronBarcodeé compatível com o .NET Standard 2.0, oferecendo compatibilidade com o .NET Framework 4.6.2 e versões superiores, .NET 5, .NET 6, .NET 7, .NET 8 e .NET 9. A biblioteca não possui requisitos de tempo de execução nativo específicos da plataforma, permitindo a implantação no Windows, Linux e macOS sem etapas adicionais de provisionamento. À medida que a adoção do .NET 10 avança até 2026, o ritmo regular de lançamentos daIronBarcodegarante a compatibilidade com as versões atuais e futuras do .NET . O design estático da API e o modelo de distribuição de pacote único permanecem estáveis entre as versões, portanto, as atualizações de versão não exigem alterações no código de inicialização do aplicativo ou na configuração de implantação.
Conclusão
LEADTOOLS Barcode eIronBarcoderepresentam pontos diferentes no espaço de design para bibliotecas de código de barras .NET . O LEADTOOLS é um módulo dentro de um SDK de imagens abrangente com 30 anos de existência, que possui uma arquitetura de licenciamento baseada em arquivos, uma instalação com múltiplos pacotes e um design de API legado que reflete as normas de engenharia da época em que foi construído.IronBarcodeé uma biblioteca de código de barras desenvolvida especificamente para .NET moderno, com instalação em pacote único, licenciamento por chave de string e uma API estática que não requer objetos de inicialização.
O Código de barras LEADTOOLS é a escolha adequada quando um aplicativo já utiliza o LEADTOOLS para outras funcionalidades — OCR, processamento de imagens DICOM, anotação de documentos ou reconhecimento de formulários. Nesses contextos, adicionar a funcionalidade de código de barras por meio do mesmo SDK amplia um investimento existente sem a necessidade de um novo fornecedor ou um novo contrato de licenciamento. Organizações com contratos Enterprise LEADTOOLS já firmados podem encontrar recursos de código de barras disponíveis a um baixo custo marginal. Para aplicações que realmente precisam da abrangência da plataforma de imagens LEADTOOLS, o valor da integração entre os módulos é real.
IronBarcode é a escolha adequada quando a leitura ou geração de códigos de barras é o requisito principal ou único de um serviço, quando o aplicativo é implantado em contêineres ou infraestrutura nativa da nuvem, ou quando a equipe precisa de preços previsíveis antes de iniciar o desenvolvimento. O modelo de instalação de pacote único e licenciamento por variável de ambiente está alinhado com a forma como os serviços .NET modernos são configurados, implantados e dimensionados. A API estática fluente reduz o código de inicialização e operação necessário para a funcionalidade de código de barras.
A diferença prática entre as duas bibliotecas fica mais evidente em cenários de implantação. Quando uma equipe adiciona um novo ambiente, expande para uma nova região de nuvem ou rotaciona uma credencial de licença, oIronBarcodeexige a atualização de uma string em um gerenciador de segredos. O LEADTOOLS requer o provisionamento de um arquivo. Essa distinção não é uma crítica à engenharia do LEADTOOLS — é uma descrição do que cada arquitetura exige. As equipes que realizam uma avaliação honesta devem aplicar essa descrição diretamente ao seu modelo de implantação e decidir qual se encaixa melhor.
Perguntas frequentes
O que é o código de barras LEADTOOLS?
LEADTOOLS Barcode é uma biblioteca .NET para gerar e ler códigos de barras em aplicações C#. É uma das várias alternativas que os desenvolvedores avaliam ao selecionar uma solução de código de barras para projetos .NET.
Quais são as principais diferenças entre o código de barras LEADTOOLS e o IronBarcode?
O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o LEADTOOLS Barcode 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 LEADTOOLS Barcode?
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 LEADTOOLS Barcode?
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 LEADTOOLS Barcode?
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 que acontece com o LEADTOOLS?
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 código de barras LEADTOOLS 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 sistema de código de barras LEADTOOLS para o IronBarcode?
A migração do LEADTOOLS Barcode 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 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()`.

