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

Como ler códigos de barras em C# for .NET 5 usando IronBarcode

Migrating from Kit de aprendizado de máquina do Google Barcode Scanning to IronBarcode

Este guia destina-se a equipes em uma das duas situações: você está migrando um aplicativo Android for .NET MAUI ou .NET 9 e precisa substituir o leitor de código de barras do ML Kit por uma alternativa gerenciada, ou você recebeu a recomendação do Kit de aprendizado de máquina do Google em uma discussão sobre código de barras multiplataforma e descobriu — ao tentar adicionar o pacote NuGet — que ele não existe.

O Kit de aprendizado de máquina do Google Barcode Scanning é uma biblioteca nativa para Android e iOS. Ele vem como uma dependência Maven (com.google.mlkit:barcode-scanning:17.3.0 agrupada, ou com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 não agrupada) para Kotlin/Java e como um CocoaPod (GoogleMLKit/BarcodeScanning) para Swift. O ML Kit tem sido um produto independente desde junho de 2020 e não requer mais o Firebase, mas não há um SDK oficial para .NET, não há dotnet add package google-mlkit-barcode, e não há uma API C# de primeira parte do Google. Vínculos Xamarin/MAUI mantidos pela comunidade apareceram ao longo dos anos, mas eles quebram quando o ML Kit atualiza seu SDK subjacente.

IronBarcode é uma biblioteca nativa do .NET que é instalada a partir do NuGet, integra-se com padrões .NET padrão e funciona no Windows, Linux, macOS, Docker, Azure e AWS. Este guia mostra como traduzir os padrões que você escreveu em Kotlin ou Java para código C# equivalente.

O Contexto de Portabilidade

Ao migrar do ML Kit para o IronBarcode, algumas coisas mudam estruturalmente — e não apenas sintaticamente:

Callbacks se tornam valores de retorno. O ML Kit usa a API do Android Task com addOnSuccessListener e addOnFailureListener. BarcodeReader.Read() do IronBarcode retorna uma coleção de forma síncrona. Você itera diretamente. Sem registro de retorno de chamada, sem coordenação de threads.

Nenhum objeto scanner. O ML Kit requer que você construa um objeto BarcodeScannerOptions, chame BarcodeScanning.getClient(options) para obter uma instância de scanner, e então chame scanner.process(inputImage). O IronBarcode usa métodos estáticos — BarcodeReader.Read() é o ponto de entrada. Não há instâncias para gerenciar ou descartar.

Nenhuma construção de InputImage. O InputImage do ML Kit deve ser construído a partir de uma fonte específica do Android: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation), ou InputImage.fromMediaImage(image, rotation). O IronBarcode aceita uma string de caminho de arquivo, um Stream, um byte[], ou um System.Drawing.Bitmap. Sem contexto do Android, sem URI, sem metadados de rotação.

Sem Google Play Services. O modelo não embutido do ML Kit executa através dos Google Play Services. A variante embutida leva o modelo dentro do APK (adicionando cerca de 2,4 MB) e evita a verificação dos Play Services, mas nenhuma variante está disponível para alvos .NET. O IronBarcode não possui essa dependência — ele funciona de forma idêntica em qualquer plataforma compatível com o .NET .

Configuração rápida em .NET

Remova quaisquer pacotes de vinculação do Xamarin/MAUI ML Kit que existam em seu projeto e, em seguida, instale o IronBarcode:

dotnet add package BarCode

Adicione a chave de licença na inicialização do aplicativo — em Program.cs, MauiProgram.cs, ou Startup.cs, dependendo do tipo do seu aplicativo:

// NuGet: dotnet add package BarCode
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// NuGet: dotnet add package BarCode
using IronBarCode;

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

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

A licença pode ser definida em qualquer ponto antes da primeira chamada BarcodeReader.Read() ou BarcodeWriter.CreateBarcode(). Está disponível um período de teste gratuito; O modo de avaliação gera marcas d'água com códigos de barras, mas não restringe a leitura.

Leitura de códigos de barras: Kotlin para C

Leitura básica de código de barras único

Aqui está um exemplo típico de leitura do ML Kit em Kotlin, que escaneia um único código QR de um URI de arquivo:

