Saltar al pie de página
VIDEOS

Cómo Leer Códigos de Barras en C# for .NET 5 usando IronBarcode

Migrating from Kit de aprendizaje automático de Google Barcode Scanning to IronBarcode

Esta guía está dirigida a equipos que se encuentren en una de estas dos situaciones: están migrando una aplicación de Android a .NET MAUI o .NET 9 y necesitan reemplazar el escáner de códigos de barras de ML Kit por una alternativa administrada, o les recomendaron Kit de aprendizaje automático de Google en una conversación sobre códigos de barras multiplataforma y descubrieron, al intentar agregar el paquete NuGet , que no existe.

Google ML Kit Barcode Scanning es una biblioteca nativa para Android e iOS. Se distribuye como una dependencia de Maven (com.google.mlkit:barcode-scanning:17.3.0 agrupada, o com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 no agrupada) para Kotlin/Java y como un CocoaPod (GoogleMLKit/BarcodeScanning) para Swift. ML Kit ha sido un producto independiente desde junio de 2020 y ya no requiere Firebase, pero no hay un SDK oficial para .NET, no dotnet add package google-mlkit-barcode, y no hay una API de C# de primera parte de Google. A lo largo de los años han aparecido enlaces Xamarin/MAUI mantenidos por la comunidad, pero se rompen cuando ML Kit actualiza su SDK subyacente.

IronBarcode es una biblioteca nativa de .NET que se instala desde NuGet, se integra con los patrones estándar de .NET y se ejecuta en Windows, Linux, macOS, Docker, Azure y AWS. Esta guía muestra cómo traducir los patrones que escribiste en Kotlin o Java a código C# equivalente.

El contexto de la portabilidad

Al migrar de ML Kit a IronBarcode, se producen algunos cambios estructurales, no solo sintácticos:

Las devoluciones de llamada se convierten en valores de retorno. ML Kit utiliza la API Task de Android con addOnSuccessListener y addOnFailureListener. El BarcodeReader.Read() de IronBarcode devuelve una colección de manera síncrona. Lo iteras directamente. Sin registro de devolución de llamada, sin coordinación de hilos.

No hay objeto escáner. ML Kit requiere que construyas un objeto BarcodeScannerOptions, llames a BarcodeScanning.getClient(options) para obtener una instancia de escáner, luego llames a scanner.process(inputImage). IronBarcode utiliza métodos estáticos; BarcodeReader.Read() es el punto de entrada. No hay ninguna instancia que gestionar o desechar.

Sin construcción de InputImage. El InputImage de ML Kit debe construirse desde una fuente específica de Android: InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation), o InputImage.fromMediaImage(image, rotation). IronBarcode acepta una cadena de ruta de archivo, un Stream, un byte[], o un System.Drawing.Bitmap. Sin contexto de Android, sin URI, sin metadatos de rotación.

No hay servicios de Google Play. El modelo de ML Kit no empaquetado se ejecuta a través de Google Play Services. La variante empaquetada envía el modelo dentro del APK (agregando aproximadamente 2.4 MB) y evita la verificación de Play Services, pero ninguna variante está disponible en objetivos .NET. IronBarcode no tiene esa dependencia: funciona de forma idéntica en cualquier plataforma compatible con .NET .

Configuración rápida en .NET

Elimine cualquier paquete de enlace de Xamarin/MAUI ML Kit si existen en su proyecto, luego instale IronBarcode:

dotnet add package BarCode

Agrega la clave de licencia al inicio de la aplicación, en Program.cs, MauiProgram.cs, o Startup.cs dependiendo del tipo de aplicación:

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

La licencia se puede establecer en cualquier momento antes de la primera llamada BarcodeReader.Read() o BarcodeWriter.CreateBarcode(). Hay disponible una prueba gratuita; El modo de prueba aplica marcas de agua a los códigos de barras generados, pero no restringe la lectura.

Lectura de códigos de barras: de Kotlin a C

Lectura básica de un solo código de barras

