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

Como personalizar e estilizar códigos de barras em C#

Migrando deOnBarcodepara IronBarcode

Este guia abrange todo o processo de migração doOnBarcodepara o IronBarcode . Ele aborda a mudança de configuração em três etapas, fornece exemplos de código antes e depois para cada padrão comum, mapeia a APIOnBarcodepara seus equivalentes no IronBarcode, documenta problemas que surgem durante a migração e fornece uma lista de verificação de termos de pesquisa para auditar sua base de código antes de considerar a migração concluída.

Por que migrar do OnBarcode?

Sobrecarga de Aquisição de Dois SKUs:OnBarcodepublica preços perpétuos para o SDK do Generator (apenas Linear e Linear + 2D) e lista o SDK do Reader como um produto precificado separadamente. Uma organização que precisa de ambas as capacidades deve concluir dois processos de aquisição contra dois SKUs — selecionando o nível correto do Generator para os simbologias em uso, depois comprando o Reader separadamente — antes que o custo total seja acordado. O atrito é a duplicação em duas compras, em vez de um único item de linha.

Sobrecarga de Produto Dividida: A geração e a leitura são produtos separados com pacotes NuGet separados, namespaces de licença separados, chaves de licença separadas e cronogramas de versão separados. Um projeto que utiliza ambos os produtos deve configurar duas chaves de licença na inicialização, rastrear duas versões de pacotes durante as atualizações e manter o conhecimento de dois ciclos de lançamento independentes. Quando o requisito de leitura é adicionado a um projeto que originalmente previa apenas a geração de conteúdo, todo o processo de aquisição e integração deve ser repetido para o segundo produto.

Lacunas no fluxo de trabalho com PDFs: OOnBarcodenão oferece suporte nativo para leitura de códigos de barras em documentos PDF. Projetos que processam códigos de barras incorporados em faturas, manifestos de remessa, pedidos de compra ou digitalizações de arquivo precisam adquirir uma biblioteca separada de renderização de PDF para imagem, integrá-la ao fluxo de trabalho, gerenciar sua licença separadamente e passar as páginas renderizadas para o SDKOnBarcodeReader uma de cada vez. Isso resulta em uma solução com duas dependências, quando uma solução com apenas uma dependência seria suficiente.

Verbosidade da API: O geradorOnBarcoderequer a instância de um objeto Barcode, atribuindo várias propriedades — incluindo propriedades com valores padrão sensatos, como Resolution, BarWidth e BarHeight — e, em seguida, chamando um método de geração. O mesmo resultado pode ser obtido com significativamente menos código usando uma API de fábrica estática. Multiplicado pela geração em lote, o padrão de atribuição de propriedades produz grandes volumes de código repetitivo que precisam ser revisados ​​e mantidos.

O problema fundamental

A configuração de licença dupla é o ponto de atrito mais imediato para qualquer projeto que necessite tanto de geração quanto de leitura de dados. OOnBarcoderequer duas chamadas separadas para dois namespaces de licença distintos na inicialização:

// OnBarcode: two products, two DLL references, no runtime key
//OnBarcodeuses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;
// OnBarcode: two products, two DLL references, no runtime key
//OnBarcodeuses pre-licensed DLLs — the purchased DLL is already activated.
// There is no runtime SetLicense() call; the license is baked into the downloaded assembly.
using OnBarcode.Barcode;
using OnBarcode.Barcode;
Imports OnBarcode.Barcode
Imports OnBarcode.Barcode
$vbLabelText   $csharpLabel

O IronBarcode simplifica isso para uma única atribuição de propriedade que abrange todas as funcionalidades — geração, leitura, suporte a PDF e operações em lote — sob uma única chave:

// IronBarcode: one package, one key, one line
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// IronBarcode: one package, one key, one line
using IronBarCode;

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

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Todas as operações de código de barras no aplicativo — independentemente de gerar, ler ou processar PDFs — são executadas sob essa única configuração.

IronBarcode vs OnBarcode: Comparação de Recursos

