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

Aspose.BarCode for .NET vs IronBarcode: Comparação de bibliotecas de código de barras em C#

Todo desenvolvedor que já usou Aspose.BarCode escreveu alguma versão desta linha: new BarCodeReader(path, DecodeType.Code128). Funciona bem quando você sabe qual é o formato da imagem. Quando isso não acontece — quando um documento vem de um sistema externo, de um fornecedor que alterou o formato da etiqueta ou de um upload do usuário — você precisa adivinhar uma lista de tipos de decodificação ou recorrer a DecodeType.AllSupportedTypes, o que é consideravelmente mais lento. A exigência de especificação de formato não é um obstáculo intransponível, mas representa um atrito diário que se acumula em cada operação de leitura em sua base de código.

A história do PDF é a história do orçamento. Se você precisa processar códigos de barras a partir de documentos PDF, o Aspose.BarCode não consegue fazer isso sozinho. Você precisa do Aspose.PDF para .NET para renderizar as páginas em imagens primeiro. O Aspose.PDF é uma assinatura adicional: de US$ 999 a US$ 4.995 por ano, além do que você já paga pelo Aspose.BarCode. Duas assinaturas para um fluxo de trabalho que a maioria dos desenvolvedores considera como uma única tarefa.

OIronBarcodedetecta automaticamente o formato do código de barras, lê PDFs nativamente em um único pacote e oferece uma licença perpétua a partir de US$ 749. Esta comparação examina ambas as bibliotecas em detalhes para que você possa fazer uma escolha bem fundamentada.

Entendendo o Aspose.BarCode

A Aspose vem desenvolvendo bibliotecas de processamento de documentos para .NET, Java e outras plataformas há anos. O Aspose.BarCode é um dos muitos produtos da família, juntamente com o Aspose.Words, Aspose.Cells, Aspose.PDF, Aspose.Slides e cerca de uma dúzia de outros. Para equipes que já pagam pelo Aspose.Total — o pacote que inclui todos os produtos Aspose — o Aspose.BarCode é oferecido sem custo adicional. Para equipes que precisam apenas de uma biblioteca de código de barras, o modelo de assinatura é mais difícil de justificar.

O Aspose.BarCode suporta mais de 60 simbologias de código de barras, sendo a lista de formatos mais completa de qualquer biblioteca comercial de código de barras para .NET . Essa abrangência é o maior diferencial da biblioteca. A superfície da API é correspondentemente grande, e a verbosidade da API aumenta com os recursos. Gerar um código de barras Code 128 básico requer instanciar um BarcodeGenerator, definir XDimension, BarHeight e outros parâmetros e, em seguida, chamar Save com um argumento de formato explícito. A leitura requer especificar quais tipos de decodificação pesquisar, chamar ReadBarCodes() e, em seguida, iterar FoundBarCodes. Ambas as operações funcionam corretamente — são apenas mais verbosas do que o necessário.

Principais características arquitetônicas do Aspose.BarCode:

  • Modelo de leitura Format-First: Cada operação de leitura requer a especificação explícita de DecodeType. A lista alternativa DecodeType.AllSupportedTypes é significativamente mais lenta do que uma lista direcionada, porque o decodificador percorre sequencialmente todas as simbologias conhecidas.
  • API baseada em instâncias: Tanto BarCodeReader quanto BarcodeGenerator são objetos instanciados que implementam IDisposable. A falta de encapsulamento em blocos using resulta em vazamentos de recursos.
  • Sem suporte nativo a PDF: o Aspose.BarCode não consegue abrir ou renderizar documentos PDF diretamente. A leitura de códigos de barras em PDFs requer o Aspose.PDF, um produto de assinatura separado que custa entre US$ 999 e US$ 4.995 por ano.
  • Hierarquia de Parâmetros Profunda: A personalização é tratada através de cadeias de propriedades generator.Parameters.Barcode.* — uma hierarquia de objetos multinível que requer memorização.
  • Licenciamento somente por assinatura: Todos os planos são assinaturas anuais. Não há opção de assinatura perpétua disponível como produto independente.
  • Ativação de licença baseada em arquivo: Implantações de produção exigem um arquivo .lic acessível em um caminho conhecido, o que adiciona uma etapa de implantação para ambientesDockere Kubernetes.

O Modelo de Leitura Centrada no Formato

A API de leitura do Aspose.BarCode é construída partindo do pressuposto de que o chamador conhece o formato do código de barras:

// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;