// Android Kotlin — ML Kit
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_QR_CODE)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        val barcode = barcodes.firstOrNull()
        if (barcode != null) {
            Log.d("MLKit", "Value: ${barcode.rawValue}")
            Log.d("MLKit", "Format: ${barcode.format}")
        }
    }
    .addOnFailureListener { e ->
        Log.e("MLKit", "Scan failed: ${e.message}")
    }

O equivalente em C# com IronBarcode:

using IronBarCode;

try
{
    var results = BarcodeReader.Read("captured-image.jpg");
    var barcode = results.FirstOrDefault();
    if (barcode != null)
    {
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Format: {barcode.Format}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Scan failed: {ex.Message}");
}
using IronBarCode;

try
{
    var results = BarcodeReader.Read("captured-image.jpg");
    var barcode = results.FirstOrDefault();
    if (barcode != null)
    {
        Console.WriteLine($"Value: {barcode.Value}");
        Console.WriteLine($"Format: {barcode.Format}");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"Scan failed: {ex.Message}");
}
Imports IronBarCode

Try
    Dim results = BarcodeReader.Read("captured-image.jpg")
    Dim barcode = results.FirstOrDefault()
    If barcode IsNot Nothing Then
        Console.WriteLine($"Value: {barcode.Value}")
        Console.WriteLine($"Format: {barcode.Format}")
    End If
Catch ex As Exception
    Console.WriteLine($"Scan failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

O resultado está disponível imediatamente como um valor de retorno. barcode.Value corresponde a barcode.rawValue. barcode.Format corresponde a barcode.format. O tratamento de erros utiliza o padrão try/catch em vez de um ouvinte de falhas separado.

Leitura de múltiplos códigos de barras

O ML Kit escaneia um único InputImage e retorna uma lista. Para vários códigos de barras em uma imagem, você itera a lista do ouvinte de sucesso:

// Android Kotlin — ML Kit, multiple barcodes
val options = BarcodeScannerOptions.Builder()
    .setBarcodeFormats(Barcode.FORMAT_ALL_FORMATS)
    .build()
val scanner = BarcodeScanning.getClient(options)
val inputImage = InputImage.fromFilePath(context, imageUri)

scanner.process(inputImage)
    .addOnSuccessListener { barcodes ->
        for (barcode in barcodes) {
            val rawValue = barcode.rawValue
            val format = barcode.format
            processBarcode(rawValue, format)
        }
    }
    .addOnFailureListener { e -> Log.e("MLKit", e.message ?: "Unknown error") }

Com o IronBarcode, defina ExpectMultipleBarcodes = true em BarcodeReaderOptions e itere a coleção de resultados:

using IronBarCode;

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

var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
    ProcessBarcode(barcode.Value, barcode.Format);
}
using IronBarCode;

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

var results = BarcodeReader.Read("warehouse-shelf.jpg", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}");
    ProcessBarcode(barcode.Value, barcode.Format);
}
Imports IronBarCode

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

Dim results = BarcodeReader.Read("warehouse-shelf.jpg", options)
For Each barcode In results
    Console.WriteLine($"Format: {barcode.Format}, Value: {barcode.Value}")
    ProcessBarcode(barcode.Value, barcode.Format)
Next
$vbLabelText   $csharpLabel

Especificação de formato: defina os formatos de código de barras como Opções do Leitor de Código de Barras

O ML Kit requer que você especifique quais formatos procurar via setBarcodeFormats(). Se você omitir esse parâmetro, o ML Kit pesquisará em todos os formatos. O IronBarcode funciona da mesma forma — omitir as restrições de formato permite a busca em tudo, mas especificar os tipos esperados melhora o desempenho.

Kit ML Kotlin IronBarcode C#
Barcode.FORMAT_QR_CODE BarcodeEncoding.QRCode
Barcode.FORMAT_CODE_128 BarcodeEncoding.Code128
Barcode.FORMAT_CODE_39 BarcodeEncoding.Code39
Barcode.FORMAT_CODE_93 BarcodeEncoding.Code93
Barcode.FORMAT_EAN_13 BarcodeEncoding.EAN13
Barcode.FORMAT_EAN_8 BarcodeEncoding.EAN8
Barcode.FORMAT_UPC_A BarcodeEncoding.UPCA
Barcode.FORMAT_UPC_E BarcodeEncoding.UPCE
Barcode.FORMAT_PDF417 BarcodeEncoding.PDF417
Barcode.FORMAT_DATA_MATRIX BarcodeEncoding.DataMatrix
Barcode.FORMAT_AZTEC BarcodeEncoding.Aztec
Barcode.FORMAT_ITF BarcodeEncoding.ITF
Barcode.FORMAT_CODABAR BarcodeEncoding.Codabar
Barcode.FORMAT_ALL_FORMATS Omitir ExpectBarcodeTypes