Recurso OnBarcode IronBarcode
Geração de código de barras Sim Sim
Leitura de código de barras Produto separado, compra separada Incluído
Leitura de código de barras em PDF Não suportado nativamente Nativo — nenhuma biblioteca externa é necessária.
Detecção automática de formato na leitura Não — BarcodeType[] explícita requerida Sim
Metadados do resultado (formato, posição, página) Não disponível — apenas string[] bruto Sim — BarcodeResults com metadados completos
Código QR com sobreposição de logotipo Código GDI+ manual necessário Embutido
Preço publicado Sim — páginas por produto (níveis do Generator + Reader separado) Sim — uma única página cobre todas as capacidades
Uma única chave de licença para todas as funcionalidades. Não — chaves separadas por produto Sim
Distribuição NuGet Disponível, juntamente com downloads de DLL legadas Disponível desde o lançamento.
Acesso ao código-fonte Somente nível ilimitado Não disponível
Suporte para .NET 8/9 Sim Sim
Configuração de licença Docker/nuvem Manual Suporte a variáveis ​​de ambiente

Guia rápido: Migração doOnBarcodepara o IronBarcode

Passo 1: Remova as referências ao pacote OnBarcode

Se o seu projeto utiliza pacotes NuGet , remova ambos:

dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
dotnet remove package OnBarcode.Barcode.Generator
dotnet remove package OnBarcode.Barcode.Reader
SHELL

Se o seu projeto utiliza a distribuição antiga baseada em DLL, também remova o bloco de referência manual do seu .csproj:


<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>

<ItemGroup>
  <Reference Include="OnBarcode.Barcode">
    <HintPath>lib\OnBarcode.Barcode.dll</HintPath>
    <Private>true</Private>
  </Reference>
</ItemGroup>
XML

Exclua os arquivos DLL do diretório lib/ ou de onde quer que estejam armazenados. Manter os assemblies antigos junto com o novo pacote NuGet causará conflitos de namespace em tempo de compilação.

Passo 2: Adicionar IronBarcode

Um único pacote abrange geração, leitura e suporte a PDF:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Não é necessário um segundo pacote para leitura. Não é necessário nenhum pacote adicional para suporte a PDF.

Etapa 3: Atualize os namespaces e substitua a configuração de licença dupla.

Substitua ambas as diretivasOnBarcodeusing por uma única importação IronBarcode:

// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

// Add
using IronBarCode;
// Remove
using OnBarcode.Barcode;
using OnBarcode.Barcode;

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

Substitua as referências duplas de DLL por uma única atribuição de chave. Insira este código uma única vez, no início da inicialização do aplicativo, antes de qualquer operação de leitura de código de barras:

// Remove theOnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove theOnBarcodeDLL references and using directives
// Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove the OnBarcodeDLL references and Imports statements
' Add
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Exemplos de migração de código

Geração de código de barras Code 128

O caso básico do Código 128 ilustra o padrão de atribuição de propriedades versus o padrão de fábrica estática.

Abordagem OnBarcode:

using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");
using OnBarcode.Barcode;

Linear barcode = new Linear();
barcode.Type = BarcodeType.CODE128;
barcode.Data = "SHIP-2024-001";
barcode.Resolution = 96;
barcode.X = 1;
barcode.BarcodeHeight = 80;
barcode.ShowText = true;
barcode.drawBarcode("shipping-label.png");
Imports OnBarcode.Barcode

Dim barcode As New Linear()
barcode.Type = BarcodeType.CODE128
barcode.Data = "SHIP-2024-001"
barcode.Resolution = 96
barcode.X = 1
barcode.BarcodeHeight = 80
barcode.ShowText = True
barcode.drawBarcode("shipping-label.png")
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

O tipo de dado e de codificação são passados como argumentos para CreateBarcode. Propriedades como resolução e altura da barra não são necessárias para produzir uma saída que possa ser escaneada; As configurações padrão são adequadas para a maioria dos usos. Quando dimensões personalizadas são necessárias, elas podem ser adicionadas como chamadas encadeadas entre CreateBarcode e SaveAsPng sem introduzir estado de objeto mutável.

Geração de código QR com logotipo

QR codes com logotipo requerem que oOnBarcoderecorra ao System.Drawing para o passo de sobreposição de imagem. O IronBarcode fornece isso como uma operação integrada.

Abordagem OnBarcode:

using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");
using OnBarcode.Barcode;
using System.Drawing;

QRCode qr = new QRCode();
qr.Data = "https://example.com/product/4891";
qr.QRCodeDataMode = QRCodeDataMode.Auto;
qr.QRCodeECL = QRCodeECL.H; // H-level error correction required for logo overlay