var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
// Aspose.BarCode: must specify format or use slow AllSupportedTypes
using Aspose.BarCode.BarCodeRecognition;

var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
reader.ReadBarCodes();
foreach (var result in reader.FoundBarCodes)
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
Imports Aspose.BarCode.BarCodeRecognition

' Aspose.BarCode: must specify format or use slow AllSupportedTypes
Dim reader As New BarCodeReader("barcode.png", DecodeType.Code128)
reader.ReadBarCodes()
For Each result In reader.FoundBarCodes
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
Next
$vbLabelText   $csharpLabel

Quando você conhece o formato, esse padrão funciona bem. O problema é justamente esse "conhecimento do formato". Um sistema de compras que processa faturas de fornecedores não pode garantir que todos os fornecedores usem o mesmo tipo de código de barras. Um sistema de gerenciamento de documentos que aceita uploads de usuários não pode prever qual formato um scanner utilizou. Nesses casos, DecodeType.AllSupportedTypes é a alternativa, e é significativamente mais lento do que uma lista de tipos de decodificação direcionada.

O decodificador também deve ser descartado:

using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
using var reader = new BarCodeReader("barcode.png", DecodeType.Code128);
$vbLabelText   $csharpLabel

Não usar using é um vazamento de recursos. O BarcodeGenerator também implementa o IDisposable, embora as consequências de não o descartar sejam menos graves. Em ambos os casos, você está gerenciando o ciclo de vida dos objetos, algo que uma API de fábrica estática faria automaticamente.

Entendendo o IronBarcode

IronBarcode utiliza métodos de fábrica estáticos tanto para leitura quanto para escrita. Não há instâncias para construir, configurar ou descartar. Por padrão, a API de leitura é independente do formato, e a mesma chamada funciona independentemente de o arquivo de origem ser PNG, JPEG, TIFF ou PDF.

OIronBarcodeé desenvolvido e mantido pela Iron Software, uma empresa focada exclusivamente em ferramentas para desenvolvedores .NET . A biblioteca foi projetada com base no princípio de que a leitura de códigos de barras não deve exigir conhecimento prévio do formato do código de barras — o mecanismo de detecção da biblioteca determina o formato a partir do conteúdo da imagem. Para a geração, uma cadeia de métodos fluentes substitui a hierarquia de parâmetros multinível comum em outras bibliotecas.

Principais características do IronBarcode:

  • Detecção automática de formato: BarcodeReader.Read() identifica a simbologia do código de barras a partir do conteúdo da imagem sem exigir que o chamador especifique um equivalente DecodeType.
  • API estática sem estado: Todas as operações de leitura e gravação são métodos estáticos. Sem instâncias descartáveis ​​para gerenciar, e a API é naturalmente thread-safe para uso concorrente.
  • Suporte nativo a PDF: BarcodeReader.Read("doc.pdf") lê diretamente de arquivos PDF sem qualquer pacote adicional ou etapa de renderização. Os resultados incluem result.PageNumber.
  • API de Geração Fluente: BarcodeWriter.CreateBarcode() retorna um objeto encadeável. A personalização utiliza encadeamento de métodos em vez de uma hierarquia de propriedades.
  • Modelo de Licença Perpétua: Todos os planos oferecem uma compra única, sem necessidade de renovação anual.
  • Ativação de licença baseada em string: A chave de licença é definida por meio de IronBarCode.License.LicenseKey, compatível com variáveis de ambiente e gerenciadores de segredos de CI/CD.

Comparação de recursos

Recurso Aspose.BarCode IronBarcode
Detecção de formato Manual — deve especificar DecodeType ou usar a versão lenta AllSupportedTypes Automático em todos os formatos suportados.
Contagem de simbologia 60+ 50+
Suporte a PDF Sem suporte nativo — requer licença Aspose.PDF separada. Nativo — BarcodeReader.Read("doc.pdf") integrado ao pacote
Modelo de preços Somente por assinatura — US$ 999 a US$ 4.995 por ano Licença perpétua a partir de US$ 749 (pagamento único)
Licença perpétua Não disponível Sim, todos os níveis.
Estilo da API Configuração detalhada baseada em instâncias Métodos de fábrica estáticos, API fluente
Requisito de descarte Sim — BarCodeReader e BarcodeGenerator Não — métodos estáticos sem estado
Segurança da rosca Instâncias separadas são necessárias por thread. Sem estado — naturalmente seguro para uso simultâneo.

Comparação Detalhada de Recursos

