Ir para o conteúdo do rodapé
VíDEOS

Como usar um leitor de código de barras no Blazor | IronBarcode

Migrando de Spire.Barcode para IronBarcode

A BarcodeScanner.Scan() do Spire.Barcode requer um argumento BarCodeType em cada chamada. À medida que uma base de código cresce para lidar com diversas fontes de documentos, novas etiquetas de fornecedores e novos formatos de código de barras, esse design gera loops de tentativa e erro que acumulam custos de manutenção ao longo do tempo. Este guia abrange todo o caminho do Spire.Barcode para o IronBarcode: os motivos pelos quais as equipes fazem essa transição, as etapas mecânicas para executá-la e os padrões de código antes e depois para cada operação comum.

Por que migrar do Spire.Barcode?

Sobrecarga de Especificação de Formato: Cada chamada para BarcodeScanner.Scan() no Spire.Barcode requer um valor enum BarCodeType que o código chamador deve fornecer. Aplicações que processam códigos de barras de fontes desconhecidas ou com formatos mistos devem manter uma lista de possíveis tipos e percorrer essa lista até encontrar uma correspondência. Cada formato adicionado ao fluxo de trabalho exige a atualização da matriz de candidatos, o reteste da lógica de detecção e a confirmação de que a ordem de iteração não faça com que um formato oculte o outro. Essa sobrecarga aumenta proporcionalmente à diversidade de formatos.

Limitações da avaliação da versão gratuita: O FreeSpire.Barcode reduz intencionalmente o desempenho de leitura e limita o conjunto de simbologias disponíveis em comparação com o produto comercial. Os benchmarks e testes de cobertura de formato realizados durante uma avaliação do FreeSpire.Barcode não representam o comportamento comercial do Spire.Barcode. Equipes que se comprometem com uma compra com base em uma avaliação da versão gratuita podem descobrir, após a compra, que o produto se comporta de maneira diferente em produção — principalmente em relação à taxa de transferência e às simbologias suportadas.

PDF requer duas bibliotecas: Spire.Barcode não consegue ler códigos de barras diretamente de arquivos PDF. Os fluxos de trabalho baseados em PDF exigem o pacote Spire.PDF separado com sua própria licença, além de código escrito por desenvolvedores para iterar pelas páginas, extrair imagens de cada página e alimentar essas imagens no leitor de códigos de barras. Uma tarefa que conceitualmente pertence à leitura de código de barras é dividida entre dois produtos, dois contratos de licença e um código de infraestrutura significativo.

Complexidade do Tipo de Retorno: BarcodeScanner.Scan() retorna string[], que contém apenas valores decodificados. O formato do código de barras detectado não está incluído na devolução. Aplicações que precisam encaminhar resultados por formato — enviando valores de código QR para um processador e valores Code128 para outro, por exemplo — devem manter uma variável de tipo separada, derivada da etapa de iteração que produziu o resultado, criando um gerenciamento de estado adicional além da própria leitura.

O problema fundamental

O loop de suposição de tipo é o sintoma mais visível da restrição obrigatória BarCodeType. Em um código-fonte Spire.Barcode que processa documentos de múltiplas fontes, esse padrão aparece repetidamente:

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

IronBarcode remove o loop completamente. A detecção de formato está integrada à biblioteca:

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarcode

' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode vs Spire.Barcode: Comparação de Recursos

Recurso Spire.Barcode IronBarcode
Detecção automática de formato Não Sim
O parâmetro BarCodeType é obrigatório. Sim Não
Formatar metadados no resultado Não Sim
Leitura nativa de PDFs Não (requer Spire.PDF) Sim
Biblioteca adicional para PDF Spire.PDF (licença separada) None
desempenho de leitura do nível gratuito Degradado intencionalmente Velocidade máxima
marcas d'água de nível gratuito Grande, cobre o código de barras Pequeno, apenas na borda
Simbologias de nível gratuito ~20 tipos Mais de 50 tipos
Inscrição para o nível gratuito Sim Não
Modelo de API de geração Objeto de configurações + gerador Fábrica estática com cadeia fluida
Código QR com logotipo personalizado Somente para uso comercial Todos os níveis
Tipo de retorno da leitura string[] BarcodeResults (com metadados de tipo)
Contagem de simbologia 39+ (comercial) 50+
Modelo de licença Licença perpétua por usuário + assinatura Perpétuo com renovação opcional

