Comment lire des codes-barres en C# for .NET 5 utilisant IronBarcode
Passer de Kit ML de GoogleBarcode Scanning à IronBarcode
Ce guide s'adresse aux équipes se trouvant dans l'une des deux situations suivantes : soit vous portez une application Android vers .NET MAUI ou .NET 9 et devez remplacer le lecteur de codes-barres de ML Kit par une alternative gérée, soit on vous a recommandé Kit ML de Googlelors d'une discussion sur les codes-barres multiplateformes et vous avez découvert — en voulant ajouter le package NuGet — qu'il n'existe pas.
Google ML Kit Barcode Scanning est une bibliothèque native pour Android et iOS. Il est fourni comme une dépendance Maven (com.google.mlkit:barcode-scanning:17.3.0 intégré ou com.google.android.gms:play-services-mlkit-barcode-scanning:18.3.1 non intégré) pour Kotlin/Java et comme un CocoaPod (GoogleMLKit/BarcodeScanning) pour Swift. ML Kit est un produit autonome depuis juin 2020 et ne nécessite plus Firebase, mais il n'y a pas de SDK .NET officiel, pas de dotnet add package google-mlkit-barcode, et pas d'API C# de Google. Des liaisons Xamarin/MAUI maintenues par la communauté sont apparues au fil des ans, mais elles se cassent lorsque ML Kit met à jour son SDK sous-jacent.
IronBarcode est une bibliothèque .NET native qui s'installe depuis NuGet, s'intègre aux modèles .NET standard et fonctionne sous Windows, Linux, macOS, Docker, Azure et AWS. Ce guide explique comment traduire les modèles que vous avez écrits en Kotlin ou Java en code C# équivalent.
Le contexte du portage
Lors du passage de ML Kit à IronBarcode, plusieurs éléments changent structurellement, et pas seulement syntaxiquement :
Les callbacks deviennent des valeurs de retour. ML Kit utilise l'API Task d'Android avec addOnSuccessListener et addOnFailureListener. Le BarcodeReader.Read() d'IronBarcode retourne une collection de manière synchrone. Vous l'itérez directement. Aucun enregistrement de rappel, aucune coordination des threads.
Pas d'objet scanner. ML Kit vous oblige à construire un objet BarcodeScannerOptions, à appeler BarcodeScanning.getClient(options) pour obtenir une instance de scanner, puis à appeler scanner.process(inputImage). Code-barres IronBarcode utilise des méthodes statiques — BarcodeReader.Read() est le point d'entrée. Il n'y a aucune instance à gérer ou à supprimer.
Pas de construction InputImage. Le InputImage de ML Kit doit être construit à partir d'une source spécifique à Android : InputImage.fromFilePath(context, uri), InputImage.fromBitmap(bitmap, rotation) ou InputImage.fromMediaImage(image, rotation). Code-barres IronBarcode accepte une chaîne de chemin de fichier, un Stream, un byte[] ou un System.Drawing.Bitmap. Aucun contexte Android, aucune URI, aucune métadonnée de rotation.
Pas de Google Play Services. Le modèle non groupé de ML Kit fonctionne via les Google Play Services. La variante groupée embarque le modèle dans l'APK (ajoutant environ 2,4 Mo) et évite la vérification des Play Services, mais aucune des variantes n'est disponible sur les cibles .NET. Code-barres IronBarcode ne présente aucune dépendance de ce type ; il fonctionne de manière identique sur toutes les plateformes prises en charge par .NET .
Configuration rapide en .NET
Supprimez tous les packages de liaison Xamarin/MAUI ML Kit présents dans votre projet, puis installez IronBarcode:
dotnet add package BarCode
Ajoutez la clé de licence au démarrage de l'application — dans Program.cs, MauiProgram.cs ou Startup.cs selon le type de votre application :
// 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"
La licence peut être définie à tout moment avant le premier appel BarcodeReader.Read() ou BarcodeWriter.CreateBarcode(). Un essai gratuit est disponible ; Le mode d'essai génère des filigranes pour les codes-barres, mais n'en restreint pas la lecture.
Lecture des codes-barres : Kotlin vers C
Lecture de code-barres unique de base
Voici un exemple typique de lecture ML Kit en Kotlin, scannant un seul code QR à partir d'un URI de fichier :
// 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}")
}
L'équivalent en C# avec 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
Le résultat est immédiatement disponible en tant que valeur de retour. barcode.Value correspond à barcode.rawValue. barcode.Format correspond à barcode.format. La gestion des erreurs utilise un bloc try/catch standard au lieu d'un écouteur d'erreurs séparé.
Lecture de plusieurs codes-barres
ML Kit scanne un seul InputImage et retourne une liste. Pour plusieurs codes-barres dans une image, vous itérez la liste du listener de succès :
// 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") }
Avec IronBarcode, définissez ExpectMultipleBarcodes = true dans BarcodeReaderOptions et itérez la collection de résultats :
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
Spécification du format : définir BarcodeFormats sur BarcodeReaderOptions
ML Kit vous oblige à spécifier les formats de recherche via setBarcodeFormats(). Si vous l'omettez, ML Kit effectue une recherche dans tous les formats. Code-barres IronBarcode fonctionne de la même manière : omettre les contraintes de format permet de tout rechercher, mais spécifier les types attendus améliore les performances.
| Kit ML Kotlin | Code-barres 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 |
Omettez ExpectBarcodeTypes |
Utilisation des indicateurs de format dans 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)
La combinaison OU bit à bit fonctionne de la même manière que la liste de format vararg de ML Kit.
Accès au résultat : valeur brute et format
L'objet résultat de ML Kit expose rawValue (un String?) et format (une constante Int). Le résultat d'IronBarcode expose Value (un string) et Format (une valeur énumérée 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
// Code-barres IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
// Code-barres IronBarcode C#— result fields
string value = barcode.Value;
BarcodeEncoding format = barcode.Format;
int page = barcode.PageNumber; // populated for PDF / multi-page input
' Code-barres 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
barcode.Value est toujours une chaîne non nulle dans Code-barres IronBarcode — si la lecture a réussi, la valeur est présente. barcode.Format est le membre énuméré BarcodeEncoding, que vous pouvez comparer directement : if (barcode.Format == BarcodeEncoding.QRCode).
Qu'est-ce qui change dans .NET ?
Une API synchrone remplace les fonctions de rappel. Il s'agit du changement structurel le plus important. Le scanner.process() de ML Kit retourne un Task<List<Barcode>> au sens Android — vous chaînez les listeners. Le BarcodeReader.Read() d'IronBarcode retourne le résultat en ligne. Si vous avez besoin de l'exécuter hors du thread UI dans une application MAUI, enveloppez-le dans 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
Pas de paramètre de contexte. Chaque appel de ML Kit qui construit un InputImage nécessite un Context Android. Code-barres IronBarcode n'a besoin que d'un chemin de fichier ou d'un flux. Supprimer le contexte d'exécution des codes-barres simplifie considérablement le code.
Pas de Google Play Services. Le modèle standard de ML Kit fonctionne via Play Services — BarcodeScanning.getClient() vérifie la disponibilité de Play Services à l'exécution et lève une exception si non disponible. Code-barres IronBarcode n'effectue aucun contrôle de service en cours d'exécution. Soit elle lit l'image, soit elle lève une exception standard.
Gestion standard des exceptions. Le addOnFailureListener de ML Kit reçoit une sous-classe de Exception Java. En .NET, les échecs apparaissent sous la forme d'exceptions System.Exception standard, capturables de manière classique avec try/catch.
Lecture de documents PDF
ML Kit ne prend pas en charge le format PDF. InputImage.fromFilePath() avec un URI .pdf échoue soit ou ne lit que la première page en tant qu'image rasterisée, selon la version Android. Si votre scénario de migration implique des documents (traitement de factures, manifestes logistiques, numérisation de formulaires), Code-barres IronBarcode gère nativement les PDF :
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
Aucune étape d'extraction d'image, aucune bibliothèque PDF tierce, aucune boucle d'itération de page avec rendu séparé. Indiquez le chemin d'accès au PDF et récupérez toutes les valeurs des codes-barres ainsi que leurs numéros de page.
Nouvelles capacités : Génération
ML Kit ne génère pas de codes-barres — il ne fait que les lire. Si votre application portée a besoin de produire des étiquettes, des tickets ou des codes QR, Code-barres IronBarcode couvre ces besoins avec le même package.
Code 128 pour les étiquettes d'expédition :
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")
Génération de code 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")
Code QR avec logo et couleur :
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")
Renvoyer le code-barres sous forme de tableau d'octets pour une réponse 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")
Aucun de ces modèles n'a d'équivalent dans ML Kit. Ce sont de nouvelles fonctionnalités disponibles car vous travaillez avec une bibliothèque de codes-barres .NET complète plutôt qu'avec un scanner uniquement mobile.
Traitement par lots côté serveur
ML Kit traite une image par appel, nécessite un environnement d'exécution Android/iOS et ne prend pas en charge l'exécution côté serveur. Code-barres IronBarcode traite les fichiers en boucle, s'exécute sous ASP.NET Coreet s'adapte normalement :
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
Ce schéma — lecture d'un dossier d'images, extraction des codes-barres, agrégation des résultats — n'est pas possible avec ML Kit. Il s'agit d'un flux de travail standard Code-barres IronBarcode .
Comparaison des fonctionnalités
| Fonction | Kit ML de Google | Code-barres IronBarcode |
|---|---|---|
| Package NuGet .NET | None | BarCode |
| API C# / .NET | None | Oui |
| Lecture de codes-barres | Oui (Android/iOS) | Oui (toutes les plateformes) |
| génération de codes-barres | Non | Oui |
| génération de code QR | Non | Oui |
| Intégration de logo QR | Non | Oui |
| Entrée PDF | Non | Oui |
| Prise en charge des documents multipages | Non | Oui |
| Entrée caméra/image | Oui | Via fichier image |
| Déploiement côté serveur | Non | Oui |
| ASP.NET Core | Non | Oui |
| Azure Functions | Non | Oui |
| Docker / Linux | Non | Oui |
| Services Google Play requis | Variante non groupée uniquement | Non |
| Dépendance Firebase | Non (autonome depuis juin 2020) | Non |
| API .NET synchrone | Non | Oui |
| Compatible avec l'injection de dépendances | Non | Oui (API statique) |
Option ExpectMultipleBarcodes |
Liste de résultats via | BarcodeReaderOptions |
| Spécification du format | setBarcodeFormats() |
ExpectBarcodeTypes |
| Compromis vitesse/précision | Fixe (basé sur un modèle) | enum ReadingSpeed |
| Tarifs | Gratuit (sur l'appareil, uniquement mobile) | À partir de 749 $ (Lite) perpétuel |
| Plateformes | Android, iOS | Windows, Linux, macOS, Docker, Azure, AWS |
Liste de contrôle de la migration
Si vous portez un code source Android ou remplacez une liaison non officielle du kit Xamarin ML, recherchez ces modèles dans votre projet et appliquez les traductions ci-dessus :
com.google.mlkit:barcode-scanningdans les fichiers Gradle → supprimer, ajouterBarCodeNuGetBarcodeScannerOptions.Builder()→new BarcodeReaderOptions { }BarcodeScanning.getClient(options)→ retirer (pas d'instance de scanner dans IronBarcode)InputImage.fromFilePath(context, uri)→ argument de chaîne de chemin de fichierInputImage.fromBitmap(bitmap, rotation)→BarcodeReader.Read(stream)ou surcharge de tableau d'octetsscanner.process(inputImage)→BarcodeReader.Read(path, options).addOnSuccessListener { barcodes -> }→ itérer la valeur de retour deRead().addOnFailureListener { e -> }→ try/catch autour deRead()barcode.rawValue→barcode.Valuebarcode.format→barcode.FormatBarcode.FORMAT_QR_CODE→BarcodeEncoding.QRCodeBarcode.FORMAT_CODE_128→BarcodeEncoding.Code128Barcode.FORMAT_ALL_FORMATS→ omettreExpectBarcodeTypesusing Google.MLKit.BarcodeScanning;(liaison Xamarin) →using IronBarCode;IronBarCode.License.LicenseKeydoit être défini dansMauiProgram.cs,Program.csouStartup.cs
Le principal travail consiste à passer d'un code basé sur des rappels à un code synchrone. Les constantes de format et les noms des champs de résultat sont des correspondances directes. La prise en charge des fichiers PDF et de la génération est purement additive ; elle ne nécessite aucune migration, seulement du nouveau code.
Questions Fréquemment Posées
Pourquoi devrais-je migrer de Google ML Kit BarCode Scanning vers IronBarcode ?
Les raisons les plus courantes sont la simplification des licences (suppression de la complexité du SDK + de la clé d'exécution), l'élimination des limites de débit, la prise en charge native des PDF, l'amélioration du déploiement Docker/CI/CD et la réduction de l'API boilerplate dans le code de production.
Comment remplacer les appels à l'API Google ML Kit par IronBarcode ?
Remplacer la création d'instance et le modèle de licence par IronBarCode.License.LicenseKey = "key". Remplacer les appels au lecteur par BarcodeReader.Read(path) et les appels à l'écrivain par BarcodeWriter.CreateBarcode(data, encoding). Les méthodes statiques ne nécessitent aucune gestion d'instance.
Quelle quantité de code change lors de la migration de Google ML Kit Barcode Scanning vers IronBarcode ?
La plupart des migrations permettent de réduire le nombre de lignes de code. Les modèles de licence, les constructeurs d'instances et la configuration explicite des formats sont supprimés. Les principales opérations de lecture/écriture sont converties en équivalents plus courts d'IronBarcode avec des objets de résultat plus propres.
Dois-je conserver les deux logiciels Google ML Kit Barcode Scanning et IronBarcode installés pendant la migration ?
Non. La plupart des migrations sont des remplacements directs plutôt que des opérations parallèles. Migrez une classe de service à la fois, remplacez la référence NuGet et mettez à jour les modèles d'instanciation et d'appel d'API avant de passer à la classe suivante.
Quel est le nom du package NuGet pour IronBarcode ?
Le paquet est "IronBarcode" (avec un B et un C majuscules). Installez-le avec "Install-Package IronBarCode" ou "dotnet add package IronBarCode". La directive using dans le code est "using IronBarCode ;".
Comment IronBarcode simplifie-t-il le déploiement de Docker par rapport à Google ML Kit Barcode Scanning ?
IronBarcode est un package NuGet sans fichiers SDK externes ni configuration de licence montée. Dans Docker, définissez la variable d'environnement IRONBARCODE_LICENSE_KEY et le paquetage gère la validation de la licence au démarrage.
IronBarcode détecte-t-il automatiquement tous les formats de codes-barres après avoir migré depuis Google ML Kit ?
Oui. IronBarcode détecte automatiquement la symbologie dans tous les formats pris en charge. L'énumération explicite des BarcodeTypes n'est pas nécessaire. Si le format est déjà connu et que la performance est importante, BarcodeReaderOptions permet de restreindre l'espace de recherche en tant qu'optimisation.
IronBarcode peut-il lire des codes-barres à partir de PDF sans bibliothèque séparée ?
Oui, BarcodeReader.Read("document.pdf") traite les fichiers PDF de manière native. Les résultats incluent le numéro de page, le format, la valeur et la confiance pour chaque code-barres trouvé. Aucune étape de rendu PDF externe n'est requise.
Comment IronBarcode gère-t-il le traitement parallèle des codes-barres ?
Les méthodes statiques d'IronBarcode sont sans état et à l'abri des threads. Utilisez Parallel.ForEach directement sur les listes de fichiers sans gestion d'instance par thread. BarcodeReaderOptions.MaxParallelThreads contrôle le budget interne des threads.
Quelles sont les propriétés des résultats qui changent lors de la migration de Google ML Kit Barcode Scanning vers IronBarcode ?
Renommages courants : BarcodeValue devient Value, BarcodeType devient Format. Les résultats d'IronBarcode ajoutent également Confidence et PageNumber. Une recherche et un remplacement à l'échelle de la solution gèrent les renommages dans le code existant de traitement des résultats.
Comment configurer l'octroi de licences IronBarcode dans un pipeline CI/CD ?
Stockez IRONBARCODE_LICENSE_KEY en tant que secret de pipeline et attribuez IronBarCode.License.LicenseKey dans le code de démarrage de l'application. Un seul secret couvre tous les environnements, y compris le développement, les tests, la mise en scène et la production.
IronBarcode prend-il en charge la génération de codes QR avec un style personnalisé ?
Oui. QRCodeWriter.CreateQrCode() prend en charge les couleurs personnalisées via ChangeBarCodeColor(), l'intégration de logos via AddBrandLogo(), les niveaux de correction d'erreur configurables et plusieurs formats de sortie, notamment PNG, JPG, PDF et stream.