Utilizando sinalizadores de formatação no IronBarcode:

using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};

var results = BarcodeReader.Read("product-image.jpg", options);
using IronBarCode;

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    ExpectBarcodeTypes = BarcodeEncoding.QRCode | BarcodeEncoding.Code128 | BarcodeEncoding.EAN13
};

var results = BarcodeReader.Read("product-image.jpg", options);
Imports IronBarCode

Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .ExpectBarcodeTypes = BarcodeEncoding.QRCode Or BarcodeEncoding.Code128 Or BarcodeEncoding.EAN13
}

Dim results = BarcodeReader.Read("product-image.jpg", options)
$vbLabelText   $csharpLabel

A combinação OR bit a bit funciona da mesma forma que a lista de formato vararg do ML Kit.

Acesso aos resultados: valor bruto e formato

O objeto de resultado do ML Kit expõe rawValue (um String?) e format (uma constante Int). O resultado do IronBarcode expõe Value (um string) e Format (um valor enumerado BarcodeEncoding).

// Kit ML Kotlin — result fields
val rawValue: String? = barcode.rawValue
val format: Int = barcode.format
val boundingBox: Rect? = barcode.boundingBox
val displayValue: String? = barcode.displayValue
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
//IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
'IronBarcode VB.NET— result fields
Dim value As String = barcode.Value
Dim format As BarcodeEncoding = barcode.Format
Dim page As Integer = barcode.PageNumber ' populated for PDF / multi-page input
$vbLabelText   $csharpLabel

barcode.Value é sempre uma string não nula no IronBarcode— se a leitura tiver sucesso, o valor está presente. barcode.Format é o membro da enumeração BarcodeEncoding, que você pode comparar diretamente: if (barcode.Format == BarcodeEncoding.QRCode).

O que há de diferente no .NET?

API síncrona em vez de callbacks. Essa é a mudança estrutural mais significativa. O scanner.process() do ML Kit retorna um Task<List<Barcode>> no sentido do Android — você encadeia ouvintes. O BarcodeReader.Read() do IronBarcode retorna o resultado inline. Se você precisar executá-lo fora do thread da interface do usuário em um aplicativo MAUI, envolva-o em Task.Run():

using IronBarCode;

// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
    // update UI on main thread
    MainThread.BeginInvokeOnMainThread(() =>
    {
        ResultLabel.Text = barcode.Value;
    });
}
using IronBarCode;

// In a MAUI ViewModel or page code-behind
var results = await Task.Run(() => BarcodeReader.Read(imagePath));
foreach (var barcode in results)
{
    // update UI on main thread
    MainThread.BeginInvokeOnMainThread(() =>
    {
        ResultLabel.Text = barcode.Value;
    });
}
Imports IronBarCode
Imports System.Threading.Tasks
Imports Microsoft.Maui.Dispatching

' In a MAUI ViewModel or page code-behind
Dim results = Await Task.Run(Function() BarcodeReader.Read(imagePath))
For Each barcode In results
    ' update UI on main thread
    MainThread.BeginInvokeOnMainThread(Sub()
                                           ResultLabel.Text = barcode.Value
                                       End Sub)
Next
$vbLabelText   $csharpLabel

Nenhum parâmetro de contexto. Cada chamada do ML Kit que constrói um InputImage requer um Context do Android. O IronBarcode precisa apenas de um caminho de arquivo ou fluxo de dados. Remover o encadeamento de contexto da lógica do código de barras simplifica consideravelmente o código.

Sem Google Play Services. O modelo padrão do ML Kit é executado pelo Play Services — BarcodeScanning.getClient() verifica a disponibilidade do Play Services em tempo de execução e lança uma exceção se indisponível.IronBarcode não possui verificação de serviço em tempo de execução. Ou lê a imagem ou lança uma exceção padrão.