Início rápido

Passo 1: Substitua o pacote NuGet

Remova o pacote ou pacotes Spire atualmente em uso:

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

Se Spire.PDF for usado para outras operações de documento além da extração de código de barras, retenha-o e remova apenas os caminhos de código relacionados ao código de barras.

Instale o IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Etapa 2: Atualizar Namespaces

Substitua todas as importações de namespace do Spire pelo namespace IronBarcode:

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Etapa 3: Inicializar a licença

Substitua a inicialização da licença Spire por uma única atribuição de propriedade do IronBarcode na inicialização do aplicativo. Consulte a página de licenciamento do IronBarcode para obter informações sobre formatos de chave e opções de implantação:

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key")

' Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key")

' Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Para ambientes Docker e de CI, a chave de licença pode ser fornecida por meio de uma variável de ambiente:

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Exemplos de migração de código

Leitura de um código de barras de formato conhecido

Uma leitura de formato único no Spire.Barcode passa o tipo explicitamente e recebe um string[].

Abordagem Spire.Barcode:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)

If results.Length > 0 Then
    ProcessShipment(results(0))
End If
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
Imports IronBarCode

Dim results = BarcodeReader.Read("shipping-label.png")

If results.Any() Then
    ProcessShipment(results.First().Value)
End If
$vbLabelText   $csharpLabel

O parâmetro BarCodeType é removido. Se a lógica subsequente precisar confirmar o formato detectado, results.First().Format fornece isso sem requerer uma variável de estado separada.

Colapso de um Loop de Tipos de Formato Misto

Quando uma base de código Spire.Barcode lida com documentos que podem conter diversos formatos, o ciclo de tentativa e erro de tipo se acumula ao longo do tempo à medida que novos formatos entram no fluxo de trabalho.

Abordagem Spire.Barcode:

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
}

Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
    Dim found As String() = scanner.Scan("document-scan.png", type)
    allValues.AddRange(found)
Next
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
Imports IronBarCode

' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
$vbLabelText   $csharpLabel

A função de leitura de imagens do IronBarcode processa todas as mais de 50 simbologias em uma única passagem. Quando a velocidade de leitura precisa ser ajustada para processamento em lote de alto volume, BarcodeReaderOptions fornece esse controle sem adicionar ramificações específicas de formato:

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("document-scan.png", options)
$vbLabelText   $csharpLabel

Para orientação sobre como selecionar o valor ReadingSpeed apropriado, consulte a documentação das opções de velocidade de leitura.

Geração de um código de barras

A geração do Spire.Barcode requer a instanciação de um objeto BarcodeSettings, a atribuição de cada propriedade individualmente, a passagem das configurações para um BarCodeGenerator e, em seguida, a chamada de GenerateImage() antes de qualquer arquivo ser gravado.

