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

Como ler códigos de barras em imagens usando C#

Migrando de Código de barras para IronBarcode

Este guia abrange todo o processo de migração do Código de barras para o IronBarcode para desenvolvedores .NET . A migração consolida dois pacotes em um, substitui o pipeline de codificador-renderizador por uma única chamada de método, e colapsa todas as importações de namespace específicas de formato — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — em um único using IronBarCode;. O tipo IBarcode e os tipos ImageRenderer / ImageRendererOptions são removidos inteiramente. Se a leitura era uma capacidade ausente que fez você adicionar uma segunda biblioteca junto com o Barcoder, o IronBarcode cobre a leitura nativamente com BarcodeReader.Read().

Por que migrar do Barcoder?

As equipes que migraram do Código de barras relatam os seguintes gatilhos:

Requisito de leitura adicionado: Código de barras é uma biblioteca somente para geração de código de barras, sem capacidade de decodificação. Quando um aplicativo precisa verificar códigos de barras recebidos, processar documentos digitalizados ou ler códigos de barras de PDFs carregados, o Código de barras não oferece nenhuma solução. Adicionar uma segunda biblioteca para leitura cria uma base de código dividida com duas dependências do NuGet , duas APIs para manter e dois históricos de versão para acompanhar. O IronBarcode lida tanto com a geração quanto com a leitura através do mesmo pacote.

Compatibilidade com .NET Framework quebrada: Barcoder.Renderer.Image retirou o suporte ao .NET Framework. Equipes que executam serviços ou aplicativos de desktop no .NET Framework 4.x e que atualizam o pacote de renderização de imagens durante a manutenção rotineira de dependências encontram uma falha na compilação. O IronBarcode é compatível com o .NET Framework 4.6.2 até o .NET 9 sem necessidade de empacotamento condicional para diferentes plataformas.

Desvio de Versão do Pacote: Barcoder e Barcoder.Renderer.Image são pacotes NuGet com versões independentes. Atualizar um sem o outro durante uma atualização de dependências pode causar incompatibilidades. Em repositórios com múltiplos projetos, garantir versões consistentes de cada renderizador em todos os projetos é uma tarefa de coordenação que aumenta com o tamanho da equipe.

Adição de múltiplos formatos: Um projeto que começa com Code128 e posteriormente adiciona QR e, em seguida, DataMatrix, deve adicionar uma nova importação de namespace e aprender uma classe de codificador diferente com parâmetros de método diferentes para cada formato.IronBarcode usa um enum BarcodeEncoding — adicionar um formato é uma alteração de uma palavra em uma chamada existente. Sem novo namespace, sem nova classe, sem assinatura de método diferente.

Requisitos de implantação em MAUI e na nuvem: O Código de barras não documenta o suporte para implantações em MAUI, Docker, AWS Lambda ou Azure. Equipes que desenvolvem aplicativos móveis multiplataforma ou pipelines de processamento de código de barras sem servidor descobrem que os objetivos documentados do Código de barras não abrangem esses cenários.

O problema fundamental

O Código de barras acopla a seleção de formato às importações de namespace e força um pipeline de renderização para cada operação de saída. A mudança de formatos ou tipos de saída requer alterações estruturais no código:

// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

IronBarcode expressa a mesma operação que uma única chamada encadeada:

// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

IronBarcode vs Barcoder: Comparação de Recursos

Recurso Código de barras IronBarcode
Pacotes NuGet necessários mínimo de 2 (Barcoder + Barcoder.Renderer.Image) 1 (IronBarcode)
Geração de código de barras Sim Sim
Leitura/decodificação de código de barras Não Sim
Classes de codificadores por formato Sim — Code128Encoder, QrEncoder, DataMatrixEncoder, etc. Não — enum BarcodeEncoding
Importações de namespace por formato Sim — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrix Não — somente using IronBarCode
Métodos de saída no objeto de resultado Não — IBarcode não tem métodos de salvar Sim — GeneratedBarcode tem SaveAsPng, ToPngBinaryData, ToStream
Leitura de PDF Não Sim — BarcodeReader.Read(path)
QR com logotipo Não Sim — .AddBrandLogo(path)
Suporte ao .NET Framework Renderizador de imagens inserido .NET Framework 4.6.2+
Suporte ao .NET 9 Atividade pouco clara/limitada Sim
Suporte MAUI Não Sim — iOS, Android, Windows, macOS
Docker / Azure / AWS Lambda Não documentado Sim
Licença MIT (código aberto) Commercial — Lite $999, Plus $1,499, Professional $2,999, Unlimited $5,999
Controle de velocidade de leitura Não Sim — enum ReadingSpeed
Detecção de múltiplos códigos de barras Não Sim — opção ExpectMultipleBarcodes