Image qrImage = qr.drawBarcode();

using (Graphics g = Graphics.FromImage(qrImage))
{
    Image logo = Image.FromFile("brand-logo.png");
    int logoSize = qrImage.Width / 5;
    int x = (qrImage.Width - logoSize) / 2;
    int y = (qrImage.Height - logoSize) / 2;
    g.DrawImage(logo, x, y, logoSize, logoSize);
}

qrImage.Save("product-qr.png");
Imports OnBarcode.Barcode
Imports System.Drawing

Dim qr As New QRCode()
qr.Data = "https://example.com/product/4891"
qr.QRCodeDataMode = QRCodeDataMode.Auto
qr.QRCodeECL = QRCodeECL.H ' H-level error correction required for logo overlay

Dim qrImage As Image = qr.drawBarcode()

Using g As Graphics = Graphics.FromImage(qrImage)
    Dim logo As Image = Image.FromFile("brand-logo.png")
    Dim logoSize As Integer = qrImage.Width \ 5
    Dim x As Integer = (qrImage.Width - logoSize) \ 2
    Dim y As Integer = (qrImage.Height - logoSize) \ 2
    g.DrawImage(logo, x, y, logoSize, logoSize)
End Using

qrImage.Save("product-qr.png")
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");
using IronBarCode;

var qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500);
qr.SaveAsPng("product-qr.png");
Imports IronBarCode

Dim qr = QRCodeWriter.CreateQrCodeWithLogo("https://example.com/product/4891", "brand-logo.png", 500)
qr.SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

O nível de correção de erros, o cálculo do tamanho do logotipo e a composição da imagem são tratados internamente. Nenhuma dependência System.Drawing é necessária.

Leitura de códigos de barras a partir de uma imagem

A leitura de um arquivo de imagem ilustra a consolidação do produto com maior clareza. Com o OnBarcode, a leitura requer o SDK Reader separado, uma chamada de licença separada e a especificação explícita do formato. Com o IronBarcode, trata-se de uma única chamada estática usando o mesmo pacote e a mesma chave já configurada.

Abordagem OnBarcode:

using OnBarcode.Barcode;

//OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);
using OnBarcode.Barcode;

//OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };
string[] results = scanner.Scan("received-label.png");

foreach (string value in results)
    Console.WriteLine(value);
Imports OnBarcode.Barcode

' OnBarcodereader is distributed as a pre-licensed DLL — no runtime SetLicense() call.
Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}
Dim results As String() = scanner.Scan("received-label.png")

For Each value As String In results
    Console.WriteLine(value)
Next
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("received-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode

Dim results = BarcodeReader.Read("received-label.png")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Sem criação de instâncias, sem matriz de formato, sem configuração de licença separada. O formato é detectado automaticamente. Cada resultado contém o valor decodificado e o formato detectado. Para obter detalhes sobre as opções de leitura e os tipos de imagem suportados, consulte o guia sobre como ler códigos de barras em imagens .

Leitura de códigos de barras em um PDF

Este exemplo de migração aplica-se a equipes que renderizavam páginas PDF em imagens usando uma biblioteca de terceiros antes de passar essas imagens para o SDK doOnBarcodeReader.

Abordagem OnBarcode:

//OnBarcodehas no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}
//OnBarcodehas no native PDF support.
// A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
var pageImages = RenderPdfPagesToImages("invoices.pdf"); // external library call

using OnBarcode.Barcode;
BarcodeScanner scanner = new BarcodeScanner();
scanner.BarcodeTypes = new BarcodeType[] { BarcodeType.Code128, BarcodeType.QRCode };

foreach (var pageImage in pageImages)
{
    string[] results = scanner.Scan(pageImage);
    foreach (string value in results)
        Console.WriteLine(value);
}
Imports OnBarcode.Barcode

' OnBarcode has no native PDF support.
' A separate PDF rendering library was required — for example PdfiumViewer or Aspose.PDF.
Dim pageImages = RenderPdfPagesToImages("invoices.pdf") ' external library call

Dim scanner As New BarcodeScanner()
scanner.BarcodeTypes = New BarcodeType() {BarcodeType.Code128, BarcodeType.QRCode}

For Each pageImage In pageImages
    Dim results As String() = scanner.Scan(pageImage)
    For Each value As String In results
        Console.WriteLine(value)
    Next
Next
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}");
using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");
foreach (var result in results)
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}");
Imports IronBarCode

