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

Como ler códigos de barras de fluxos em C#

Migrando debarKoder SDKpara IronBarcode

Barkoder envia pacotes oficiais .NET — Plugin.Maui.Barkoder e Barkoder.Xamarin — mas ambos são componentes estritamente para escaneamento de câmera em dispositivos móveis. Se você avaliou o barKoder por seu algoritmo MatrixSight, modo DeBlur, detecção de múltiplos códigos de barras ou suporte a DPM e depois descobriu que precisa de entrada de arquivos, processamento de PDF, implantação no lado do servidor ou geração de código de barras, nada disso está disponível do barKoder no .NET. Este guia mostra como o IronBarcode cobre cada um desses requisitos, com código funcional para todos os cenários.

Por que Migrar do barKoder SDK

Equipes que mudam de uma avaliação do barKoder para o IronBarcode relatam consistentemente os mesmos gatilhos:

Apenas Superfície de Câmera Móvel: A pegada .NET do Barkoder é Plugin.Maui.Barkoder (v1.6.8, março de 2026) e Barkoder.Xamarin (v1.3.0). Ambos envolvem os SDKs nativos do iOS / Android e expõem um controle de câmera BarkoderView. Não há biblioteca Barkoder.NET de uso geral, nenhum alvo ASP.NET Core, nenhum alvo para console / trabalhador / desktop e nenhum alvo para servidor Linux.

Arquitetura somente leitura: Barkoder é um SDK que realiza apenas a digitalização de arquivos. Se sua aplicação precisa gerar códigos de barras — imprimir etiquetas de envio, criar códigos QR para embalagens, incorporar códigos em documentos — o Barkoder não oferece nada disso. Equipes que descobrem uma necessidade de geração no meio do projeto precisam de uma biblioteca que abranja ambos os lados do fluxo de trabalho.

Sem processamento de PDF: Em aplicações Enterprise .NET , os códigos de barras aparecem frequentemente em documentos PDF — faturas, manifestos de envio, registros médicos, documentos de conformidade. O Barkoder não tem noção desse fluxo de trabalho. Ele foi projetado para entrada de vídeo ao vivo em dispositivos móveis e não consegue processar arquivos PDF.

Sem implantação no servidor: o modelo de processamento do Barkoder é a leitura em dispositivos móveis. Não pode ser executado em ASP.NET Core, Azure Functions, contêineres Docker ou AWS Lambda. Equipes que desenvolvem APIs de código de barras do lado do servidor, pipelines de processamento de documentos ou funções em nuvem não têm acesso à implantação do Barkoder.

Sem Entrada de Arquivo / Fluxo: Mesmo dentro de um aplicativo MAUI, BarkoderView apenas consome quadros ao vivo da câmera. Não há sobrecarga de caminho de arquivo, matriz de bytes ou Stream, portanto, processar uma imagem carregada ou uma foto da galeria requer uma biblioteca diferente.

O Limite Fundamental

A superfície MAUI do Barkoder está presa à câmera. Um desenvolvedor .NET usando Plugin.Maui.Barkoder escreve código que se parece com este:

// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.SetFlashEnabled(false);
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
    }
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.SetFlashEnabled(false);
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
    }
}
Imports Barkoder.Maui

Public Partial Class ScanPage
    Inherits ContentPage
    Implements IBarkoderDelegate

    Public Sub New()
        InitializeComponent()
        BarkoderView.SetFlashEnabled(False)
        BarkoderView.StartScanning(Me)
    End Sub

    Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
        For Each r In result
            Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

IronBarcode fornece uma API de arquivo / stream / PDF para os mesmos dados:

// dotnet add package BarCode
using IronBarCode;

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

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;

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

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

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

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

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

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

IronBarcode vs barKoder SDK: Comparação de Recursos