Guia rápido: Migração do Código de barras para o IronBarcode

Passo 1: Substitua o pacote NuGet

Remova todos os pacotes Código de barras do seu projeto:

dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
SHELL

Se você também adicionou o renderizador SVG:

dotnet remove package Barcoder.Renderer.Svg
dotnet remove package Barcoder.Renderer.Svg
SHELL

Instale o IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Etapa 2: Atualizar Namespaces

Remova todas as declarações using Barcoder.* de cada arquivo no projeto:

// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
$vbLabelText   $csharpLabel

Substitua todas elas por uma única diretiva using:

using IronBarCode;
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Etapa 3: Inicializar a licença

Adicione a inicialização da licença na inicialização do aplicativo — Program.cs, Startup.cs, ou MauiProgram.cs:

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

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

Uma chave de avaliação gratuita está disponível em ironsoftware.com .

Exemplos de migração de código

Geração Code128

Abordagem do leitor de código de barras:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

O Code128Encoder, ImageRenderer, ImageRendererOptions, e o gerenciamento de stream são removidos inteiramente. O formato é especificado como BarcodeEncoding.Code128 na classe unificada BarcodeWriter. Os métodos de saída vivem diretamente no objeto GeneratedBarcode retornado. A documentação de geração de código de barras do IronBarcode aborda a personalização de estilo, margem e cor.

Geração de código QR

Abordagem do leitor de código de barras:

using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 4
});

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 4
});

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Qr
Imports Barcoder.Renderers

Dim barcode As IBarcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 4
})

Using stream = File.OpenWrite("qr.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

O segundo parâmetro para CreateQrCode é a dimensão de saída em pixels. O nível de correção de erros é definido por padrão com um valor adequado e pode ser configurado, se necessário. O IronBarcode também suporta uma operação não possível no Código de barras — incorporar o logotipo da marca no centro do código QR:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

Geração de DataMatrix

Abordagem do leitor de código de barras:

using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 5
});

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 5
});

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.DataMatrix
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = DataMatrixEncoder.Encode("ITEM-XYZ-001")

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 5
})

Using stream As FileStream = File.OpenWrite("datamatrix.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("datamatrix.png")
$vbLabelText   $csharpLabel

O padrão é idêntico ao Code128 — apenas o valor BarcodeEncoding muda. Sem importação de novo namespace, sem classe diferente, sem assinatura de método diferente.

Controlando o tamanho da saída

O Código de barras usa PixelSize como um multiplicador de escala no tamanho do módulo do código de barras e BarHeightFor1DBarcode para altura 1D — não há uma API direta de largura/altura.

Abordagem do leitor de código de barras:

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports System.IO

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 3,
    .BarHeightFor1DBarcode = 80
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

.ResizeTo(width, height) aceita dimensões de pixel explícitas. Ele se encadeia com outros métodos de saída no mesmo objeto GeneratedBarcode.

Obtendo dados binários em vez de um arquivo.

Abordagem do leitor de código de barras:

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2
});

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2
});

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2
})

Using ms As New MemoryStream()
    renderer.Render(barcode, ms)
    Dim pngBytes As Byte() = ms.ToArray()
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports IronBarCode

Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128).ToPngBinaryData()
$vbLabelText   $csharpLabel

O padrão MemoryStream e ToArray() é substituído por uma única chamada de método encadeado em GeneratedBarcode.

Leitura de códigos de barras (Nova funcionalidade)

O Código de barras não possui API de leitura. Se você adicionou anteriormente uma segunda biblioteca para leitura, ela pode ser removida. O IronBarcode lê arquivos, arrays de bytes, fluxos de dados e PDFs com o mesmo pacote usado para geração.

Abordagem do IronBarcode:

using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Format: {result.Format}");
}

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
Imports IronBarCode

' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Format: {result.Format}")
Next

' Read from PDF natively — no image extraction step, no extra dependency
Dim pdfResults = BarcodeReader.Read("invoice.pdf")

' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-sheet.png", options)
For Each result In multiResults
    Console.WriteLine(result.Value)
Next

' Read from a stream directly
Using fileStream = File.OpenRead("barcode.png")
    Dim streamResults = BarcodeReader.Read(fileStream)
End Using
$vbLabelText   $csharpLabel