Dim results = BarcodeReader.Read("invoices.pdf")
For Each result In results
    Console.WriteLine($"Page {result.PageNumber}: {result.Format} — {result.Value}")
Next
$vbLabelText   $csharpLabel

Sem etapa de renderização, sem biblioteca PDF externa, sem matriz de formato. A funcionalidade de leitura de código de barras em PDF processa todas as páginas automaticamente e inclui o número da página em cada resultado.

Geração em lote

A geração de códigos de barras para uma coleção de itens segue o mesmo padrão de diferenciação que a geração de um único item.

Abordagem OnBarcode:

using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}
using OnBarcode.Barcode;

foreach (var item in inventoryItems)
{
    Linear barcode = new Linear();
    barcode.Type = BarcodeType.CODE128;
    barcode.Data = item.Sku;
    barcode.Resolution = 96;
    barcode.BarWidth = 1;
    barcode.BarHeight = 80;
    barcode.ShowText = true;
    barcode.drawBarcode($"labels/{item.Id}.png");
}
Imports OnBarcode.Barcode

For Each item In inventoryItems
    Dim barcode As New Linear()
    barcode.Type = BarcodeType.CODE128
    barcode.Data = item.Sku
    barcode.Resolution = 96
    barcode.BarWidth = 1
    barcode.BarHeight = 80
    barcode.ShowText = True
    barcode.drawBarcode($"labels/{item.Id}.png")
Next
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}
using IronBarCode;

foreach (var item in inventoryItems)
{
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128)
        .SaveAsPng($"labels/{item.Id}.png");
}
Imports IronBarCode

For Each item In inventoryItems
    BarcodeWriter.CreateBarcode(item.Sku, BarcodeEncoding.Code128) _
        .SaveAsPng($"labels/{item.Id}.png")
Next
$vbLabelText   $csharpLabel

Referência de mapeamento da APIOnBarcodepara IronBarcode

OnBarcode IronBarcode Notas
DLL pre-licenciada (sem chamada de chave de tempo de execução) IronBarCode.License.LicenseKey = "key" Cessão de propriedade; chamado uma vez na startup
Duas referências de DLL (gerador + leitor) Pacote NuGet único Um pacote cobre todas as capacidades
new Linear() BarcodeWriter.CreateBarcode(data, encoding) Fábrica estática; nenhuma instância de objeto
barcode.BarcodeType = BarcodeType.CODE128 BarcodeEncoding.Code128 como parâmetro Passado como segundo argumento para CreateBarcode
barcode.Data = "..." Primeiro parâmetro de CreateBarcode Os dados são o primeiro argumento.
barcode.drawBarcode("file.png") .SaveAsPng("file.png") Método nomeado de formato
barcode.drawBarcode("file.jpg") .SaveAsJpeg("file.jpg") Método nomeado de formato
barcode.drawBarcode("file.pdf") .SaveAsPdf("file.pdf") Saída PDF nativa
BarcodeType.CODE128 BarcodeEncoding.Code128 Constante renomeada
BarcodeType.QRCode BarcodeEncoding.QRCode Mapeamento direto
BarcodeType.EAN13 BarcodeEncoding.EAN13 Mapeamento direto
BarcodeType.DataMatrix BarcodeEncoding.DataMatrix Mapeamento direto
BarcodeType.PDF417 BarcodeEncoding.PDF417 Mapeamento direto
new BarcodeScanner() { BarcodeTypes = [...] } BarcodeReader.Read(path) — estático Sem instância, sem especificação de formato
scanner.Scan("file.png")string[] BarcodeReader.Read("file.png")BarcodeResults Tipo de retorno mais rico
results[0] (string bruta) result.Value Valor da string decodificada
N / D result.Format Formato detectado — não disponível emOnBarcode
N / D result.PageNumber O código-fonte da página para o PDF diz:
N / D BarcodeReader.Read("document.pdf") Leitura nativa de PDF; Não existe equivalente emOnBarcode
Sobreposição manual GDI+ para logotipo QR QRCodeWriter.CreateQrCodeWithLogo() Suporte integrado para logotipo
configuração BarcodeType[] Não é necessário A detecção automática é a opção padrão.

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

