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
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
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
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
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
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"
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")
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
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
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
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()
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)
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)
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")
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
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
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
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" .
Remova o pacote somente quando todas as referências forem removidas:
dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
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" .
- 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 deScan()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
- Remova o pacote NuGet
FreeSpire.BarcodeouSpire.Barcode - Remova o pacote NuGet
Spire.PDFse a extração de código de barras fosse seu único uso - Instale o pacote NuGet
IronBarcode - Substitua todos os
using Spire.Barcode;porusing IronBarCode; - Remova todas as importações
using Spire.Pdf;onde não forem mais necessárias - Substitua a inicialização da licença:
ApplyKey()ouSetLicenseKey()porIronBarCode.License.LicenseKey = "key" - Remova todas as instanciações
new BarcodeScanner() - Substitua todas as chamadas
scanner.Scan(path, BarCodeType.X)porBarcodeReader.Read(path) - Elimine os loops foreach que tentam adivinhar o tipo de dado; substitua cada uma por uma única chamada
BarcodeReader.Read() - Remover os blocos de iteração de página PDF e extração de imagem; substitua por
BarcodeReader.Read("file.pdf") - Atualize as atribuições de resultado
string[]para usar.Valueou.Select(r => r.Value).ToArray() - Substitua blocos
new BarcodeSettings()por cadeiasBarcodeWriter.CreateBarcode(data, encoding) - Remova as instanciações
new BarCodeGenerator(settings) - Substitua
.GenerateImage()+image.Save()por.SaveAsPng()ou.SaveAsJpeg() - Substitua os valores de enumerações
BarCodeType.Xna geração porBarcodeEncoding.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 .
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.