A documentação de leitura de código de barras do IronBarcode abrange PDFs com várias páginas, leitura de região de interesse e opções de otimização de desempenho.

Saída SVG

Abordagem do leitor de código de barras:

using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
Imports Barcoder.Renderers

Dim svgRenderer = New SvgRenderer()
Using stream = File.OpenWrite("barcode.svg")
    svgRenderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
Imports IronBarCode

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .SaveAsSvg("barcode.svg")
$vbLabelText   $csharpLabel

O pacote Barcoder.Renderer.Svg pode ser removido uma vez que todos os sites de renderização SVG sejam migrados.

Referência de mapeamento da API Código de barras para o IronBarcode

Código de barras IronBarcode
Code128Encoder.Encode("data", false) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M) QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... }) Não é necessário
renderer.Render(barcode, fileStream) .SaveAsPng(path)
renderer.Render(barcode, memoryStream) + ms.ToArray() .ToPngBinaryData()
IBarcode GeneratedBarcode
PixelSize = 2, BarHeightFor1DBarcode = 50 .ResizeTo(width, height)
SvgRenderer + renderer.Render(barcode, stream) .SaveAsSvg(path)
Sem API de leitura BarcodeReader.Read(path / stream / bytes / pdf)
2 pacotes — Barcoder + Barcoder.Renderer.Image 1 pacote — IronBarcode
Namespace de formato por codificador (Barcoder.Code128, Barcoder.Qr, etc.) Enum BarcodeEncoding, namespace único

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

Problema 1: IBarcode não possui métodos de salvamento

Barcoder: Código que armazena uma variável IBarcode e a passa para um renderizador mais tarde segue um padrão de renderização diferida. Qualquer método auxiliar que aceita IBarcode e chama renderer.Render() deve ser refatorado.

Solução: Altere as referências de tipo IBarcode para GeneratedBarcode. O objeto GeneratedBarcode carrega seus métodos de saída com ele — passe-o para qualquer método que precise salvar ou serializar o resultado:

//IronBarcode— GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
//IronBarcode— GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
SaveBarcodeToFile(barcode, "output.png")

Private Sub SaveBarcodeToFile(barcode As GeneratedBarcode, path As String)
    barcode.SaveAsPng(path)
End Sub
$vbLabelText   $csharpLabel

Uma busca por renderer.Render( na solução localizará todos os sites de renderização diferida.

Problema 2: O tamanho do pixel não tem equivalente direto.

Barcoder: PixelSize é um multiplicador de escala sobre o tamanho natural do módulo do código de barras. As dimensões de saída dependem do comprimento do conteúdo, formato e do multiplicador em combinação. BarHeightFor1DBarcode controla independentemente a altura 1D. Não existe uma especificação direta de largura/altura.

Solução: Meça a saída de pixels real que o código existente do Código de barras produz e passe esses valores para .ResizeTo(width, height):

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .ResizeTo(300, 80) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Problema 3: Formatar as importações de namespace acumulam

Barcoder: Cada formato de código de barras usado em um projeto adiciona uma diretiva using Barcoder.[Format] a cada arquivo que o usa. Um projeto usando Code128, QR e DataMatrix normalmente tem três importações específicas de formato por arquivo mais using Barcoder e using Barcoder.Renderers.

Solução: Execute uma pesquisa por todas as declarações using Barcoder e substitua todas por using IronBarCode;:

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
SHELL

Cada resultado é uma linha a ser removida, substituída pela única diretiva using IronBarCode; uma vez por arquivo.

Problema 4: Erros de sincronização da versão do pacote

Barcoder: Construir após atualizar apenas um de Barcoder ou Barcoder.Renderer.Image pode produzir erros de resolução de tipo porque os dois pacotes podem não ser compatíveis em diferentes combinações de versão.

Solução: Após remover ambos os pacotes Código de barras e instalar IronBarcode, há um pacote e uma versão. Os conflitos de bloqueio de pacotes nesta categoria são eliminados. Verifique se o arquivo .csproj contém apenas a referência IronBarcode única e nenhuma referência restante Barcoder.* antes de construir.

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

Tarefas pré-migração

Antes de fazer alterações, faça uma auditoria no seu código-fonte para identificar todos os usos do Barcoder:

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
SHELL

Documente todos os locais onde IBarcode é armazenado como um tipo de variável ou passado como um parâmetro de método — esses são os sites de renderização diferida que requerem mais atenção. Anote todos os valores PixelSize e BarHeightFor1DBarcode e meça as dimensões de saída correspondentes.

Tarefas de atualização de código

  1. Remova o pacote NuGet Barcoder de todos os projetos
  2. Remova o pacote NuGet Barcoder.Renderer.Image de todos os projetos
  3. Remova o pacote NuGet Barcoder.Renderer.Svg se presente
  4. Instale o pacote NuGet IronBarcode
  5. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; na inicialização do aplicativo
  6. Substitua todas as declarações using Barcoder.* por using IronBarCode;
  7. Substitua Code128Encoder.Encode(...) por BarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128)
  8. Substitua QrEncoder.Encode(...) por QRCodeWriter.CreateQrCode(..., size)
  9. Substitua DataMatrixEncoder.Encode(...) por BarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix)
  10. Remova todas as construções new ImageRenderer(new ImageRendererOptions {...})
  11. Substitua renderer.Render(barcode, fileStream) por .SaveAsPng(path) em GeneratedBarcode
  12. Substituarenderer.Render(barcode, memoryStream) + ms.ToArray()por .ToPngBinaryData()
  13. Substitua o uso de SvgRenderer por .SaveAsSvg(path)
  14. Altere as referências de tipo IBarcode para GeneratedBarcode
  15. Substitua as opções PixelSize / BarHeightFor1DBarcode por .ResizeTo(width, height)