Recurso Aspose.BarCode IronBarcode
Geração
Estilo API @@--CÓDIGO-63290--@@ @@--CÓDIGO-63291--@@
Modelo de personalização generator.Parameters.Barcode.* hierarquia de propriedades Cadeia de métodos fluentes (.ResizeTo(), .ChangeBarCodeColor())
Código QR com logotipo Sobreposição manual de GDI+ após a geração @@--CÓDIGO-63295--@@ integrado
Saída para bytes @@--CÓDIGO-63296--@@ @@--CÓDIGO-63297--@@
Códigos de barras coloridos @@--CÓDIGO-63298--@@ @@--CÓDIGO-63299--@@
Leitura
Especificação de formato Obrigatório (DecodeType) Não é necessário — automático
Recurso alternativo para formato desconhecido @@--CÓDIGO-63301--@@ (lento) Mesma chamada — sem necessidade de modo alternativo.
Ajuste de desempenho 12+ QualitySettings parâmetros ReadingSpeed enum — três níveis
Leitor descartável Sim — using var reader = new BarCodeReader(...) Não — chamada estática, nenhum objeto para descartar.
Acesso aos resultados @@--CÓDIGO-63338--@@ após ligar para ReadBarCodes() Valor de retorno de BarcodeReader.Read()
Propriedade de valor do código de barras @@--CÓDIGO-63308--@@ @@--CÓDIGO-63309--@@
Propriedade de nome de formato @@--CÓDIGO-63310--@@ @@--CÓDIGO-63311--@@
Suporte a PDF
Leitura nativa de PDFs Não Sim
Necessário para PDF Aspose.PDF (US$ 999 a US$ 4.995/ano adicional) Sem pacote adicional
Número da página nos resultados N / D @@--CÓDIGO-63312--@@
Licenciamento
Modelo de licença Somente por assinatura, com renovação anual. Perpétuo, compra única
Desenvolvedor único US$ 999/ano $749 (pagamento único)
10 desenvolvedores US$ 4.995/ano (Licença para o local) US$ 2.999, pagamento único (Professional)
Desenvolvedores ilimitados US$ 14.985/ano (OEM) US$ 5.999, pagamento único (ilimitado)
Suporte para PDF incluído Não — assinatura separada do Aspose.PDF Sim
Plataforma e Implantação
Ativação de licença .lic caminho do arquivo String key — variável de ambiente
Implantação em Docker É necessário copiar o arquivo .lic para a imagem ou montá-lo. Variável de ambiente — nenhum arquivo necessário
.NET Framework Sim Sim (4.6.2+)
.NET Core / .NET 5+ Sim Sim (.NET Core 3.1+, .NET 5/6/7/8/9)
Windows Sim Sim (x64/x86)
Linux Sim Sim (x64)
macOS Sim Sim (x64/ARM)
Docker Sim Sim
Azure / AWS Lambda Sim Sim

API de geração

A API de geração é onde a diferença de verbosidade entre as duas bibliotecas se torna mais visível no código do dia a dia.

Abordagem Aspose.BarCode

Aspose.BarCode usa uma classe BarcodeGenerator com uma hierarquia Parameters para configuração. Uma chamada de geração mínima requer três etapas: instanciação, chamada de salvamento e especificação de formato. O uso real normalmente requer navegar até generator.Parameters.Barcode.*:

using Aspose.BarCode.Generation;
using System.Drawing;

var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");

// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;

generator.Save("barcode.png", BarCodeImageFormat.Png);
using Aspose.BarCode.Generation;
using System.Drawing;

var generator = new BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345");

// Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2;
generator.Parameters.Barcode.BarHeight.Pixels = 100;
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below;
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial";
generator.Parameters.Barcode.Padding.Left.Pixels = 10;
generator.Parameters.Barcode.Padding.Right.Pixels = 10;
generator.Parameters.BackColor = Color.White;
generator.Parameters.Resolution = 300;

generator.Save("barcode.png", BarCodeImageFormat.Png);
Imports Aspose.BarCode.Generation
Imports System.Drawing

Dim generator As New BarcodeGenerator(EncodeTypes.Code128, "ITEM-12345")

' Common customizations require navigating a deep parameter hierarchy
generator.Parameters.Barcode.XDimension.Pixels = 2
generator.Parameters.Barcode.BarHeight.Pixels = 100
generator.Parameters.Barcode.CodeTextParameters.Location = CodeLocation.Below
generator.Parameters.Barcode.CodeTextParameters.Font.FamilyName = "Arial"
generator.Parameters.Barcode.Padding.Left.Pixels = 10
generator.Parameters.Barcode.Padding.Right.Pixels = 10
generator.Parameters.BackColor = Color.White
generator.Parameters.Resolution = 300

generator.Save("barcode.png", BarCodeImageFormat.Png)
$vbLabelText   $csharpLabel

Cada personalização navega até generator.Parameters.Barcode.*, que é uma hierarquia de objetos multinível. Não é complexo depois de memorizado, mas requer memorização.

Abordagem do IronBarcode

IronBarcode substitui a hierarquia de parâmetros por uma cadeia de métodos fluente. As configurações padrão produzem resultados corretos para a maioria dos casos de uso, e a personalização é expressa diretamente no código:

using IronBarCode;

// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");

// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
using IronBarCode;

// Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");

// Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");

// Get as bytes instead of saving to disk
byte[] pngData = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports IronBarCode

' Default settings work for most cases
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")

' Customization through a fluent chain
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")

' Get as bytes instead of saving to disk
Dim pngData As Byte() = BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Para códigos QR, a API de geração de QR Codes da IronBarcode inclui suporte para logotipos de marcas sem a necessidade de composição manual de imagens:

using IronBarCode;
using IronSoftware.Drawing;

// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded-high-ecc.png");

// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
    .ChangeBarCodeColor(Color.DarkBlue)
    .SaveAsPng("qr-colored.png");
using IronBarCode;
using IronSoftware.Drawing;

// With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");

// With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode(
    "https://example.com",
    500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded-high-ecc.png");

// Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300)
    .ChangeBarCodeColor(Color.DarkBlue)
    .SaveAsPng("qr-colored.png");
Imports IronBarCode
Imports IronSoftware.Drawing

' With brand logo — built in, no manual image overlay needed
QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")

' With high error correction (recommended when using a logo)
QRCodeWriter.CreateQrCode( _
    "https://example.com", _
    500, _
    QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded-high-ecc.png")

' Colored QR code
QRCodeWriter.CreateQrCode("https://example.com", 300) _
    .ChangeBarCodeColor(Color.DarkBlue) _
    .SaveAsPng("qr-colored.png")
$vbLabelText   $csharpLabel

O Aspose.BarCode requer desenho manual em GDI+ para sobrepor um logotipo em um código QR — gerando a imagem do código de barras e, em seguida, usando System.Drawing.Graphics para compor o logotipo centralizado sobre ela. O recurso AddBrandLogo doIronBarcodelida com isso em uma única chamada e configura automaticamente a correção de erros de forma adequada.

Leitura de código de barras em PDF

Para muitas equipes, essa é a comparação mais importante. Ler códigos de barras em documentos PDF é um fluxo de trabalho comum: faturas recebidas, etiquetas de envio salvas em PDF, arquivos de documentos digitalizados.

Abordagem Aspose.BarCode

O Aspose.BarCode não possui suporte nativo para PDF. Para ler um código de barras de um PDF com o Aspose, você precisa do Aspose.PDF para carregar o PDF e renderizar as páginas em imagens, e do Aspose.BarCode para ler essas imagens renderizadas. Ambos são produtos por assinatura. Ambos precisam de ativação de licença. Em conjunto, isso representa um custo de US$ 1.998 a US$ 9.990 por ano para o que a maioria dos desenvolvedores considera uma única funcionalidade.

// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var barcodeValues = new List<string>();

    // Step 1: Load and render the PDF using Aspose.PDF
    var pdfDocument = new Aspose.Pdf.Document(pdfPath);
    var resolution = new Resolution(300);
    var device = new PngDevice(resolution);

    for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
    {
        using var pageStream = new MemoryStream();
        device.Process(pdfDocument.Pages[pageNum], pageStream);
        pageStream.Seek(0, SeekOrigin.Begin);

        // Step 2: Scan the rendered image for barcodes using Aspose.BarCode
        using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
        foreach (var result in reader.ReadBarCodes())
        {
            barcodeValues.Add(result.CodeText);
        }
    }

    return barcodeValues;
}
// Requires both Aspose.PDF (separate license) and Aspose.BarCode
using Aspose.Pdf;
using Aspose.Pdf.Devices;
using Aspose.BarCode.BarCodeRecognition;
using System.IO;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var barcodeValues = new List<string>();

    // Step 1: Load and render the PDF using Aspose.PDF
    var pdfDocument = new Aspose.Pdf.Document(pdfPath);
    var resolution = new Resolution(300);
    var device = new PngDevice(resolution);

    for (int pageNum = 1; pageNum <= pdfDocument.Pages.Count; pageNum++)
    {
        using var pageStream = new MemoryStream();
        device.Process(pdfDocument.Pages[pageNum], pageStream);
        pageStream.Seek(0, SeekOrigin.Begin);

        // Step 2: Scan the rendered image for barcodes using Aspose.BarCode
        using var reader = new BarCodeReader(pageStream, DecodeType.AllSupportedTypes);
        foreach (var result in reader.ReadBarCodes())
        {
            barcodeValues.Add(result.CodeText);
        }
    }

    return barcodeValues;
}
Imports Aspose.Pdf
Imports Aspose.Pdf.Devices
Imports Aspose.BarCode.BarCodeRecognition
Imports System.IO

Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
    Dim barcodeValues As New List(Of String)()

    ' Step 1: Load and render the PDF using Aspose.PDF
    Dim pdfDocument As New Aspose.Pdf.Document(pdfPath)
    Dim resolution As New Resolution(300)
    Dim device As New PngDevice(resolution)

    For pageNum As Integer = 1 To pdfDocument.Pages.Count
        Using pageStream As New MemoryStream()
            device.Process(pdfDocument.Pages(pageNum), pageStream)
            pageStream.Seek(0, SeekOrigin.Begin)

            ' Step 2: Scan the rendered image for barcodes using Aspose.BarCode
            Using reader As New BarCodeReader(pageStream, DecodeType.AllSupportedTypes)
                For Each result In reader.ReadBarCodes()
                    barcodeValues.Add(result.CodeText)
                Next
            End Using
        End Using
    Next

    Return barcodeValues