Problema 1: Conflitos de referência de DLL

OnBarcode: Projetos na distribuição de DLL legada têm elementos <Reference> em .csproj apontando para lib\OnBarcode.Barcode.dll ou caminhos similares. Se a DLL antiga permanecer no disco quando o IronBarcode for adicionado, o compilador verá duas assemblies fornecendo os mesmos prefixos de namespace e produzirá erros de referência ambígua.

Solução: Remova o bloco de referência <ItemGroup> de .csproj antes de executar dotnet add package IronBarcode. Exclua os arquivos DLL do disco. Verifique, através de uma compilação limpa, se não restam referências de assembly obsoletas.

# Search for lingeringOnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
# Search for lingeringOnBarcodeDLL references in project files
grep -r "OnBarcode" --include="*.csproj" .
grep -r "OnBarcode" --include="*.props" .
SHELL

Issue 2: Conflitos de Nome de Tipo Durante a Migração Faseada

OnBarcode: O namespace do leitor exporta uma classe chamada BarcodeScanner.IronBarcode tem uma classe estática chamada BarcodeReader. Esses nomes não entram em conflito diretamente, mas qualquer arquivo que importe simultaneamente OnBarcode.Barcode.Reader e IronBarCode pode ver ambiguidade de enum BarcodeType —OnBarcodedefine BarcodeType para sua seleção de formato, e IronBarcode usa BarcodeEncoding. Manter ambos os namespaces ativos durante a migração resultará em erros de compilação em qualquer referência BarcodeType.

Solução: Complete a migração de cada arquivo atomicamente — remova a diretiva using OnBarcode.Barcode.Reader e adicione using IronBarCode na mesma edição. Não deixe ambas as diretivas using presentes em nenhum arquivo. Se uma abordagem gradual for necessária, use nomes totalmente qualificados temporariamente:

// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
// Temporary disambiguation during phased migration
var results = IronBarCode.BarcodeReader.Read("file.png");
' Temporary disambiguation during phased migration
Dim results = IronBarCode.BarcodeReader.Read("file.png")
$vbLabelText   $csharpLabel

Problema 3: Remoção da matriz BarcodeType

OnBarcode: O leitor requer reader.BarcodeTypes = new BarcodeType[] { ... } para funcionar. Os desenvolvedores que migram o código do leitor às vezes têm o hábito de especificar formatos explicitamente e procuram uma configuração equivalente no IronBarcode.

Solução: Remova completamente a especificação de formato. BarcodeReader.Read realiza detecção automática em todos os formatos suportados. Nenhuma configuração é necessária, e não existe equivalente de BarcodeType[] no IronBarcode porque não é necessário.

// No format configuration required
var results = BarcodeReader.Read("label.png");
// No format configuration required
var results = BarcodeReader.Read("label.png");
Dim results = BarcodeReader.Read("label.png")
$vbLabelText   $csharpLabel

Lista de verificação para migração do OnBarcode

Tarefas pré-migração

Antes de fazer alterações, faça uma auditoria no código-fonte para localizar todos os usos de OnBarcode:

# Find allOnBarcodenamespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
# Find allOnBarcodenamespace imports
grep -rn "using OnBarcode" --include="*.cs" .

# Find all license configuration calls
grep -rn "SetLicense" --include="*.cs" .

# Find all generator usage
grep -rn "new Linear\|new QRCode\|drawBarcode\|BarcodeType\." --include="*.cs" .

# Find all reader usage
grep -rn "BarcodeScanner\|\.Scan(\|BarcodeType\[\]" --include="*.cs" .

# Find DLL references in project files
grep -rn "OnBarcode" --include="*.csproj" .
grep -rn "OnBarcode" --include="*.sln" .
SHELL

Documente quais arquivos usam apenas geração, quais usam apenas leitura e quais usam ambas. Observe quaisquer arquivos que incluam o bloco DLL <Reference> manual em vez de uma referência ao pacote NuGet.