Recurso barKoder SDK IronBarcode
API .NET / C# Apenas UI de câmera MAUI / Xamarin Superfície .NET completa
Pacote NuGet Plugin.Maui.Barkoder, Barkoder.Xamarin BarCode
Recuperação de código de barras danificado MatrixSight / DeBlur ReadingSpeed.ExtremeDetail + ML
Detecção de múltiplos códigos de barras Sim ExpectMultipleBarcodes = true
DataMatrix / DPM Sim (somente leitura) Sim — leia e gere
Código QR Sim (somente leitura) Sim — leia e gere
PDF417 Sim Sim
asteca Sim Sim
Código 128, Código 39, EAN Sim Sim — mais de 50 formatos
Geração de código de barras None Completo — todos os formatos
Processamento de PDF None Nativo
Entrada de Arquivo / Stream / byte[] Nenhum — apenas quadros de câmera Sim
ASP.NET Core None Completo
Docker / Linux None Completo
Azure Functions None Completo
AWS Lambda None Completo
Offline / Isolado da internet No dispositivo Totalmente local
Assíncrono / Aguardar Baseado em retorno de chamada Completo
Injeção de Dependência None DI .NET completo
iOS via MAUI Plugin.Maui.Barkoder (interface de usuário da câmera) Programático (arquivo / stream)
Android via MAUI Plugin.Maui.Barkoder (interface de usuário da câmera) Programático (arquivo / stream)
Preços Assinatura anual A partir de $749 perpétuo

Começo Rápido: Migração dobarKoder SDKpara IronBarcode

Passo 1: Substitua o pacote NuGet

Instale o IronBarcode:

dotnet add package BarCode

Se seu projeto usa Plugin.Maui.Barkoder ou Barkoder.Xamarin apenas para fluxos de trabalho sem câmera (ou você está se movendo completamente para processamento de arquivos / PDFs), remova-o:

dotnet remove package Plugin.Maui.Barkoder
dotnet remove package Plugin.Maui.Barkoder
SHELL

Se o aplicativo ainda precisar de uma interface de usuário de câmera ao vivo, mantenha Plugin.Maui.Barkoder e adicione IronBarcode junto para o trabalho de arquivo / PDF / geração.

Etapa 2: Atualizar Namespaces

Remova o namespace barKoder onde não é mais necessário, e adicione o namespace IronBarcode:

// Remove (if no longer needed)
// using Barkoder.Maui;

// Add
using IronBarCode;
// Remove (if no longer needed)
// using Barkoder.Maui;

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

Etapa 3: Inicializar a licença

Adicione a inicialização da licença no início da aplicação — em Program.cs para ASP.NET Core, ou antes de qualquer operação de código de barras em aplicativos de console ou desktop:

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

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

Exemplos de migração de código

Lendo Códigos de Barras de Imagens

O cenário de leitura principal mapeia dos quadros de câmera ao vivo do barKoder para a API de arquivo / stream / byte[] do IronBarcode.

Abordagem do barKoder MAUI:

// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
        {
            Console.WriteLine($"Barcode: {r.TextualData}");
            Console.WriteLine($"Type: {r.BarcodeTypeName}");
        }
    }
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;

public partial class ScanPage : ContentPage, IBarkoderDelegate
{
    public ScanPage()
    {
        InitializeComponent();
        BarkoderView.StartScanning(this);
    }

    public void DidFinishScanning(BarcodeResult[] result)
    {
        foreach (var r in result)
        {
            Console.WriteLine($"Barcode: {r.TextualData}");
            Console.WriteLine($"Type: {r.BarcodeTypeName}");
        }
    }
}
Imports Barkoder.Maui

Public Partial Class ScanPage
    Inherits ContentPage
    Implements IBarkoderDelegate

    Public Sub New()
        InitializeComponent()
        BarkoderView.StartScanning(Me)
    End Sub

    Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
        For Each r In result
            Console.WriteLine($"Barcode: {r.TextualData}")
            Console.WriteLine($"Type: {r.BarcodeTypeName}")
        Next
    End Sub
End Class
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

// dotnet add package BarCode
using IronBarCode;

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

var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;

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

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

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

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

O BarcodeReader.Read() da IronBarcode detecta automaticamente o formato do código de barras sem exigir que um formato seja especificado antecipadamente. A mesma chamada funciona para imagens capturadas por um dispositivo móvel e enviadas para um servidor, imagens carregadas de um sistema de arquivos ou imagens recebidas como matrizes de bytes de um fluxo. Para obter documentação de leitura completa, consulte o guia de leitura do IronBarcode .

Recuperação de código de barras danificado (equivalente ao modo DeBlur)