Tratamento de exceção padrão. O addOnFailureListener do ML Kit recebe uma subclasse Java Exception. Não .NET, falhas emergem como lançamentos padrão @@--CODE-1354@@, capturáveis com try/catch da forma normal.

Leitura de documentos PDF

O ML Kit não oferece suporte a PDF. InputImage.fromFilePath() com um URI .pdf falha ou lê apenas a primeira página como uma imagem rasterizada, dependendo da versão do Android. Se o seu cenário de portabilidade envolver documentos — processamento de faturas, manifestos logísticos, digitalização de formulários — o IronBarcode lida com PDFs nativamente:

using IronBarCode;

// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
using IronBarCode;

// Read all barcodes from all pages of a PDF
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};

var results = BarcodeReader.Read("invoice-batch.pdf", options);
foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
}
Imports IronBarCode

' Read all barcodes from all pages of a PDF
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}

Dim results = BarcodeReader.Read("invoice-batch.pdf", options)
For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
$vbLabelText   $csharpLabel

Sem etapa de extração de imagem, sem biblioteca PDF de terceiros, sem loop de iteração de página com renderização separada. Forneça o caminho do PDF e obtenha todos os valores dos códigos de barras com seus respectivos números de página.

Novas capacidades: Geração

O ML Kit não gera códigos de barras — ele apenas os lê. Se a sua aplicação adaptada precisar gerar etiquetas, bilhetes ou códigos QR, o IronBarcode oferece essa funcionalidade no mesmo pacote.

Código 128 para etiquetas de envio:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-2024-98341", BarcodeEncoding.Code128)
    .ResizeTo(400, 120)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

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

Geração de código QR:

using IronBarCode;

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

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

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

Código QR com logotipo e cor:

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500)
    .AddBrandLogo("company-logo.png")
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue)
    .SaveAsPng("product-qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com/product/4821", 500) _
    .AddBrandLogo("company-logo.png") _
    .ChangeBarCodeColor(System.Drawing.Color.DarkBlue) _
    .SaveAsPng("product-qr.png")
$vbLabelText   $csharpLabel

Retorna o código de barras como um array de bytes para uma resposta HTTP:

using IronBarCode;

// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
using IronBarCode;

// In anASP.NET Corecontroller action
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode)
    .ToPngBinaryData();

return File(barcodeBytes, "image/png");
Imports IronBarCode

' In an ASP.NET Core controller action
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("ORDER-7734", BarcodeEncoding.QRCode) _
    .ToPngBinaryData()

Return File(barcodeBytes, "image/png")
$vbLabelText   $csharpLabel

Nenhum desses padrões possui equivalentes no ML Kit. São novas funcionalidades disponíveis porque você está trabalhando em uma biblioteca completa de código de barras .NET, em vez de um scanner exclusivo para dispositivos móveis.

Processamento em lote no servidor

O ML Kit processa uma imagem por chamada, requer o ambiente de execução Android/iOS e não possui o conceito de execução no lado do servidor. O IronBarcode processa arquivos em um loop, é executado noASP.NET Coree escala normalmente:

using IronBarCode;

// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();

foreach (var file in imageFiles)
{
    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Faster,
        ExpectMultipleBarcodes = false
    };

    var results = BarcodeReader.Read(file, options);
    foreach (var barcode in results)
    {
        allResults.Add((file, barcode.Value, barcode.Format));
    }
}

// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
    Console.WriteLine($"{file}: [{format}] {value}");
}
using IronBarCode;

// Process a folder of scanned document images
var imageFiles = Directory.GetFiles("/data/scans", "*.jpg");
var allResults = new List<(string File, string Value, BarcodeEncoding Format)>();

foreach (var file in imageFiles)
{
    var options = new BarcodeReaderOptions
    {
        Speed = ReadingSpeed.Faster,
        ExpectMultipleBarcodes = false
    };

    var results = BarcodeReader.Read(file, options);
    foreach (var barcode in results)
    {
        allResults.Add((file, barcode.Value, barcode.Format));
    }
}