End Function
$vbLabelText   $csharpLabel

Isso envolve duas configurações de licença, duas declarações using de dois namespaces, um pipeline de renderização, gerenciamento de fluxo de memória e um loop aninhado. Também utiliza DecodeType.AllSupportedTypes porque, no momento da extração da imagem, normalmente não se sabe qual formato o código de barras utiliza.

Abordagem do IronBarcode

OIronBarcodelida internamente com a análise de PDFs, a renderização de páginas e a detecção de códigos de barras. Você chama Read com um caminho que termina em .pdf, e ele retorna resultados de código de barras que incluem result.PageNumber, para que você saiba de qual página cada um veio. Sem segundo pacote, sem segunda licença, sem código de renderização.

using IronBarCode;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);
    return results.Select(r => r.Value).ToList();
}
using IronBarCode;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);
    return results.Select(r => r.Value).ToList();
}
Imports IronBarCode

Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
    Dim results = BarcodeReader.Read(pdfPath)
    Return results.Select(Function(r) r.Value).ToList()
End Function
$vbLabelText   $csharpLabel
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
// With page number context
var results = BarcodeReader.Read("invoice-batch.pdf");
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}");
}
Imports System

' With page number context
Dim results = BarcodeReader.Read("invoice-batch.pdf")
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: [{barcode.Format}] {barcode.Value}")
Next
$vbLabelText   $csharpLabel

A documentação de leitura de PDFs do IronBarcode abrange o processamento em lote de várias páginas e as opções de filtragem por intervalo de páginas.

Leitura de formatos de código de barras desconhecidos

Quando você não sabe qual formato de código de barras uma imagem contém, as duas bibliotecas lidam com a situação de maneiras muito diferentes.

Abordagem Aspose.BarCode

DecodeType.AllSupportedTypes é a solução da Aspose para cenários de formato desconhecido. A própria documentação da Aspose reconhece que esse método é mais lento do que especificar uma lista de alvos, porque o decodificador percorre sequencialmente todas as simbologias conhecidas. Para processamento de alto volume — um armazém escaneando milhares de etiquetas por minuto — essa diferença de desempenho não é trivial.

using Aspose.BarCode.BarCodeRecognition;

// AllSupportedTypes scans for every known format — significantly slower
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
using Aspose.BarCode.BarCodeRecognition;

// AllSupportedTypes scans for every known format — significantly slower
using var reader = new BarCodeReader("unknown-format.png");
reader.SetBarCodeReadType(DecodeType.AllSupportedTypes);
foreach (var result in reader.ReadBarCodes())
{
    Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}");
}
Imports Aspose.BarCode.BarCodeRecognition

' AllSupportedTypes scans for every known format — significantly slower
Using reader As New BarCodeReader("unknown-format.png")
    reader.SetBarCodeReadType(DecodeType.AllSupportedTypes)
    For Each result In reader.ReadBarCodes()
        Console.WriteLine($"{result.CodeTypeName}: {result.CodeText}")
    Next
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode

Não existe um "modo lento" e um "modo rápido" com base no conhecimento do formato. A detecção doIronBarcodeutiliza o mesmo algoritmo, independentemente de a imagem conter um código Code 128 ou um DataMatrix. Se você deseja ajustar a relação entre desempenho e precisão, a opção ReadingSpeed faz isso sem exigir conhecimento do formato:

using IronBarCode;

// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
using IronBarCode;

// The same call regardless of format — always auto-detects
var results = BarcodeReader.Read("unknown-format.png");
foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarCode

' The same call regardless of format — always auto-detects
Dim results = BarcodeReader.Read("unknown-format.png")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("document.png", options);
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};

var results = BarcodeReader.Read("document.png", options);
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}

Dim results = BarcodeReader.Read("document.png", options)
$vbLabelText   $csharpLabel

ReadingSpeed.Faster prioriza a taxa de transferência. ReadingSpeed.Detailed prioriza a precisão em imagens danificadas ou com baixo contraste. Nenhuma delas exige que você conheça o formato com antecedência. Consulte as opções de leitura do IronBarcode para obter o conjunto completo de parâmetros de ajuste.

Referência de Mapeamento de API

Aspose.BarCode IronBarcode
@@--CÓDIGO-63329--@@ @@--CÓDIGO-63330--@@
@@--CÓDIGO-63331--@@ @@--CÓDIGO-63332--@@
@@--CÓDIGO-63333--@@ @@--CÓDIGO-63334--@@
@@--CÓDIGO-63335--@@ (varredura lenta e exaustiva) Automático — sempre rápido, a mesma chamada para todos os formatos.
@@--CÓDIGO-63336--@@ (part of BarcodeReader.Read — returns results directly)
@@--CÓDIGO-63338--@@ Valor de retorno de BarcodeReader.Read
@@--CÓDIGO-63308--@@ @@--CÓDIGO-63309--@@
@@--CÓDIGO-63310--@@ @@--CÓDIGO-63311--@@
@@--CÓDIGO-63344--@@ @@--CÓDIGO-63344--@@
@@--CÓDIGO-63346--@@ @@--CÓDIGO-63347--@@ — um pacote
@@--CÓDIGO-63348--@@ @@--CÓDIGO-63349--@@
@@--CÓDIGO-63350--@@ + @@--CÓDIGO-63351--@@ (not needed — single key covers all environments)
@@--CÓDIGO-63296--@@ @@--CÓDIGO-63353--@@ ou @@--CÓDIGO-63354--@@
QREncodeMode.Auto + QRErrorLevel.LevelH + sobreposição de logotipo manual @@--CÓDIGO-63357--@@

Quando as equipes consideram migrar do Aspose.BarCode para o IronBarcode

Diversos cenários costumam levar as equipes de desenvolvimento a avaliar oIronBarcodecomo uma alternativa ao Aspose.BarCode.

Chegou a hora de renovar a assinatura.

A renovação da assinatura anual é o período em que as equipes mais frequentemente revisam as decisões relativas à biblioteca. Se o Aspose.BarCode for o único produto Aspose na pilha, o preço de US$ 999 a US$ 4.995 por ano para a funcionalidade de código de barras exige uma comparação. A conversa geralmente é assim: "Vamos pagar isso todo ano, para sempre." Qual o custo inicial doIronBarcode? Não plano Professional (US$ 2.999 para 10 desenvolvedores), oIronBarcodese paga no primeiro ano com a licença Site.

Para equipes que utilizam o Aspose.Total — onde o Aspose.BarCode vem incluído em mais de 20 outros produtos — o cálculo é diferente. O custo marginal do Aspose.BarCode nesse pacote se aproxima de zero. Essas equipes têm menos motivos para mudar.

Suporte a PDF torna-se um requisito

Muitos projetos começam com a leitura de códigos de barras em imagens e, posteriormente, adicionam suporte a PDFs quando um dos envolvidos percebe que os documentos recebidos são PDFs em vez de arquivos de imagem. Nesse ponto, a equipe do Aspose.BarCode se depara com uma decisão: adicionar o Aspose.PDF (outra assinatura), encontrar um renderizador de PDF de terceiros ou reavaliar a biblioteca de código de barras.