Testes pós-migração

  • Verifique se cada formato de código de barras gerado é lido corretamente com um leitor padrão ou com o leitor próprio da IronBarcode.
  • Compare as dimensões de saída visual com a saída pré-migração — confirme que os valores .ResizeTo() produzem tamanhos equivalentes
  • Teste a saída do código QR com um leitor de celular para confirmar se o nível de correção de erros é adequado.
  • Verifique se a saída SVG é renderizada corretamente no navegador e no contexto de impressão, caso seu projeto utilize SVG.
  • Se você removeu uma segunda biblioteca de leitura, verifique se o BarcodeReader.Read() produz valores decodificados equivalentes para os mesmos inputs
  • Teste a leitura de PDFs se o seu projeto processa documentos PDF — confirme se PDFs com várias páginas leem todas as páginas corretamente.
  • Execute uma construção com zero referências Barcoder.* remanescentes — erros do compilador indicam locais de migração perdidos

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

Dependência de pacote unificada: um pacote NuGet substitui dois (ou três, se o renderizador SVG também for usado). Uma única versão para acompanhar, um único registro de alterações para monitorar e nenhum problema de compatibilidade entre pacotes durante as atualizações de dependências. A complexidade de .csproj e packages.lock.json diminui imediatamente.

Capacidade de leitura nativa: Aplicativos que anteriormente exigiam uma segunda biblioteca para leitura de código de barras agora podem ser integrados ao IronBarcode. BarcodeReader.Read() aceita arquivos de imagem, matrizes de bytes, streams e PDFs através da mesma API, com detecção de múltiplos códigos de barras e ajuste de velocidade de leitura embutidos.

Seleção de Formato como Configuração: Adicionar um novo formato de código de barras a um projeto existente é uma alteração de uma palavra no valor da enum BarcodeEncoding em uma chamada CreateBarcode existente. Nenhuma nova importação de namespace, nenhuma nova classe de codificador e nenhum novo pacote. Isso facilita a expansão de formatos à medida que os requisitos do produto evoluem.

Dimensões de Saída Explícitas: .ResizeTo(width, height) substitui o sistema de multiplicador PixelSize indireto por uma especificação de pixels explícita. A relação entre o código e a saída é direta e previsível, independentemente do comprimento do conteúdo do código de barras ou do tamanho do módulo específico do formato.

Cobertura de plataforma expandida: o IronBarcode oferece suporte ao .NET Framework 4.6.2 até o .NET 9, implantações MAUI em iOS, Android, Windows e macOS, além de implantação documentada em Docker, AWS Lambda e Azure Functions. As equipes cujos requisitos de plataforma se expandem além do .NET Core não encontrarão a lacuna de suporte de framework que afeta Barcoder.Renderer.Image.

Manutenção ativa e compatibilidade futura: a IronBarcode lança atualizações regulares com cronogramas de compatibilidade com .NET documentados. O ritmo ativo de lançamentos mantém a biblioteca alinhada com as versões atuais do .NET, o que não é garantido para uma biblioteca com atividade limitada de lançamentos recentes.

Perguntas frequentes

Por que devo migrar do Barcoder 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 Barcoder 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 Barcoder 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 Barcoder 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 Barcoder?

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

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 Barcoder 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