Tarefas de atualização de código

  1. Remova o pacote NuGet OnBarcode.Barcode.Generator
  2. Remova o pacote NuGet OnBarcode.Barcode.Reader
  3. Remova qualquer entrada DLL manual <Reference> de arquivos .csproj
  4. Exclua os arquivos DLLOnBarcodedo repositório.
  5. Execute dotnet add package IronBarcode
  6. Substitua using OnBarcode.Barcode por using IronBarCode em cada arquivo
  7. Substitua using OnBarcode.Barcode.Reader por using IronBarCode em cada arquivo
  8. Remova ambas as entradas de DLL <Reference> doOnBarcode(gerador e leitor) — não há chamadas de licença de tempo de execução para substituir
  9. Adicione IronBarCode.License.LicenseKey = "YOUR-KEY" uma vez na inicialização da aplicação
  10. Converta cada new Linear() ou new QRCode() + bloco de atribuição de propriedade para BarcodeWriter.CreateBarcode(data, encoding)
  11. Substitua barcode.drawBarcode("file.png") por .SaveAsPng("file.png") (ou método de formato apropriado)
  12. Substitua new BarcodeScanner() { BarcodeTypes = [...] } + .Scan(path) por BarcodeReader.Read(path)
  13. Atualize o tratamento de resultados de indexação string[] para result.Value e result.Format em BarcodeResults
  14. Remova qualquer código de renderização de PDF para imagem usado para contornar a limitação de PDF do OnBarcode.
  15. Substitua renderização de PDF em múltiplas etapas + loops de digitalização por uma única chamada BarcodeReader.Read("file.pdf")

Testes pós-migração

  • Verificar se cada tipo de código de barras usado no projeto (Code 128, QR, EAN, Data Matrix, PDF417) gera uma saída legível por scanner.
  • Escaneie os códigos de barras gerados com um leitor físico ou dispositivo móvel para confirmar a legibilidade.
  • Verificar se a leitura do código de barras retorna os valores corretos para as imagens de teste conhecidas.
  • Confirme se a leitura de PDF retorna valores corretos e números de página corretos para documentos de teste com várias páginas. Execute a aplicação em qualquer ambiente de CI para confirmar se a configuração da chave de licença funciona corretamente no pipeline.
  • Verifique se nenhuma string OnBarcode permanece em .cs, .csproj ou arquivos de configuração após a migração estar completa

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

Pacote e licença consolidados: após a migração, um único pacote NuGet e uma única chave de licença abrangem todas as operações de código de barras. Não há produtos separados para adquirir, cronogramas de versões independentes para acompanhar ou configuração de licença dupla para manter na inicialização. A complexidade de um arranjo com dois produtos é substituída por uma única dependência.

Aquisição transparente: a IronBarcode publica os níveis de licença perpétua com os respectivos preços no site do produto. Uma organização pode determinar o custo total, enviar um pedido de compra e concluir a aquisição sem precisar de uma conversa com o departamento de vendas. A página de licenciamento do IronBarcode inclui preços para todos os níveis e detalhes sobre as principais configurações para ambientes Docker e em nuvem.

Suporte nativo a PDF: Projetos que anteriormente exigiam uma biblioteca de renderização de PDF separada para processar PDFs com códigos de barras incorporados podem agora eliminar completamente essa dependência. Uma única chamada BarcodeReader.Read processa todas as páginas de um documento PDF sem qualquer etapa de renderização, e cada resultado inclui o número da página da qual foi extraído.

Resultados de Leitura Mais Ricos: O tipo de retorno BarcodeResults fornece o valor decodificado, o formato de código de barras detectado, coordenadas da caixa delimitadora dentro da imagem de origem e número da página para leituras de PDF. Aplicações que anteriormente trabalhavam com um string[] plano agora podem revelar informações de formato, suportar fluxos de trabalho de anotação ou implementar filtragem baseada em confiança sem processamento adicional.

Superfície de API reduzida: o padrão de fábrica estática substitui o modelo de atribuição de propriedades. As operações de geração comuns exigem menos linhas de código, e as operações de leitura não exigem a criação de instâncias nem a pré-configuração de formato. As operações em lote se beneficiam de uma menor quantidade de código por item, o que facilita a revisão e a manutenção ao longo do tempo.

ObserveAspose,OnBarcodee PDFium são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado por Aspose Pty Ltd, Chromium Project, Google ou OnBarcode. 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 OnBarcode 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 OnBarcode 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 OnBarcode 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 OnBarcode 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 OnBarcode?

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 OnBarcode?

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 do OnBarcode para o 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