Adicionar o Aspose.PDF resolve a necessidade imediata, mas dobra o custo da assinatura. Encontrar um renderizador de terceiros adiciona uma dependência e um esforço de integração. Reavaliar a biblioteca de códigos de barras — e descobrir que oIronBarcodelê PDFs nativamente por uma taxa única — é frequentemente o resultado.

Cenários de formato desconhecido em produção

Aplicativos voltados para o cliente que aceitam uploads de documentos não podem controlar qual formato de código de barras um documento carregado utiliza. Se o aplicativo foi desenvolvido considerando entradas do código 128 e um cliente carrega um rótulo DataMatrix, um valor fixo como DecodeType.Code128 simplesmente não retornará nenhum resultado. A alteração para DecodeType.AllSupportedTypes corrige o problema, mas introduz um custo de desempenho.

As equipes que se depararam com esse problema — adicionar cada vez mais valores DecodeType à configuração do leitor à medida que novos formatos surgem em produção — muitas vezes acabam mantendo uma lista que precisa ser atualizada sempre que uma nova fonte de formato é adicionada. A detecção automática doIronBarcodetorna essa lista desnecessária.

Implantações em nuvem e conteinerizadas

O licenciamento baseado em arquivo do Aspose.BarCode adiciona uma etapa de implantação: o arquivo de licença deve estar acessível em tempo de execução a partir de um caminho que o aplicativo possa ler. Em um fluxo de trabalho GitOps, o arquivo de licença acaba no controle de versão (um risco de segurança) ou precisa ser injetado por meio de um volume secreto montado. A abordagem baseada em chaves doIronBarcodese integra perfeitamente aos segredos do Kubernetes e às variáveis ​​secretas de CI/CD, sem a necessidade de gerenciar arquivos na imagem do contêiner.

Considerações Comuns de Migração

As equipes que fazem a transição do Aspose.BarCode para oIronBarcodeencontram um pequeno conjunto de ajustes técnicos previsíveis.

Mapeamento de nomes de propriedades

O erro de compilação mais comum após a troca de pacotes é a renomeação de @@--CÓDIGO-63308--@@ para result.Value. Uma busca em todo o código-fonte resolve isso rapidamente:

grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
grep -r "\.CodeText" --include="*.cs" .
grep -r "\.CodeTypeName" --include="*.cs" .
SHELL

result.CodeText torna-se result.Value. @@--CÓDIGO-63310--@@ torna-se result.Format.ToString(). A propriedade result.Format é um valor de enumeração BarcodeEncoding, que também permite comparações tipadas quando necessário.

Remoção do tipo de decodificação

Todas as referências a DecodeType.* no código-fonte podem ser removidas:

grep -r "DecodeType\." --include="*.cs" .
grep -r "DecodeType\." --include="*.cs" .
SHELL

Se um DecodeType específico foi listado para melhorar o desempenho em um formato conhecido, ReadingSpeed.Faster em BarcodeReaderOptions fornece um benefício semelhante sem requisitos de conhecimento do formato.

Alteração de inicialização da licença

Aspose.BarCode usa um arquivo .lic carregado via license.SetLicense().IronBarcodeusa uma chave de string:

IronBarCode.License.LicenseKey =
    Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
    ?? throw new InvalidOperationException("IronBarcode license key not configured");
IronBarCode.License.LicenseKey =
    Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
    ?? throw new InvalidOperationException("IronBarcode license key not configured");
Imports IronBarCode
Imports System