O modo DeBlur do Barkoder é uma de suas funcionalidades mais citadas.IronBarcode fornece o equivalente para entrada de arquivo através de ReadingSpeed.ExtremeDetail.

Abordagem do barKoder MAUI:

// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;

BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Recovered: {r.TextualData}");
}
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;

BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Recovered: {r.TextualData}");
}
Imports Barkoder.Maui

' Live camera scanning with DeBlur enabled via configuration
BarkoderView.SetEnabledBarcodeTypes() ' configure formats
BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"Recovered: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

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

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

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

if (results.Any())
{
    Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
    Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;

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

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

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

if (results.Any())
{
    Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
    Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode

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

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

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

If results.Any() Then
    Console.WriteLine($"Recovered barcode: {results.First().Value}")
Else
    Console.WriteLine("Could not decode — image quality too low")
End If
$vbLabelText   $csharpLabel

ReadingSpeed.ExtremeDetail executa um pipeline de análise de imagem baseado em ML de múltiplas passagens, aplicando aprimoramento de contraste, nitidez, correção de rotação e recuperação de danos antes de tentar decodificar. Para fluxos de trabalho em lote, use ReadingSpeed.Balanced como padrão e recaia para ExtremeDetail apenas para imagens que Balanced falha em decodificar.

Detecção de múltiplos códigos de barras

A varredura de quadros de múltiplos códigos de barras do Barkoder mapeia para a opção ExpectMultipleBarcodes do IronBarcode, que funciona em imagens e PDFs igualmente.

Abordagem do barKoder MAUI:

// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
Imports Barkoder.Maui

BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

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

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

// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);

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

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

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

// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);

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

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

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

' Works identically on images and PDFs
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)

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

Esta é uma chamada de método única. Sem extração de páginas, sem múltiplas solicitações, sem sobrecarga de processamento por código de barras. O PDF é lido nativamente.

Geração e leitura de DataMatrix

O Barcoder lê o DataMatrix, mas não consegue gerá-lo. O IronBarcode abrange ambos os lados do fluxo de trabalho, o que é um requisito comum em sistemas de rastreamento industrial.

Abordagem do barKoder MAUI:

// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Part ID: {r.TextualData}");
}
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;

BarkoderView.StartScanning(this);

public void DidFinishScanning(BarcodeResult[] result)
{
    foreach (var r in result)
        Console.WriteLine($"Part ID: {r.TextualData}");
}
Imports Barkoder.Maui

' Camera-only DataMatrix scanning; no generation available
BarkoderView.StartScanning(Me)

Public Sub DidFinishScanning(result As BarcodeResult())
    For Each r In result
        Console.WriteLine($"Part ID: {r.TextualData}")
    Next
End Sub
$vbLabelText   $csharpLabel

Abordagem do IronBarcode:

using IronBarCode;

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

// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
    .SaveAsPng("part-label.png");

// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Part Serial: {result.Value}");
    Console.WriteLine($"Barcode Type: {result.Format}");
}
using IronBarCode;

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

// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
    .SaveAsPng("part-label.png");

// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
    Console.WriteLine($"Part Serial: {result.Value}");
    Console.WriteLine($"Barcode Type: {result.Format}");
}
Imports IronBarCode

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

' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("part-label.png")

' Read DataMatrix from a scanned industrial part image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

Dim results = BarcodeReader.Read("etched-part-photo.png", options)
For Each result In results
    Console.WriteLine($"Part Serial: {result.Value}")
    Console.WriteLine($"Barcode Type: {result.Format}")
Next
$vbLabelText   $csharpLabel

Para obter uma lista completa dos formatos de codificação e opções de geração suportados, consulte a documentação de geração de código de barras do IronBarcode .

Geração de código QR com personalização da marca

O Barkoder não gera códigos de barras. O IronBarcode gera códigos QR com logotipos incorporados, um requisito comum para fluxos de trabalho de marketing, embalagem e identificação de produtos.

Abordagem do barKoder MAUI:

Not available — Plugin.Maui.Barkoder is a reader-only SDK with no
generation API on any platform.

Abordagem do IronBarcode:

using IronBarCode;

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

// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("branded-qr.png");
using IronBarCode;

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

// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("branded-qr.png");
Imports IronBarCode

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

' QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500) _
    .AddBrandLogo("company-logo.png") _
    .SaveAsPng("branded-qr.png")