Aquí se muestra una lectura típica de ML Kit en Kotlin, que escanea un único código QR desde una URI de archivo:

// 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}")
    }

El equivalente en C# con 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

El resultado está disponible inmediatamente como valor de retorno. barcode.Value corresponde a barcode.rawValue. barcode.Format corresponde a barcode.format. El manejo de errores utiliza el método try/catch estándar en lugar de un detector de errores independiente.

Lectura de múltiples códigos de barras

ML Kit escanea un único InputImage y devuelve una lista. Para múltiples códigos de barras en una imagen, debes iterar la lista del listener de éxito:

// 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") }

Con IronBarcode, ajusta ExpectMultipleBarcodes = true en BarcodeReaderOptions e itera la colección 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

Especificación de formato: setBarcodeFormats a BarcodeReaderOptions

ML Kit requiere que especifiques qué formatos buscar a través de setBarcodeFormats(). Si lo omites, ML Kit buscará en todos los formatos. IronBarcode funciona de la misma manera: si se omiten las restricciones de formato, la búsqueda se realiza en todos los ámbitos, pero especificar los tipos esperados mejora el rendimiento.

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

Uso de indicadores de formato en 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

La combinación OR a nivel de bits funciona de la misma manera que la lista de formato vararg de ML Kit.

Acceso al resultado: rawValue y formato