License.LicenseKey = If(Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE"), Throw New InvalidOperationException("IronBarcode license key not configured"))
$vbLabelText   $csharpLabel

Remova o arquivo .lic do repositório e dos artefatos de compilação. Não Docker, remova a linha COPY Aspose.BarCode.lic e substitua-a por uma entrada ENV IRONBARCODE_LICENSE.

Mapeamento de EncodeTypes para BarcodeEncoding

EncodeTypes.QR corresponde a BarcodeEncoding.QRCode — a diferença de nomenclatura é onde as equipes geralmente encontram o primeiro erro de compilação após migrar o código de geração. Todas as outras correspondências são equivalentes diretas com nomenclatura consistente.

Funcionalidades adicionais do IronBarcode

Além dos principais pontos de comparação, oIronBarcodeoferece funcionalidades que podem ser relevantes dependendo do contexto da aplicação:

Compatibilidade com .NET e Preparação para o Futuro

OIronBarcodeé compatível com o.NET Framework4.6.2+, .NET Core 3.1+ e .NET 5, 6, 7, 8 e 9. A biblioteca recebe atualizações regulares alinhadas ao ciclo de lançamentos do .NET da Microsoft, garantindo compatibilidade com o .NET 10, previsto para o final de 2026. O Aspose.BarCode também é compatível com a mesma faixa de versões do .NET , portanto, nenhuma das bibliotecas oferece vantagem de compatibilidade nas versões atuais. A diferença significativa para a preparação futura reside no licenciamento: uma licença perpétua doIronBarcodeadquirida hoje cobre as versões futuras do .NET sem custos adicionais, enquanto as assinaturas do Aspose.BarCode exigem renovação contínua para acessar as versões atualizadas.

Conclusão

Aspose.BarCode eIronBarcoderepresentam duas filosofias diferentes no design de bibliotecas de código de barras. O Aspose.BarCode é construído sobre uma API explícita, baseada em instâncias, onde o chamador especifica o formato, gerencia o ciclo de vida dos objetos e configura cada operação por meio de uma hierarquia de propriedades. OIronBarcodeé construído sobre uma API estática e independente de formato, onde a biblioteca lida internamente com a detecção, o ciclo de vida do objeto e a renderização de PDF. Nenhuma das duas abordagens está inerentemente correta — a escolha certa depende das necessidades da aplicação.

O Aspose.BarCode é a opção mais robusta para equipes que já operam dentro do ecossistema Aspose. Quando o Aspose.Total já está licenciado, o Aspose.BarCode não adiciona nenhum custo adicional, e sua lista com mais de 60 simbologias é a mais abrangente disponível em qualquer biblioteca comercial de código de barras para .NET . Para aplicações que exigem formatos incomuns — MaxiCode, DotCode ou simbologias postais específicas que não constam na lista de mais de 50 formatos doIronBarcode— o Aspose.BarCode pode ser a única opção viável. Sua maturidade e variedade de formatos são pontos fortes genuínos.

Para equipes que avaliam o Aspose.BarCode como uma compra independente, o cálculo de valor é mais difícil de ser feito. A exigência de especificação de formato adiciona atrito a cada operação de leitura. A ausência de suporte nativo para PDF dobra o custo da assinatura para uma funcionalidade que oIronBarcodeinclui em seu pacote básico. E o modelo de assinatura significa que o custo se acumula anualmente — US$ 4.995 por ano para uma equipe de 10 desenvolvedores chegam a US$ 24.975 em cinco anos, em comparação com US$ 2.999 como uma compra única doIronBarcodeProfessional . A detecção automática, a leitura nativa de PDFs e a licença perpétua doIronBarcoderesolvem todas essas três preocupações em um único pacote.

A decisão final depende da adequação ao ecossistema e dos requisitos de simbologia. Equipes profundamente integradas aos produtos Aspose, ou equipes que precisam de formatos fora da lista de formatos suportados pelo IronBarcode, devem usar o Aspose.BarCode. Equipes que desejam uma licença perpétua independente, leitura nativa de PDFs e uma API que não exige conhecimento de formato a cada leitura acharão oIronBarcodea opção mais prática.

Perguntas frequentes

O que é o Aspose.BarCode para .NET?

Aspose.BarCode para .NET é 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 Aspose.BarCode para .NET e o IronBarcode?

O IronBarcode utiliza uma API estática e sem estado, que não requer gerenciamento de instâncias, enquanto o Aspose.BarCode para .NET normalmente exige a criação e configuração de instâncias antes do uso. O IronBarcode também oferece suporte nativo a PDF, detecção automática de formato e licenciamento com chave única em todos os ambientes.

O licenciamento do IronBarcode é mais simples do que o do Aspose.BarCode para .NET?

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 Aspose.BarCode para .NET?

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 Aspose.BarCode para .NET?

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 Aspose.BarCode?

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 Aspose.BarCode para .NET 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 Aspose.BarCode para .NET para o IronBarcode?

A migração do Aspose.BarCode para .NET para o IronBarcode envolve principalmente a substituição de chamadas de API baseadas em instâncias por métodos estáticos do IronBarcode, a remoção de código repetitivo relacionado a licenciamento e a atualização dos nomes das propriedades de resultado. A maioria das migrações consiste em reduzir o código em vez de adicioná-lo.

O IronBarcode gera códigos QR com logotipos?

Sim. O método `QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png")` incorpora uma imagem da marca em um código QR nativamente, com correção de erros configurável. Códigos QR coloridos também são suportados através do método `ChangeBarCodeColor()`.

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