$vbLabelText   $csharpLabel

Endpoint da API de código de barras do ASP.NET Core

O Barkoder não possui um modelo de implantação do lado do servidor. O equivalente a um ponto de extremidade de upload para leitura de código de barras em dispositivos móveis — que recebe uma imagem de qualquer cliente e retorna os dados do código de barras — requer uma biblioteca .NET .

Abordagem do barKoder:

Not available — Plugin.Maui.Barkoder runs only inside a MAUI app head
against a live camera. There is no ASP.NET Core integration and no
server-side execution model.

Abordagem do IronBarcode:

// In Program.cs
using IronBarCode;

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

app.MapPost("/api/scan", async (IFormFile file) =>
{
    using var stream = file.OpenReadStream();
    var imageBytes = new byte[stream.Length];
    await stream.ReadAsync(imageBytes);

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

    var results = BarcodeReader.Read(imageBytes, options);

    return Results.Ok(results.Select(r => new
    {
        Value = r.Value,
        Format = r.Format.ToString(),
    }));
});
// In Program.cs
using IronBarCode;

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

app.MapPost("/api/scan", async (IFormFile file) =>
{
    using var stream = file.OpenReadStream();
    var imageBytes = new byte[stream.Length];
    await stream.ReadAsync(imageBytes);

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

    var results = BarcodeReader.Read(imageBytes, options);

    return Results.Ok(results.Select(r => new
    {
        Value = r.Value,
        Format = r.Format.ToString(),
    }));
});
Imports IronBarCode

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

app.MapPost("/api/scan", Async Function(file As IFormFile) As Task(Of IResult)
    Using stream = file.OpenReadStream()
        Dim imageBytes(CInt(stream.Length) - 1) As Byte
        Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)

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

        Dim results = BarcodeReader.Read(imageBytes, options)

        Return Results.Ok(results.Select(Function(r) New With {
            .Value = r.Value,
            .Format = r.Format.ToString()
        }))
    End Using
End Function)
$vbLabelText   $csharpLabel

Referência de Mapeamento de API dobarKoder SDKpara IronBarcode

Esta tabela mapeia a superfície MAUI / Xamarin do barKoder para a chamada IronBarcode equivalente:

API barKoder Equivalente ao IronBarcode
Licença definida via portal / config do barKoder IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Configuração DeBlur em BarkoderView Speed = ReadingSpeed.ExtremeDetail
Configuração de múltiplas varreduras em BarkoderView ExpectMultipleBarcodes = true
SetEnabledBarcodeTypes(...) BarcodeEncoding.<Format> (detectado automaticamente na leitura)
BarkoderView.StartScanning(IBarkoderDelegate) BarcodeReader.Read("image.png") — síncrono
BarcodeResult.TextualData result.Value
BarcodeResult.BarcodeTypeName result.Format
Recuperação de danos MatrixSight ReadingSpeed.ExtremeDetail com pré-processamento ML
Entrada de quadro de câmera ao vivo Entrada de caminho de arquivo / Stream / byte[]
Processamento no dispositivo Totalmente local — sem chamadas de rede.
Sem suporte de geração BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode()
Sem suporte para PDF BarcodeReader.Read("document.pdf") — nativo
Sem implantação de servidor Funciona em ASP.NET Core, Docker, Azure Functions e Lambda.
Sem índice de página (N/A) result.PageNumber — disponível em leituras de PDF

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

Problema 1: Nomes de Pacotes NuGet

SDK do barKoder: Os pacotes oficiais .NET são Plugin.Maui.Barkoder e Barkoder.Xamarin. Nenhum deles cobre cenários não-móveis.

Solution: Instale o IronBarcode:

dotnet add package BarCode

Se Plugin.Maui.Barkoder não for mais necessário (você está se movendo completamente para processamento de arquivo / PDF / servidor), remova-o:

dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
SHELL

Problema 2: Entrada de Quadro de Câmera vs Entrada de Arquivo

barKoder SDK: Tudo chega como um quadro de câmera ao vivo — um feed de vídeo contínuo processado no dispositivo. Não há modo de entrada de caminho de arquivo.

Solução: O IronBarcode aceita arquivos, fluxos de dados, matrizes de bytes e objetos System.Drawing.Image. Para imagens enviadas de um cliente móvel, leia o fluxo de requisição diretamente:

using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
Imports System.IO

Using stream = file.OpenReadStream()
    Dim imageBytes = New Byte(stream.Length - 1) {}
    Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
    Dim results = BarcodeReader.Read(imageBytes, options)
End Using
$vbLabelText   $csharpLabel

Questão 3: API baseada em callbacks versus resultado síncrono

SDK do barKoder: BarkoderView.StartScanning(IBarkoderDelegate) usa um padrão de delegado / retorno de chamada — DidFinishScanning(BarcodeResult[]) dispara assíncronamente à medida que códigos de barras são detectados no feed da câmera.

Solução: O BarcodeReader.Read() da IronBarcode é síncrono e retorna um IEnumerable<BarcodeResult> diretamente. Em contextos ASP.NET Core onde async é necessário, envolva em Task.Run():

var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
$vbLabelText   $csharpLabel

Problema 4: Configuração do Modo DeBlur

SDK do barKoder: DeBlur é habilitado na configuração BarkoderView antes do início da varredura e se aplica a todas as varreduras subsequentes.

Solução: No IronBarcode, o equivalente é ReadingSpeed.ExtremeDetail definido por leitura através de BarcodeReaderOptions. Crie o objeto de opções uma única vez e reutilize-o:

var deepOptions = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
var deepOptions = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.ExtremeDetail,
    ExpectMultipleBarcodes = false,
};

// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
Imports System

Dim deepOptions As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.ExtremeDetail,
    .ExpectMultipleBarcodes = False
}

' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)
$vbLabelText   $csharpLabel

Problema 5: Falta de capacidade de geração

barKoder SDK: Barkoder é somente leitura. Não existe uma API para gerar códigos de barras ou códigos QR.

Solução: O IronBarcode abrange tanto a leitura quanto a geração de código de barras. Use BarcodeWriter para formatos padrão e QRCodeWriter para códigos QR:

// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
    .SaveAsPng("product-qr.png");

// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
    .ToPngBinaryData();
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
    .SaveAsPng("shipping-label.png");

// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
    .SaveAsPng("product-qr.png");

// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports System

' Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128) _
    .SaveAsPng("shipping-label.png")

' QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500) _
    .SaveAsPng("product-qr.png")

' Get as bytes for embedding in API response or PDF
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Lista de Verificação de Migração do barKoder SDK

Tarefas pré-migração

Audite sua base de código para referências ao barKoder:

grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
SHELL

Documente os cenários de código de barras atualmente implementados ou planejados:

  • Quais formatos de código de barras precisam ser lidos (Code128, DataMatrix, QR, PDF417, etc.)?
  • Se a recuperação de código de barras danificado é necessária (ReadingSpeed.ExtremeDetail)
  • Se a detecção de múltiplos códigos de barras é necessária (ExpectMultipleBarcodes = true)
  • Se a geração de código de barras é necessária (BarcodeWriter, QRCodeWriter)
  • Se o processamento de PDF é necessário (BarcodeReader.Read("doc.pdf"))
  • Destinos de implantação (ASP.NET Core, Azure Functions, Docker, Lambda, desktop, MAUI)

Tarefas de atualização de código

  1. Remova Plugin.Maui.Barkoder ou Barkoder.Xamarin de .csproj onde não é mais necessário
  2. Instale o pacote BarCode NuGet
  3. Remova using Barkoder.Maui; (ou o equivalente Xamarin) onde não é mais necessário
  4. Adicione using IronBarCode; a todos os arquivos de processamento de código de barras
  5. Adicione IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; no início da aplicação
  6. Substitua os retornos de chamada BarkoderView.StartScanning / DidFinishScanning por BarcodeReader.Read(filePath, options)
  7. Mapeie BarcodeResult.TextualData para result.Value
  8. Mapeie BarcodeResult.BarcodeTypeName para result.Format
  9. Mapeie a configuração DeBlur para Speed = ReadingSpeed.ExtremeDetail em BarcodeReaderOptions
  10. Mapeie a configuração de múltiplas varreduras para ExpectMultipleBarcodes = true em BarcodeReaderOptions
  11. Adicione chamadas de BarcodeWriter.CreateBarcode() para quaisquer requisitos de geração
  12. Adicione chamadas de QRCodeWriter.CreateQrCode() para requisitos de geração de código QR
  13. Substitua qualquer código de pré-processamento de PDF por BarcodeReader.Read("document.pdf")
  14. Envolva chamadas síncronas de BarcodeReader.Read() em Task.Run() para endpoints assíncronos do ASP.NET Core