// Write results to CSV, database, etc.
foreach (var (file, value, format) in allResults)
{
    Console.WriteLine($"{file}: [{format}] {value}");
}
Imports IronBarCode
Imports System.IO

' Process a folder of scanned document images
Dim imageFiles = Directory.GetFiles("/data/scans", "*.jpg")
Dim allResults = New List(Of (File As String, Value As String, Format As BarcodeEncoding))()

For Each file In imageFiles
    Dim options = New BarcodeReaderOptions With {
        .Speed = ReadingSpeed.Faster,
        .ExpectMultipleBarcodes = False
    }

    Dim results = BarcodeReader.Read(file, options)
    For Each barcode In results
        allResults.Add((file, barcode.Value, barcode.Format))
    Next
Next

' Write results to CSV, database, etc.
For Each result In allResults
    Console.WriteLine($"{result.File}: [{result.Format}] {result.Value}")
Next
$vbLabelText   $csharpLabel

Esse padrão — ler uma pasta de imagens, extrair códigos de barras e agregar resultados — não é possível com o ML Kit. É um fluxo de trabalho padrão do IronBarcode.

Comparação de recursos

Recurso Kit de aprendizado de máquina do Google IronBarcode
Pacote NuGet .NET None BarCode
API C# / .NET None Sim
Leitura de código de barras Sim (Android/iOS) Sim (todas as plataformas)
Geração de código de barras Não Sim
Geração de código QR Não Sim
Incorporação de logotipo QR Não Sim
Entrada de PDF Não Sim
Suporte para documentos com várias páginas Não Sim
Entrada de câmera/quadro Sim Por meio de arquivo de imagem
Implantação no lado do servidor Não Sim
ASP.NET Core Não Sim
Azure Functions Não Sim
Docker / Linux Não Sim
Serviços do Google Play necessários Variante não embutida apenas Não
Dependência Firebase Não (autônomo desde junho de 2020) Não
API .NET síncrona Não Sim
Compatível com injeção de dependência Não Sim (API estática)
ExpectMultipleBarcodes opção Por meio da lista de resultados BarcodeReaderOptions
Especificação de formato setBarcodeFormats() ExpectBarcodeTypes
equilíbrio entre velocidade e precisão Fixo (baseado em modelo) ReadingSpeed enum
Preços Grátis (no dispositivo, apenas móvel) A partir de $749 (Lite) perpétua
Plataformas Android, iOS Windows, Linux, macOS, Docker, Azure, AWS

Lista de verificação para migração

Se você estiver migrando um código-fonte do Android ou substituindo uma vinculação não oficial do Xamarin ML Kit, procure esses padrões em seu projeto e aplique as traduções acima:

  • com.google.mlkit:barcode-scanning em arquivos Gradle → remova, adicione BarCode NuGet
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) → remova (nenhuma instância de scanner no IronBarcode)
  • InputImage.fromFilePath(context, uri) → argumento de string de caminho de arquivo
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) ou sobrecarga de array de bytes
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> } → iterar valor de retorno de Read()
  • .addOnFailureListener { e -> } → try/catch em torno de Read()
  • barcode.rawValuebarcode.Value
  • barcode.formatbarcode.Format
  • Barcode.FORMAT_QR_CODEBarcodeEncoding.QRCode
  • Barcode.FORMAT_CODE_128BarcodeEncoding.Code128
  • Barcode.FORMAT_ALL_FORMATS → omitir ExpectBarcodeTypes
  • using Google.MLKit.BarcodeScanning; (vinculação Xamarin) → using IronBarCode;
  • IronBarCode.License.LicenseKey deve ser definido em MauiProgram.cs, Program.cs, ou Startup.cs

A principal tarefa consiste na mudança estrutural de código baseado em callbacks para código síncrono. As constantes de formato e os nomes dos campos de resultado são mapeamentos diretos. O suporte para PDF e geração de arquivos é puramente aditivo — não requer migração, apenas novo código.

Perguntas frequentes

Por que devo migrar da leitura de código de barras do Google ML Kit 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 Google ML Kit 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 da leitura de código de barras do Google ML Kit 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 Google ML Kit Barcode Scanning 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 a leitura de código de barras do Google ML Kit?

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 Google ML Kit?

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 da leitura de código de barras do Google ML Kit 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