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

Comparação entre a leitura de código de barras do Google ML Kit e a biblioteca de código de barras em C# IronBarcode.

Código de barras LEADTOOLS vs IronBarcode: Licenciamento, Pegada e Implantação de Contêiner

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. O arquivo de licença faz parte do conjunto de artefatos de implantação, não apenas uma variável de ambiente.

Isso não é uma crítica à engenharia do LEADTOOLS — reflete um modelo de licenciamento baseado em arquivo que antecede os padrões de implantação nativos de contêiner. Mas em 2026, quando seu pipeline de CI/CD precisar construir e enviar uma imagem de contêiner, você estará incorporando um arquivo .LIC na imagem ou montando-o 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 inicializar. Essa é a troca subjacente 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. A saída publicada de uma aplicação de código de barras LEADTOOLS é substancialmente maior que uma alternativa de pacote único.

Principais características arquitetônicas do código de barras LEADTOOLS:

  • Arquitetura de Licença Baseada em Arquivo: Requer um arquivo .LIC presente fisicamente 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 Multi-Pacotes: Uma instalação mínima com capacidade de 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 passar um array de valores BarcodeSymbology especificando quais formatos escanear. Os formatos omitidos não serão detectados.
  • Sequência de Inicialização Estratificada: Após carregar o arquivo de licença, a aplicação deve verificar se a licença não expirou e se cada recurso necessário — leitura 1D, leitura 2D, escrita — 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:

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();
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

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 de arquivo estiverem erradas, a inicialização da licença falhará e será apresentada como uma exceção na inicializaçã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, o IronBarcode tem 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étodo estáticas em BarcodeReader e BarcodeWriter sem exigir criação de instância 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 Único NuGet: Todo suporte a formatos de imagem, extração de PDF e capacidades de código de barras estão incluídos em IronBarcode. Não são necessários pacotes de codecs adicionais.
  • API Estática Fluente: 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 Requer lista de simbologias Sim (mais de 50 formatos)
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) None
Pacote de suporte para PDF Separado (Leadtools.Codecs.Pdf) Incluído
Tamanho de saída publicado Maior (múltiplos pacotes + dependências nativas) Menor (pacote único)
Leitura
Simbologias 1D 25+ 30+
Simbologias 2D 15+ 15+
Detecção automática de formato Requer lista de simbologias Sim (mais de 50 formatos)
É 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 Baseado em instância (motor + codecs) 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 LEADTOOLS requer um arquivo .LIC presente fisicamente no sistema de arquivos em um caminho conhecido, além de uma string de chave de desenvolvedor passada para RasterSupport.SetLicense. Depois de chamar SetLicense, a aplicação deve verificar se a licença não expirou e se cada recurso de código de barras está desbloqueado individualmente. Só após todas as verificações serem aprovadas é que um BarcodeEngine pode ser criado:

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();
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

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 todo ambiente onde a aplicação é executada: máquinas de desenvolvedores, agentes de build CI, servidores de staging e hosts de produção.

Abordagem do IronBarcode

A inicialização da licença do IronBarcode consiste em uma única linha:

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-LICENSE-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 configuração e opções de implantação de licença, a documentação cobre todos os padrões: variáveis de ambiente, appsettings.json, Azure Key Vault, e 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 Docker do LEADTOOLS requer copiar o arquivo .LIC na imagem do contêiner ou montá-lo 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 CI/CD deve verificar o arquivo .LIC ou decodificá-lo de um segredo em base64 no tempo de construção. Segredos do Kubernetes projetados para pares de string chave-valor agora precisam armazenar conteúdo de arquivo. 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 LEADTOOLS requer criar uma instância RasterCodecs para carregar a imagem, uma instância BarcodeEngine para escaneá-la, e um array explícito 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:

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();
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 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

O IronBarcode detecta 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:

using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
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 criar um objeto BarcodeData com simbologia, valor e limites — depois criar um RasterImage em branco com dimensões de pixel explícitas, profundidade de bits, ordem de byte e perspectiva de visualização — depois preenchê-lo com um fundo branco usando FillCommand — depois chamar engine.Writer.WriteBarcode() — e depois salvar com RasterCodecs. São cinco operações distintas em vários tipos de objetos:

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);
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

O IronBarcode gerencia internamente a criação de imagens, o preenchimento de fundo e a codificação:

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

Para a criação de imagens de código de barras , a API IronBarcode expõ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
RasterSupport.SetLicense(path, key) IronBarCode.License.LicenseKey = "key" Somente a chave — nenhum arquivo
RasterSupport.KernelExpired (removed) Não é necessário verificar a data de validade.
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) (removed) Todas as funcionalidades incluídas
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) (removed) Todas as funcionalidades incluídas
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) (removed) Todas as funcionalidades incluídas
new BarcodeEngine() Estático — nenhuma instância BarcodeReader, BarcodeWriter são estáticos
new RasterCodecs() (removed) Passe o caminho do arquivo diretamente
codecs.Load(imagePath) (removed) Passe o caminho do arquivo diretamente
engine.Reader.ReadBarcodes(image, rect, 0, symbologies) BarcodeReader.Read(imagePath) Detecta simbologias automaticamente
BarcodeData.Value result.Value Mesmo nome de propriedade
BarcodeData.Symbology result.Format Propriedade renomeada
new BarcodeData(BarcodeSymbology.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Criação fluente
BarcodeSymbology.Code128 BarcodeEncoding.Code128 Alteração de namespace
BarcodeSymbology.QR BarcodeEncoding.QRCode Mudança de nome
BarcodeSymbology.DataMatrix BarcodeEncoding.DataMatrix Mesmo nome
BarcodeSymbology.PDF417 BarcodeEncoding.PDF417 Mesmo nome
BarcodeSymbology.EAN13 BarcodeEncoding.EAN13 Mesmo nome
BarcodeSymbology.UPCA BarcodeEncoding.UPCA Mesmo nome
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) .SaveAsPng(path) Uma cadeia de métodos
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) (removed) Interno ao IronBarcode

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 da nuvem, e cada novo ambiente deve ter o arquivo .LIC provisionado e acessível antes que a aplicação inicie. 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 começam em aproximadamente $1,469 por desenvolvedor por ano, mas as licenças de implantação em produção para aplicações de servidor são cotadas separadamente através 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 do IronBarcode pode 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 inteiramente. 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 BarCode
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 BarCode
SHELL

Funcionalidades adicionais do IronBarcode

Além das funcionalidades abordadas nas seções anteriores, o IronBarcode oferece os seguintes recursos relevantes para cenários comuns de código de barras em .NET :

  • Extração de Código de Barras em PDF: Leia códigos de barras de documentos PDF de várias páginas com iteração automática de página e relatórios PageNumber em cada resultado — sem necessidade de loop de página.
  • 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 alta velocidade sem bloquear threads.
  • Marcação de Logo em Código QR: QRCodeWriter suporta a incorporação de uma imagem de logotipo no centro de um código QR com uma única chamada de método, usando correção de erro embutida para manter a escaneabilidade.
  • Saída SVG e HTML: BarcodeWriter pode gerar códigos de barras como arquivos SVG escaláveis ou como elementos inline em HTML, além dos 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

O IronBarcode é 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 da IronBarcode garante 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 e IronBarcode representam 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, o IronBarcode exige 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 Iron

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