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

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 .LIC fisicamente 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.Png e Leadtools.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 BarcodeSymbology especificando 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()
$vbLabelText   $csharpLabel

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

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

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

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

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

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

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

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
SHELL

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 : QRCodeWriter permite 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 : BarcodeWriter pode 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()`.

Curtis Chau
Redator Técnico

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

Leia mais

Equipe de suporte de ferro

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