Testes pós-migração

Após concluir as atualizações de código, verifique o seguinte:

  • Confirme se BarcodeReader.Read() retorna resultados para todos os formatos de imagem usados (PNG, JPEG, TIFF, BMP)
  • Verifique se ReadingSpeed.ExtremeDetail recupera códigos de barras das amostras de menor qualidade no seu conjunto de testes
  • Confirme se ExpectMultipleBarcodes = true retorna a contagem correta de códigos de barras de documentos com múltiplos códigos de barras
  • Testar a leitura de PDFs em todas as versões de PDF usadas nos fluxos de trabalho de documentos de produção.
  • Verifique se a saída de BarcodeWriter.CreateBarcode() é escaneável pelos seus scanners alvo
  • Verifique se a saída de QRCodeWriter.CreateQrCode() é escaneável por leitores QR móveis
  • Teste o endpoint ASP.NET Core (se aplicável) com uploads de arquivos de clientes móveis.
  • Confirme o funcionamento correto nos destinos de implantação do Docker, Azure ou Lambda.
  • Executar testes de ponta a ponta que abranjam todo o ciclo de leitura-processamento-geração, quando aplicável.

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

Uma Plataforma que Abrange .NET sem Câmera:IronBarcode instala-se do NuGet e funciona em qualquer projeto .NET — ASP.NET Core, Azure Functions, Lambda, Docker, console, trabalhador, WPF, WinForms, Avalonia, Blazor e MAUI igualmente. O Plugin.Maui.Barkoder do Barkoder cobre apenas a interface de usuário da câmera dentro de um cabeçalho de aplicativo móvel MAUI;IronBarcode cobre todo o resto.

Leitura Tolerante a Danos Sem Uma Câmera: As capacidades que tornaram o Barkoder atraente — DeBlur, MatrixSight, recuperação de danos — estão presentes no IronBarcode através de ReadingSpeed.ExtremeDetail e pré-processamento de imagem baseado em ML. O IronBarcode obtém as mesmas melhorias de precisão que o Barkoder alcança com entradas de câmera ao vivo, tanto em arquivos quanto em documentos digitalizados e imagens carregadas.

Fluxo de trabalho completo de leitura e geração: o Barkoder é somente leitura. O IronBarcode oferece leitura e geração de códigos de barras em mais de 50 formatos, tudo em um único pacote. As equipes que precisam gerar etiquetas de envio, criar códigos QR para embalagens ou incorporar códigos de barras em documentos não precisam de uma segunda biblioteca.

Suporte nativo a PDF: Ler códigos de barras em documentos PDF — faturas, manifestos, registros médicos, documentos de conformidade — é um recurso de primeira classe do IronBarcode. Sem extração intermediária de imagens, sem chamadas de API por página e sem dependências adicionais. Um PDF de várias páginas é processado em uma única chamada de BarcodeReader.Read().

Implantação completa no servidor: o IronBarcode funciona em ASP.NET Core, Azure Functions, AWS Lambda, contêineres Docker e qualquer outro ambiente de hospedagem .NET . Ele processa códigos de barras localmente, sem chamadas de rede, sem chaves de API para gerenciar e sem a latência adicionada por um serviço remoto. Processar um código de barras ou um milhão custa o mesmo — não há cobranças por solicitação.

Preços previsíveis para licenças perpétuas: O IronBarcode está disponível em uma licença perpétua única a partir de US$ 749 para um único desenvolvedor, sem cobranças por solicitação, sem limites de volume e sem renovações de assinatura. Para equipes que desenvolvem aplicativos de produção que processam códigos de barras em grande escala, o modelo de custos é simples e previsível.

Perguntas frequentes

Por que devo migrar do SDK Barkoder 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 do Barkoder 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 SDK da Barkoder 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 SDK do Barkoder 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 SDK da Barkoder?

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

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 SDK Barkoder 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