Abordagem Spire.Barcode:

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("shipping-label.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

O objeto mutável BarcodeSettings e a instância separada BarCodeGenerator são substituídos por uma única chamada de fábrica estática com uma cadeia fluente. Não há risco de configurações serem compartilhadas acidentalmente em chamadas simultâneas porque cada invocação CreateBarcode() é independente.

Leitura de códigos de barras em um documento PDF

O Spire.Barcode não consegue ler PDFs diretamente. A abordagem baseada no Spire requer o pacote Spire.PDF separado para abrir o arquivo, iterar suas páginas, extrair imagens raster de cada página e, em seguida, passar essas imagens uma a uma para o leitor de códigos de barras.

Abordagem Spire.Barcode:

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
Imports Spire.Pdf
Imports Spire.Barcode

Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")

Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()

For Each page As PdfPageBase In pdf.Pages
    Dim images() As Image = page.ExtractImages()
    For Each image As Image In images
        Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
        extractedValues.AddRange(found)
    Next
Next
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
Imports IronBarCode

Dim results = BarcodeReader.Read("invoices.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode lê documentos PDF diretamente sem exigir Spire.PDF ou qualquer gerenciamento manual de página. O número da página de onde cada código de barras foi extraído está disponível no objeto de resultado. Uma vez que o código de leitura de PDF é substituído, a referência de pacote Spire.PDF e todas as importações using Spire.Pdf; podem ser removidas do projeto.

Referência de mapeamento da API Spire.Barcode para IronBarcode

Spire.Barcode IronBarcode Notas
new BarcodeScanner() BarcodeReader.Read() (estático) Não é necessária nenhuma instância do scanner.
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path) Parâmetro de tipo removido
BarCodeType.Code128 (obrigatório) Detecção automática Não é necessário ser equivalente.
BarCodeType.QRCode (obrigatório) Detecção automática Não é necessário ser equivalente.
string[] results de Scan() Coleção BarcodeResults Acesso aos valores via .Value
results[0] (string) results[0].Value
Formato desconhecido no resultado result.Format Tipo incluído no objeto de resultado
new BarcodeSettings() Parâmetros em CreateBarcode() Não é necessário nenhum objeto de configuração.
settings.Type = BarCodeType.X BarcodeEncoding.X como segundo parâmetro
settings.Data = "value" Primeiro parâmetro de CreateBarcode()
new BarCodeGenerator(settings) Não é necessário A fábrica estática a substitui.
generator.GenerateImage() .SaveAsPng() / .SaveAsJpeg() Métodos de saída específicos do formato
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key" Defina uma única vez na inicialização.
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key" Mesma substituição de linha única
Spire.PDF (para leitura de PDF) Não é necessário Suporte nativo a PDF integrado

Problemas e soluções comuns em migrações

Problema 1: Remoção do parâmetro BarCodeType

Spire.Barcode: scanner.Scan(path, BarCodeType.Code128) — o argumento de tipo é obrigatório pela assinatura do método. Remover esse elemento causa um erro de compilação.

Solução: Substitua toda a chamada por BarcodeReader.Read(path). Pesquise na base de código por BarCodeType. para localizar todas as ocorrências. Loops de suposição de tipo (blocos foreach iterando sobre um array candidato BarCodeType[]) podem ser excluídos por inteiro; uma única chamada BarcodeReader.Read() substitui o loop.

Problema 2: Tipo de retorno string[]

Spire.Barcode: Scan() returns string[]. O código subsequente que atribui isso a uma variável string[] ou passa para um método que espera string[] falhará na compilação após a migração.

Solução: Atualize os locais de chamada para trabalhar com BarcodeResults. Para obter um array de strings simples, use .Select(r => r.Value).ToArray(). Para acessar o primeiro resultado, use .First()?.Value. Se o formato detectado for necessário posteriormente, ele está disponível no objeto resultante por meio de .Format — nenhuma variável de estado separada é necessária.

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
Imports System.Linq

' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
    .Select(Function(r) r.Value) _
    .ToArray()

' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.Value
$vbLabelText   $csharpLabel

Problema 3: Limpeza do pacote Spire.PDF

Spire.Barcode: Os fluxos de trabalho de leitura de PDF dependem de Spire.PDF para acesso às páginas e extração de imagens. O projeto faz referência ao pacote e contém importações using Spire.Pdf; e uso PdfDocument / PdfPageBase espalhados por vários arquivos.

Solução: Após substituir todo o código de extração de código de barras do PDF por BarcodeReader.Read("file.pdf"), execute uma auditoria grep para confirmar que não existem mais referências Spire.Pdf antes de remover o pacote:

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

Remova o pacote somente quando todas as referências forem removidas:

dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
SHELL

Problema 4: Alterações no espaço de nomes

Spire.Barcode: The Spire.Barcode namespace contains BarcodeScanner, BarcodeSettings, BarCodeGenerator, and BarCodeType. O namespace IronBarCode contém BarcodeReader, BarcodeWriter, BarcodeEncoding e BarcodeReaderOptions.

Solução: Substitua using Spire.Barcode; por using IronBarCode; globalmente. O enum BarCodeType usado na geração é substituído por BarcodeEncoding. O enum BarCodeType usado na leitura não tem equivalente no IronBarcode— ele é simplesmente removido, pois a detecção de formato é automática.

Lista de verificação para migração de código de barras Spire.

Tarefas pré-migração

Antes de fazer alterações, audite o código-fonte para identificar todos os usos de Spire.Barcode:

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • Documente todos os arquivos que contenham arrays candidatos BarCodeType (loops de suposição de tipo a serem removidos)
  • Identifique quaisquer variáveis string[] que recebam resultados de Scan() e precisarão de atualizações de tipo
  • Confirme se Spire.PDF é usado para operações além da extração de código de barras

Tarefas de atualização de código

  1. Remova o pacote NuGet FreeSpire.Barcode ou Spire.Barcode
  2. Remova o pacote NuGet Spire.PDF se a extração de código de barras fosse seu único uso
  3. Instale o pacote NuGet IronBarcode
  4. Substitua todos os using Spire.Barcode; por using IronBarCode;
  5. Remova todas as importações using Spire.Pdf; onde não forem mais necessárias
  6. Substitua a inicialização da licença: ApplyKey() ou SetLicenseKey() por IronBarCode.License.LicenseKey = "key"
  7. Remova todas as instanciações new BarcodeScanner()
  8. Substitua todas as chamadas scanner.Scan(path, BarCodeType.X) por BarcodeReader.Read(path)
  9. Elimine os loops foreach que tentam adivinhar o tipo de dado; substitua cada uma por uma única chamada BarcodeReader.Read()
  10. Remover os blocos de iteração de página PDF e extração de imagem; substitua por BarcodeReader.Read("file.pdf")
  11. Atualize as atribuições de resultado string[] para usar .Value ou .Select(r => r.Value).ToArray()
  12. Substitua blocos new BarcodeSettings() por cadeias BarcodeWriter.CreateBarcode(data, encoding)
  13. Remova as instanciações new BarCodeGenerator(settings)
  14. Substitua .GenerateImage() + image.Save() por .SaveAsPng() ou .SaveAsJpeg()
  15. Substitua os valores de enumerações BarCodeType.X na geração por BarcodeEncoding.X

Testes pós-migração

  • Confirme se todos os formatos escaneados anteriormente através do loop candidato são detectados corretamente por BarcodeReader.Read()
  • Medir a capacidade de processamento em lote e confirmar se ela atende aos requisitos de produção.
  • Verificar se a extração do código de barras do PDF produz valores e números de página corretos.
  • Confirme a qualidade e a legibilidade do código de barras gerado com um leitor físico ou de software.
  • Verifique se a chave de licença está corretamente carregada em todos os ambientes de implantação (local, teste, produção, CI/CD). Execute os comandos grep audit das Tarefas de Pré-Migração para confirmar que não restam referências ao Spire.

Principais benefícios da migração para o IronBarcode

Eliminação da sobrecarga de manutenção de formatos: após a migração, não há lista de tipos candidatos para manter nem loop de adivinhação de tipo para atualizar quando um novo formato de código de barras entra no fluxo de trabalho. BarcodeReader.Read() lida com o conjunto completo de simbologia automaticamente, e o formato detectado é incluído em cada objeto de resultado para roteamento subsequente.

Avaliação precisa antes da aquisição: a versão de avaliação do IronBarcode utiliza o mesmo código binário do produto licenciado, em velocidade máxima de leitura e com o conjunto completo de simbologia. Os parâmetros de desempenho e os testes de cobertura de formato realizados durante a avaliação experimental são transferidos diretamente para a produção. As equipes podem tomar decisões de compra com a confiança de que o comportamento avaliado é o comportamento implementado.

Suporte de PDF em Pacote Único: A extração de código de barras dos arquivos PDF é tratada pela mesma chamada BarcodeReader.Read() usada para imagens. Não são necessárias bibliotecas secundárias, licenças adicionais ou código de iteração de páginas de manual. Equipes que anteriormente mantinham ambas Spire.Barcode e Spire.PDF reduzem para uma única dependência para todo o fluxo de trabalho de código de barras.

Objetos de Resultado com Metadados de Formato: Cada entrada em uma coleção BarcodeResults carrega o valor decodificado, a simbologia detectada, o número da página de origem para entradas PDF e a região delimitadora dentro da imagem fonte. Aplicações que precisam rotear, filtrar ou registrar por formato têm essas informações disponíveis no resultado sem gerenciamento de estado adicional.

API de Geração Simplificada: O padrão de fábrica estática em BarcodeWriter.CreateBarcode() elimina o objeto mutável BarcodeSettings e a instância BarCodeGenerator separada. Cada chamada de geração é independente, reduzindo o risco de vazamento de configuração entre operações simultâneas.

Compatibilidade futura: o IronBarcode recebe atualizações regulares alinhadas com as versões do runtime .NET . À medida que a adoção do .NET 10 aumenta até 2026, as atualizações de compatibilidade garantem que as bases de código migradas continuem a ser compiladas e executadas sem a necessidade de alterações nas bibliotecas em cada nova versão do .NET .

ObserveSpire é uma marca registrada de seu respectivo proprietário. Este site não é afiliado, endossado ou patrocinado por e-iceblue. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Por que devo migrar do Spire.Barcode para o IronBarcode?

Entre os motivos comuns estão a simplificação do licenciamento (removendo a complexidade do SDK e da chave de tempo de execução), a eliminação dos limites de taxa de transferência, a obtenção de suporte nativo para PDF, a melhoria da implantação em Docker/CI/CD e a redução do código repetitivo da API em produção.

Como faço para substituir as chamadas da API Spire.Barcode pelo IronBarcode?

Substitua o código padrão de criação de instâncias e licenciamento por `IronBarCode.License.LicenseKey = "key"`. Substitua as chamadas de leitura por `BarcodeReader.Read(path)` e as chamadas de gravação por `BarcodeWriter.CreateBarcode(data, encoding)`. Os métodos estáticos não exigem gerenciamento de instâncias.

Quanta alteração de código ocorre ao migrar do Spire.Barcode para o IronBarcode?

A maioria das migrações resulta em menos linhas de código. O código repetitivo de licenciamento, os construtores de instância e a configuração explícita de formato são removidos. As operações principais de leitura/gravação são mapeadas para equivalentes mais curtos em IronBarcode, com objetos de resultado mais limpos.

Preciso manter o Spire.Barcode e o IronBarcode instalados durante a migração?

Não. A maioria das migrações são substituições diretas, e não operações paralelas. Migre uma classe de serviço por vez, substitua a referência do NuGet e atualize os padrões de instanciação e chamada de API antes de passar para a próxima classe.

Qual é o nome do pacote NuGet para IronBarcode?

O pacote é 'IronBarCode' (com B e C maiúsculos). Instale-o com 'Install-Package IronBarCode' ou 'dotnet add package IronBarCode'. A diretiva using no código é 'using IronBarCode;'.

Como o IronBarcode simplifica a implantação do Docker em comparação com o Spire.Barcode?

IronBarcode é um pacote NuGet sem arquivos SDK externos ou configuração de licença montada. No Docker, defina a variável de ambiente IRONBARCODE_LICENSE_KEY e o pacote cuidará da validação da licença na inicialização.

O IronBarcode detecta automaticamente todos os formatos de código de barras após a migração do Spire.Barcode?

Sim. O IronBarcode detecta automaticamente a simbologia em todos os formatos suportados. A enumeração explícita de BarcodeTypes não é necessária. Se o formato já for conhecido e o desempenho for importante, o BarcodeReaderOptions permite restringir o espaço de busca como uma otimização.

O IronBarcode consegue ler códigos de barras de PDFs sem uma biblioteca separada?

Sim. O método `BarcodeReader.Read("document.pdf")` processa arquivos PDF nativamente. Os resultados incluem o número da página, o formato, o valor e a confiança de cada código de barras encontrado. Não é necessária nenhuma etapa externa de renderização de PDF.

Como o IronBarcode lida com o processamento paralelo de códigos de barras?

Os métodos estáticos do IronBarcode são sem estado e thread-safe. Use Parallel.ForEach diretamente em listas de arquivos sem gerenciamento de instâncias por thread. BarcodeReaderOptions.MaxParallelThreads controla o orçamento interno de threads.

Quais propriedades de resultado são alteradas ao migrar de Spire.Barcode para IronBarcode?

Renomeações comuns: BarcodeValue torna-se Value, BarcodeType torna-se Format. Os resultados do IronBarcode também incluem Confidence e PageNumber. Uma função de busca e substituição em toda a solução lida com as renomeações no código de processamento de resultados existente.

Como configuro o licenciamento do IronBarcode em um pipeline de CI/CD?

Armazene IRONBARCODE_LICENSE_KEY como um segredo de pipeline e atribua IronBarCode.License.LicenseKey no código de inicialização do aplicativo. Um único segredo abrange todos os ambientes, incluindo desenvolvimento, teste, homologação e produção.

O IronBarcode suporta a geração de códigos QR com estilos personalizados?

Sim. O método QRCodeWriter.CreateQrCode() suporta cores personalizadas através do método ChangeBarCodeColor(), incorporação de logotipo através do método AddBrandLogo(), níveis configuráveis de correção de erros e múltiplos formatos de saída, incluindo PNG, JPG, PDF e fluxo de dados.

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