El objeto de resultado de ML Kit expone rawValue (un String?) y format (una constante Int). El resultado de IronBarcode expone Value (un string) y Format (un valor enum 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 siempre es una cadena no nula en IronBarcode; si la lectura tuvo éxito, el valor está presente. barcode.Format es el miembro enum BarcodeEncoding, al cual puedes comparar directamente: if (barcode.Format == BarcodeEncoding.QRCode).

¿Qué diferencias hay en .NET?

API síncrona en lugar de funciones de devolución de llamada. Este es el cambio estructural más significativo. El scanner.process() de ML Kit devuelve un Task<List<Barcode>> en el sentido de Android; encadenas listeners. El BarcodeReader.Read() de IronBarcode devuelve el resultado en línea. Si necesitas ejecutarlo fuera del hilo de la interfaz de usuario en una aplicación MAUI, envuélvelo en 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

Sin parámetro de contexto. Cada llamada de ML Kit que construye un InputImage requiere un Context de Android. IronBarcode solo necesita una ruta de archivo o un flujo de datos. Eliminar el encadenamiento de contexto de la lógica de los códigos de barras simplifica considerablemente el código.

Sin servicios de Google Play. El modelo estándar de ML Kit se ejecuta a través de Play Services; BarcodeScanning.getClient() verifica la disponibilidad de Play Services en tiempo de ejecución y arroja una excepción si no está disponible. IronBarcode no tiene comprobación de servicio en tiempo de ejecución. O bien lee la imagen o bien genera una excepción estándar.

Manejo de excepciones estándar. El addOnFailureListener de ML Kit recibe una subclase de Java Exception. En .NET, las fallas aparecen como lanzamientos estándar System.Exception, capturables con try/catch de la manera normal.

Lectura de documentos PDF

ML Kit no admite archivos PDF. InputImage.fromFilePath() con una URI .pdf o falla o solo lee la primera página como una imagen rasterizada, dependiendo de la versión de Android. Si su escenario de migración implica documentos (procesamiento de facturas, manifiestos logísticos, escaneo de formularios), IronBarcode maneja archivos PDF de forma nativa:

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

Sin paso de extracción de imágenes, sin biblioteca PDF de terceros, sin bucle de iteración de página con renderizado separado. Indique la ruta del PDF y obtenga todos los valores del código de barras junto con sus números de página.

Nuevas capacidades: Generación

ML Kit no genera códigos de barras, solo los lee. Si su aplicación adaptada necesita generar etiquetas, billetes o códigos QR, IronBarcode lo incluye en el mismo paquete.

Código 128 para etiquetas de envío:

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

Generación 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 con logotipo y color:

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

Devuelve el código de barras como una matriz de bytes para una respuesta HTTP:

using IronBarCode;

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

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

// In an ASP.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

Ninguno de estos patrones tiene equivalentes en ML Kit. Se trata de nuevas funcionalidades disponibles gracias a que se trabaja con una biblioteca completa de códigos de barras .NET en lugar de un escáner exclusivamente para dispositivos móviles.

Procesamiento por lotes del lado del servidor

ML Kit procesa una imagen por llamada, requiere un entorno de ejecución para Android/iOS y no contempla la ejecución en el servidor. IronBarcode procesa archivos en un bucle, se ejecuta en ASP.NET Corey se 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

Este proceso —leer una carpeta de imágenes, extraer códigos de barras y agregar resultados— no es posible con ML Kit. Se trata de un flujo de trabajo estándar de IronBarcode .

Comparación de características

Característica Kit de aprendizaje automático de Google IronBarcode
Paquete NuGet .NET None BarCode
API de C# / .NET None
Lectura de códigos de barras Sí (Android/iOS) Sí (todas las plataformas)
Generación de códigos de barras No
Generación de código QR No
Inserción de logotipo QR No
Entrada en PDF No
Compatibilidad con documentos de varias páginas No
Entrada de cámara/fotograma Mediante archivo de imagen
Implementación del lado del servidor No
ASP.NET Core No
Azure Functions No
Docker / Linux No
Se requieren los servicios de Google Play. Solo variante no empaquetada No
Dependencia de Firebase No (independiente desde junio de 2020) No
API .NET síncrona No
Compatible con la inyección de dependencias No Sí (API estática)
ExpectMultipleBarcodes opción A través de la lista de resultados BarcodeReaderOptions
Especificaciones de formato setBarcodeFormats() ExpectBarcodeTypes
Compromiso entre velocidad y precisión Fijo (basado en modelo) ReadingSpeed enum
Precios Gratis (en el dispositivo, solo móvil) Desde $749 (Lite) perpetua
Plataformas Android, iOS Windows, Linux, macOS, Docker, Azure, AWS

Lista de comprobación de la migración

Si estás adaptando un código base de Android o reemplazando un enlace no oficial de Xamarin ML Kit, busca estos patrones en tu proyecto y aplica las traducciones anteriores:

  • com.google.mlkit:barcode-scanning en archivos Gradle → eliminar, agregar BarCode NuGet
  • BarcodeScannerOptions.Builder()new BarcodeReaderOptions { }
  • BarcodeScanning.getClient(options) → eliminar (no hay instancia de escáner en IronBarcode)
  • InputImage.fromFilePath(context, uri) → argumento de cadena de ruta del archivo
  • InputImage.fromBitmap(bitmap, rotation)BarcodeReader.Read(stream) o sobrecarga de matriz de bytes
  • scanner.process(inputImage)BarcodeReader.Read(path, options)
  • .addOnSuccessListener { barcodes -> } → iterar el valor de retorno de Read()
  • .addOnFailureListener { e -> } → try/catch alrededor 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; (binding de Xamarin) → using IronBarCode;
  • IronBarCode.License.LicenseKey debería establecerse en MauiProgram.cs, Program.cs, o Startup.cs

El cambio estructural de código basado en devoluciones de llamada a código síncrono es el trabajo principal. Las constantes de formato y los nombres de los campos de resultado son asignaciones directas. La compatibilidad con PDF y su generación es puramente aditiva; no requiere migración, solo código nuevo.

Preguntas Frecuentes

¿Por qué debería migrar de Google ML Kit Barcode Scanning a IronBarcode?

Entre las razones más comunes se incluyen la simplificación de licencias (eliminando la complejidad de SDK + clave de tiempo de ejecución), la eliminación de límites de rendimiento, la obtención de compatibilidad nativa con PDF, la mejora de la implementación de Docker/CI/CD y la reducción de la repetición de API en el código de producción.

¿Cómo puedo sustituir las llamadas a la API de Google ML Kit por IronBarcode?

Sustituya la creación de instancias y la repetición de licencias por IronBarCode.License.LicenseKey = "key". Sustituya las llamadas al lector por BarcodeReader.Read(path) y las llamadas al escritor por BarcodeWriter.CreateBarcode(data, encoding). Los métodos estáticos no requieren gestión de instancias.

¿Cuánto cambia el código al migrar de Google ML Kit Barcode Scanning a IronBarcode?

La mayoría de las migraciones se traducen en menos líneas de código. Se eliminan la repetición de licencias, los constructores de instancias y la configuración explícita de formatos. Las operaciones básicas de lectura/escritura se traducen a equivalentes IronBarcode más cortos con objetos de resultado más limpios.

¿Necesito tener instalados tanto Google ML Kit Barcode Scanning como IronBarcode durante la migración?

No. La mayoría de las migraciones son sustituciones directas en lugar de operaciones paralelas. Migre una clase de servicio cada vez, sustituya la referencia NuGet y actualice los patrones de instanciación y llamada a la API antes de pasar a la siguiente clase.

¿Cuál es el nombre del paquete NuGet para IronBarcode?

El paquete es 'IronBarCode' (con B y C mayúsculas). Instálalo con 'Install-Package IronBarCode' o 'dotnet add package IronBarCode'. La directiva using en el código es 'using IronBarCode;'.

¿Cómo simplifica IronBarcode el despliegue de Docker en comparación con Google ML Kit Barcode Scanning?

IronBarcode es un paquete NuGet sin archivos SDK externos ni configuración de licencia montada. En Docker, establezca la variable de entorno IRONBARCODE_LICENSE_KEY y el paquete se encargará de la validación de la licencia al inicio.

¿IronBarcode detecta automáticamente todos los formatos de código de barras después de migrar desde Google ML Kit?

Sí, IronBarcode detecta automáticamente la simbología de todos los formatos compatibles. No es necesaria la enumeración explícita de BarcodeTypes. Si ya se conoce el formato y el rendimiento es importante, BarcodeReaderOptions permite restringir el espacio de búsqueda como optimización.

¿Puede IronBarcode leer códigos de barras de PDF sin una biblioteca independiente?

Sí. BarcodeReader.Read("document.pdf") procesa archivos PDF de forma nativa. Los resultados incluyen PageNumber, Format, Value y Confidence para cada código de barras encontrado. No es necesario ningún paso externo de procesamiento de PDF.

¿Cómo gestiona IronBarcode el procesamiento paralelo de códigos de barras?

Los métodos estáticos de IronBarcode no tienen estado y son seguros para los hilos. Utilice Parallel.ForEach directamente sobre listas de archivos sin gestión de instancias por subproceso. BarcodeReaderOptions.MaxParallelThreads controla el presupuesto interno de hilos.

¿Qué propiedades de los resultados cambian al migrar de Google ML Kit Barcode Scanning a IronBarcode?

Cambios de nombre comunes: BarcodeValue se convierte en Value, BarcodeType se convierte en Format. Los resultados de IronBarcode también añaden Confidence y PageNumber. Una búsqueda y sustitución en toda la solución gestiona los cambios de nombre en el código de procesamiento de resultados existente.

¿Cómo configuro las licencias de IronBarcode en un proceso CI/CD?

Almacene IRONBARCODE_LICENSE_KEY como un secreto de canalización y asigne IronBarCode.License.LicenseKey en el código de inicio de la aplicación. Un secreto cubre todos los entornos, incluidos los de desarrollo, prueba, montaje y producción.

¿Admite IronBarcode la generación de códigos QR con estilos personalizados?

Sí. QRCodeWriter.CreateQrCode() admite colores personalizados mediante ChangeBarCodeColor(), incrustación de logotipos mediante AddBrandLogo(), niveles de corrección de errores configurables y múltiples formatos de salida, incluidos PNG, JPG, PDF y stream.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame