Barcode4.NET vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#
BarcodeScanning.Native.Maui vs Code-barres IronBarcode : contrôle de la caméra vs SDK de code-barres complet
BarcodeScanning.Native.Maui est un plugin de caméra à portée limitée aux applications MAUI. Si votre application traite des fichiers téléchargés ou lit des codes-barres à partir de PDFs, elle n'est pas conçue pour ce cas d'utilisation. Le package se décrit lui-même comme une "bibliothèque de numérisation de codes-barres pour .NET MAUI," et en pratique, il s'agit d'un CameraView contrôle qui déclenche un événement lorsqu'un code-barres entre dans un cadre de caméra en direct. Voici l'ensemble complet des fonctionnalités. Cette comparaison examine la différence architecturale entre une bibliothèque de contrôle de caméra et un SDK de code-barres complet, aidant les équipes à comprendre où chaque outil trouve sa place.
Comprendre la lecture des codes-barres.MAUI
BarcodeScanning.Native.Maui enveloppe les API natives de détection de codes-barres de caméra sur iOS/macOS (le cadre Vision d'Apple), Android (Google ML Kit), et Windows (ZXingCpp, ajouté dans la version 3.0.1) dans un contrôle MAUI CameraView. Un développeur intègre le contrôle dans une page XAML, configure un gestionnaire d'événements, et la bibliothèque déclenche cet événement chaque fois qu'un code-barres est détecté dans le flux vidéo en direct de la caméra. Le modèle d'interaction est entièrement basé sur le principe caméra entrante, événement sortant — il n'y a pas d'autre voie possible.
La bibliothèque est open-source et gratuite sous licence MIT. Son objectif de conception est étroit et explicite: fournir une détection de code-barres à partir de caméra en direct pour les applications MAUI avec la surface d'API minimale possible. Il atteint cet objectif par délégation aux moteurs natifs par plateforme plutôt qu'en implémentant son propre moteur de décodage.
Principales caractéristiques architecturales de BarcodeScanning.Native.Maui :
- Entrée uniquement via la caméra : la bibliothèque n'accepte que les images de la caméra en direct. Il n'y a pas de
ReadFromFile(), pas deReadFromBytes(), pas deReadFromStream(), et pas de méthodeReadFromPdf()nulle part dans l'API publique. - Objectifs MAUI-Only : La bibliothèque prend en charge les cibles MAUI — iOS, Android, Windows (depuis 3.0.1, via ZXingCpp), et macOS Catalyst. Elle ne peut pas être utilisée en dehors des projets MAUI (pas d'ASP.NET, console, WPF, ou WinForms).
- Trois moteurs différents : Vision d'Apple sur iOS/macOS, Google ML Kit sur Android, et ZXingCpp sur Windows. La couverture de symbologie et le comportement de décodage varient à travers les trois moteurs.
- Aucune capacité de génération : BarcodeScanning.Native.Maui lit les codes-barres à partir des images de la caméra. Il ne peut générer de codes-barres dans aucun format.
- Peculiarité UPC-A d'iOS : Le framework Vision d'Apple peut retourner 13 chiffres pour les codes-barres UPC-A (en ajoutant un zéro en tête pour correspondre à l'encodage EAN-13). La bibliothèque transmet cette valeur brute, et les applications la normalisent au besoin.
- Fiabilité PDF417 sur iOS/Android : Le suivi des problèmes GitHub de la bibliothèque décrit la numérisation PDF417 comme "très problématique — la plupart des numérisations n'ont jamais lieu" sur les chemins de code Vision/ML Kit, ce qui est pertinent pour les étiquettes d'expédition, les permis de conduire, et les cartes d'embarquement.
- Surface publique minimale : L'API publique se compose de
CameraView,OnDetectionFinished,OnDetectionFinishedEventArg, etBarcodeResultavecDisplayValueetBarcodeFormat. Voilà l'intégralité des éléments avec lesquels le code de l'application interagit. - Licence MIT, gratuite : la bibliothèque est gratuite d'utilisation, sans frais de licence.
Modèle de balayage de la caméra en direct
L'API BarcodeScanning.Native.Maui complète est un contrôle XAML associé à un gestionnaire d'événements C# :
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
<scanner:CameraView x:Name="CameraView"
OnDetectionFinished="OnBarcodeDetected"
CameraEnabled="True"
BarcodeFormats="All" />
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Cette commande offre aux utilisateurs un viseur en temps réel intégré à la page MAUI. La détection de codes-barres est continue tant que le flux de la caméra est actif. L'UX est bien conçue pour les applications grand public où " pointer et scanner " est l'interaction principale. La contrainte est que c'est la seule interaction que la bibliothèque prend en charge — les exigences qui vont au-delà de la détection de caméra en direct dans un contexte MAUI tombent hors de son champ.
Comprendre IronBarcode
IronBarcode est une bibliothèque commerciale de lecture et de génération de codes-barres pour .NET qui fonctionne avec des entrées de données plutôt qu'avec des flux de caméra. Il lit les codes-barres à partir de fichiers image, de tableaux d'octets, de flux et de documents PDF. Sur MAUI, il s'intègre à la caméra du système via MediaPicker — la même API standard MAUI que les applications utilisent pour la sélection des photos — capturant une photo et traitant ensuite l'image résultante comme une entrée statique.
IronBarcode implémente son propre moteur de décodage de codes-barres géré plutôt que de déléguer à des API natives spécifiques aux plateformes. Cela signifie que le même appel BarcodeReader.Read() se comporte de manière cohérente sur les cibles .NET prises en charge — Windows, Linux, macOS, ASP.NET, et les processus de serveur en arrière-plan — ainsi que sur les cibles mobiles MAUI lorsqu'une image est capturée et transmise au lecteur. La bibliothèque fournit également une API complète de génération de codes-barres via BarcodeWriter et QRCodeWriter.
Caractéristiques principales d' IronBarcode:
- API basée sur un fichier statique :
BarcodeReader.Read()accepte un chemin de fichier, un tableau d'octets, un flux ou un PDF — toute source de données statique. - Large couverture de plateformes : Windows, Linux, et macOS (y compris ARM) sont pris en charge, aux côtés de .NET Framework 4.6.2+, .NET Core 3.1+, et .NET 5/6/7/8. Le même chemin de code géré fonctionne sur toutes les cibles prises en charge sans bifurcation spécifique à la plateforme.
- Génération de codes-barres :
BarcodeWriter.CreateBarcode()etQRCodeWriter.CreateQrCode()génèrent Code128, QR, DataMatrix, et d'autres formats sous forme de fichiers image ou de tableaux d'octets. - Prise en charge des fichiers PDF : les codes-barres intégrés aux documents PDF sont lus directement, sans étape intermédiaire d'extraction d'image.
- Décodage UPC-A cohérent : Renvoie la valeur UPC-A standard à 12 chiffres via son moteur géré.
- Licences commerciales : Lite 749 $, Plus 1 499 $, Professional 2 999 $, Illimité 5 999 $ — licences perpétuelles avec un an d'assistance.
- Déploiement côté serveur : fonctionne sous ASP.NET, Azure Functions, conteneurs Docker et AWS Lambda sans dépendance à une caméra physique.
Comparaison des fonctionnalités
Le tableau suivant met en évidence les différences fondamentales entre BarcodeScanning.Native.Maui et IronBarcode:
| Fonction | BarcodeScanning.MAUI | Code-barres IronBarcode |
|---|---|---|
| Objectif principal | Détection de codes-barres par caméra en direct | Lecture et génération de codes-barres à partir de n'importe quelle source de données |
| Sources d'entrée | Images de la caméra en direct uniquement | Fichiers, tableaux d'octets, flux, PDF |
| Support de la plateforme | MAUI only — iOS, Android, Windows (via ZXingCpp), macOS Catalyst | Windows, Linux, macOS, ASP.NET, console, WPF, plus MAUI via captured images |
| Moteur de reconnaissance | Trois moteurs (Vision d'Apple / Kit ML de Google / ZXingCpp) | Moteur géré unique sur toutes les cibles |
| Génération de codes-barres | Non | Oui — BarcodeWriter + QRCodeWriter |
| Modèle de licence | MIT (gratuit, open source) | Commercial — Lite à 749 $ ou formule Illimitée à 5 999 $ |
| Côté serveur / ASP.NET | Non | Oui |
Comparaison détaillée des fonctionnalités
| Fonction | BarcodeScanning.MAUI | Code-barres IronBarcode |
|---|---|---|
| En lisant | ||
| lecture d'images de la caméra en direct | Oui — Contrôle CameraView | Non (utilisez MediaPicker pour capturer, puis lire) |
| Viseur de caméra intégré à l'application | Oui — en continu en temps réel | Non — utilise l'interface utilisateur de la caméra système via MediaPicker |
| Lire à partir d'un fichier image | Non | Oui — BarcodeReader.Read(path) |
| Lecture à partir d'un tableau d'octets | Non | Oui — BarcodeReader.Read(bytes) |
| Lecture à partir du flux | Non | Oui — BarcodeReader.Read(stream) |
| Lire le PDF | Non | Oui — BarcodeReader.Read(pdf) |
| Détection de plusieurs codes-barres | Oui (plusieurs par cadre via e.BarcodeResults) |
Oui (option ExpectMultipleBarcodes) |
| Contrôle de la vitesse de lecture | None | ReadingSpeed.Faster / Balanced / Detailed / ExtremeDetail |
| UPC-A sur iOS | Peut retourner 13 chiffres; applications normalize | Retourne la valeur standard UPC-A à 12 chiffres |
| Fiabilité du PDF417 | Problèmes documentés sur les moteurs iOS/Android | Prise en charge |
| Génération | ||
| génération de codes-barres | Non | Oui — BarcodeWriter.CreateBarcode() |
| génération de code QR | Non | Oui — QRCodeWriter.CreateQrCode() |
| Sortie au format PNG / tableau d'octets | Non | Oui |
| Plateforme | ||
| iOS MAUI | Oui (Apple Vision) | Oui (via image capturée) |
| Android MAUI | Oui (Google ML Kit) | Oui (via image capturée) |
| Windows MAUI | Oui (ZXingCpp, depuis 3.0.1) | Oui |
| macOS MAUI | Oui (Mac Catalyst, Apple Vision) | Oui |
| ASP.NET / côté serveur | Non | Oui |
| Docker / Azure / AWS Lambda | Non | Oui |
| Prise en charge du .NET Framework | Non (MAUI uniquement) | Oui — .NET Framework 4.6.2 et versions ultérieures |
| Licence | ||
| Type de licence | MIT (logiciel libre) | perpétuelle commerciale |
| Coût | Gratuit | Lite 749 $, Plus 1 499 $, Professional 2 999 $, Illimité 5 999 $ |
| Mode d'évaluation | N/A | Essai gratuit disponible |
Architecture : API de contrôle de la caméra vs API de traitement des fichiers
La différence la plus fondamentale entre ces deux bibliothèques réside dans le modèle d'entrée. BarcodeScanning.Native.Maui est conçu autour d'un flux vidéo continu provenant d'une caméra ; Code-barres IronBarcode est conçu autour de saisies de données discrètes. Il ne s'agit pas de mises en œuvre concurrentes d'une même idée, mais de choix architecturaux différents pour des cas d'utilisation différents.
Approche de lecture de codes-barres MAUI
BarcodeScanning.Native.Maui encapsule le pipeline de détection de caméra natif sur chaque plateforme. Sur Android, le Kit ML traite des cadres ; sur iOS et macOS, le framework Vision d'Apple traite les cadres ; sur Windows, ZXingCpp traite les cadres. La bibliothèque expose cela comme un contrôle MAUI CameraView avec un événement OnDetectionFinished. Le code de l'application ne traite jamais directement les octets de l'image ; il ne traite que les valeurs de code-barres détectées qui émergent de l'événement.
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode != null)
ResultLabel.Text = barcode.DisplayValue;
}
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode IsNot Nothing Then
ResultLabel.Text = barcode.DisplayValue
End If
End Sub
Cette conception a pour conséquence qu'il n'existe aucun autre point d'entrée. La caméra n'est pas optionnelle — c'est la seule entrée que la bibliothèque connaît. Un serveur, un fichier, un PDF, ou un hôte non-MAUI n'a aucun chemin vers la bibliothèque.
Approche IronBarcode
IronBarcode reçoit des données d'image via sa méthode statique BarcodeReader.Read(). L'appelant fournit les données — provenant de n'importe quelle source — et la bibliothèque les décode. Sur MAUI, les données proviennent de MediaPicker; Sur un serveur, cela provient du téléchargement d'un formulaire ; Dans une application de bureau, cela provient d'une boîte de dialogue de fichier.
// Code-barres IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
// Code-barres IronBarcode in MAUI: capture a photo, then read barcodes from it
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanBarcodeButton_Clicked(object sender, EventArgs e)
{
var photo = await MediaPicker.CapturePhotoAsync();
if (photo == null) return;
using var stream = await photo.OpenReadAsync();
using var ms = new MemoryStream();
await stream.CopyToAsync(ms);
var results = BarcodeReader.Read(ms.ToArray());
foreach (var result in results)
ResultLabel.Text = result.Value;
}
Imports IronBarCode
Imports System.IO
' Code-barres IronBarcode in MAUI: capture a photo, then read barcodes from it
' NuGet: dotnet add package IronBarcode
Private Async Sub ScanBarcodeButton_Clicked(sender As Object, e As EventArgs)
Dim photo = Await MediaPicker.CapturePhotoAsync()
If photo Is Nothing Then Return
Using stream = Await photo.OpenReadAsync()
Using ms As New MemoryStream()
Await stream.CopyToAsync(ms)
Dim results = BarcodeReader.Read(ms.ToArray())
For Each result In results
ResultLabel.Text = result.Value
Next
End Using
End Using
End Sub
Ce code s'exécute de manière identique sur les cibles MAUI qui peuvent capturer une image. Pour une utilisation côté serveur, la même méthode BarcodeReader.Read() accepte un tableau d'octets du fichier téléchargé ou un chemin PDF. La documentation IronBarcode couvre tous les types d'entrée pris en charge.
Couverture de plateforme et moteurs de reconnaissance
La couverture de plateforme est importante pour les équipes qui développent des applications MAUI qui peuvent également avoir besoin de partager la logique de code-barres avec des projets non-MAUI.
Approche de lecture de codes-barres MAUI
BarcodeScanning.Native.Maui prend en charge les quatre cibles MAUI (iOS, Android, Windows depuis 3.0.1, et macOS Catalyst), mais chaque cible utilise un moteur de reconnaissance différent : Vision d'Apple sur iOS et macOS, Google ML Kit sur Android, et ZXingCpp sur Windows. La couverture de symbologie et le comportement de décodage diffèrent à travers les trois moteurs, donc un code-barres qui se décode de manière fiable sur une plateforme peut se comporter différemment sur une autre. En dehors de MAUI — ASP.NET, console, WPF, WinForms, Blazor Server, Azure Functions — la bibliothèque n'a pas d'implémentation. Les équipes qui ont besoin de logique de code-barres à la fois dans une application MAUI et dans un service backend doivent utiliser une bibliothèque différente pour le code non-MAUI.
Approche IronBarcode
L'appel BarcodeReader.Read() de Code-barres IronBarcode utilise le même moteur géré sur chaque cible prise en charge, donc le comportement est cohérent sur Windows, Linux, macOS, ASP.NET, et toute cible MAUI qui peut capturer une image et la transmettre au lecteur. Il n'y a pas de blocs #if WINDOWS, pas de chargement conditionnel de dépendances, et pas de mises en œuvre de stubs nécessaires. Pour les fichiers et les PDF, le modèle est également cohérent :
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
using IronBarCode;
// Read barcodes from a file the user selected
var file = await FilePicker.PickAsync();
if (file != null)
{
var results = BarcodeReader.Read(file.FullPath);
foreach (var result in results)
Console.WriteLine($"{result.Format}: {result.Value}");
}
// Read barcodes directly from a PDF — no image extraction step needed
var pdfResults = BarcodeReader.Read("shipment-manifest.pdf");
Imports IronBarCode
' Read barcodes from a file the user selected
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim results = BarcodeReader.Read(file.FullPath)
For Each result In results
Console.WriteLine($"{result.Format}: {result.Value}")
Next
End If
' Read barcodes directly from a PDF — no image extraction step needed
Dim pdfResults = BarcodeReader.Read("shipment-manifest.pdf")
Le guide d'intégration Code-barres IronBarcode MAUI fournit des instructions de configuration complètes pour toutes les cibles MAUI. Code-barres IronBarcode prend également en charge le déploiement côté serveur dans les environnements ASP.NET, Docker, Azure Functions et AWS Lambda où BarcodeScanning.Native.Maui n'a aucun chemin d'accès.
Précision de lecture des codes-barres : UPC-A et PDF417
Deux comportements spécifiques au format dans BarcodeScanning.Native.Maui méritent d'être notés pour les applications de production.
Approche de lecture de codes-barres MAUI
Sur iOS, la détection sous-jacente de BarcodeScanning.Native.Maui (Vision d'Apple) peut retourner 13 chiffres pour les codes-barres UPC-A. Le code UPC-A est un format à 12 chiffres ; Le zéro supplémentaire en tête correspond à l'encodage EAN-13. La bibliothèque transmet cette valeur brute, et les applications la normalisent au besoin. Les applications qui stockent des valeurs UPC-A dans une base de données sans normalisation peuvent accumuler des enregistrements avec un zéro initial.
La solution documentée vérifie le format et coupe la valeur :
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
// Normalize iOS UPC-A — strip the leading zero when present
private void OnBarcodeDetected(object sender, OnDetectionFinishedEventArg e)
{
var barcode = e.BarcodeResults.FirstOrDefault();
if (barcode == null) return;
var value = barcode.DisplayValue;
if (barcode.BarcodeFormat == BarcodeFormats.Upca && value.Length == 13)
value = value.Substring(1);
ProcessBarcode(value);
}
' Normalize iOS UPC-A — strip the leading zero when present
Private Sub OnBarcodeDetected(sender As Object, e As OnDetectionFinishedEventArg)
Dim barcode = e.BarcodeResults.FirstOrDefault()
If barcode Is Nothing Then Return
Dim value = barcode.DisplayValue
If barcode.BarcodeFormat = BarcodeFormats.Upca AndAlso value.Length = 13 Then
value = value.Substring(1)
End If
ProcessBarcode(value)
End Sub
La vérification du format est nécessaire pour que les valeurs EAN-13 commençant par 0 ne soient pas coupées par erreur. PDF417 est documenté séparément dans les discussions GitHub comme "très problématique — la plupart des scans ne se produisent jamais" sur les moteurs iOS/Android, ce qui est pertinent pour les étiquettes d'expédition, les permis de conduire et les cartes d'embarquement.
Approche IronBarcode
IronBarcode renvoie la valeur standard UPC-A à 12 chiffres via son moteur géré. PDF417 est un format pris en charge. La partie génération est également disponible via l'API d'IronBarcode :
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
using IronBarCode;
// Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Generate a QR code
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.SaveAsPng("qr.png")
' Generate a Code128 barcode
BarcodeWriter.CreateBarcode("ITEM-12345", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
Pour les applications où la précision des données de codes-barres affecte directement les recherches d'inventaire, les transactions au point de vente ou les intégrations de chaînes d'approvisionnement, la gestion cohérente des formats d'IronBarcode réduit le besoin de normalisation spécifique à la plateforme. La documentation de lecture des codes-barres IronBarcode décrit en détail le comportement spécifique à chaque format.
Référence de mappage d'API
| BarcodeScanning.Native.Maui | Code-barres IronBarcode |
|---|---|
Contrôle XAML CameraView |
Pas de contrôle de caméra — utilisez MediaPicker.CapturePhotoAsync() pour capturer |
Événement OnDetectionFinished |
BarcodeReader.Read(imageBytes) |
e.BarcodeResults |
Valeur de retour de BarcodeReader.Read() (IEnumerable) |
e.BarcodeResults.FirstOrDefault() |
results.FirstOrDefault() |
barcode.DisplayValue |
result.Value |
barcode.BarcodeFormat |
result.Format |
BarcodeFormats="All" |
Détection automatique — aucune configuration requise pour les formats multiples |
CameraEnabled="True" |
Appel MediaPicker.CapturePhotoAsync() |
| MAUI uniquement (iOS, Android, Windows, macOS) | MAUI (via image capturée) + ASP.NET, console, WPF, bureau, serveur |
| Images de la caméra uniquement | Fichiers, tableaux d'octets, flux, PDF |
| API fichier/PDF indisponible | BarcodeReader.Read(path) — accepte les fichiers image et les PDFs |
| Trois moteurs sur les cibles MAUI | Moteur géré unique sur toutes les cibles |
| API sans génération | BarcodeWriter.CreateBarcode() + QRCodeWriter.CreateQrCode() |
Lorsque les équipes envisagent de passer de BarcodeScanning.MAUI à IronBarcode
La cohérence des moteurs multiplateformes devient une exigence
Les applications MAUI visant iOS, Android, Windows et macOS incorporent trois moteurs de reconnaissance différents lorsqu'elles utilisent BarcodeScanning.Native.Maui : Apple Vision (iOS/macOS), Google ML Kit (Android) et ZXingCpp (Windows). Chaque moteur a sa propre couverture de la symbologie et son comportement de décodage, de sorte que le même code-barres peut être décodé différemment sur les plateformes — et les applications ajoutent souvent des couches de normalisation pour masquer les différences. Quand cette charge de maintenance augmente, ou lorsque les rapports de QA indiquent des régressions multiplateformes liées aux différences de moteurs, les équipes migrent parfois la couche de code-barres vers un seul moteur géré qui se comporte de la même manière sur chaque cible.
Ajout d'exigences relatives au téléchargement de fichiers ou au traitement de PDF
Les applications mobiles commencent souvent par utiliser la numérisation en direct par caméra comme unique méthode de saisie, puis s'étendent pour accepter les images ou documents téléchargés. Quand un utilisateur doit scanner un code-barres à partir d'une photo dans sa galerie, d'une image reçue par email, ou d'un PDF contenant des manifestes d'expédition ou des cartes d'embarquement, BarcodeScanning.Native.Maui n'a pas de chemin de code pour ces entrées. Les équipes qui atteignent cette limite d'exigence font face à un choix : ajouter une deuxième bibliothèque de codes-barres aux côtés de BarcodeScanning.Native.Maui pour les entrées de fichiers et PDF, ou migrer vers une seule bibliothèque qui gère tous les types d'entrée. Gérer deux packages de codes-barres avec des API et types de résultats différents ajoute de la complexité à long terme qu'une solution à package unique évite.
Introduction du traitement des codes-barres côté serveur
Les applications qui scannent les codes-barres sur mobile développent souvent un composant côté serveur : un point de terminaison d'API ASP.NET qui valide les codes-barres, une tâche en arrière-plan qui traite les PDF ou une fonction cloud qui extrait les numéros de suivi des documents téléchargés. BarcodeScanning.Native.Maui est une bibliothèque de contrôle d'interface utilisateur MAUI ; elle n'a pas d'implémentation côté serveur. Une équipe qui a besoin de la même logique de lecture de codes-barres côté mobile et côté serveur doit utiliser une bibliothèque différente pour le serveur. Lorsque les besoins côté serveur se font sentir, les équipes évaluent souvent s'il est préférable de centraliser la gestion des codes-barres dans une bibliothèque unique couvrant à la fois le mobile et le serveur, plutôt que de maintenir deux implémentations distinctes.
UPC-A Normalisation des données devient une préoccupation
Le comportement des codes UPC-A à 13 chiffres d'iOS n'est pas toujours détecté lors du développement. Les codes-barres UPC-A scannés en développement peuvent sembler fonctionner correctement, mais le zéro initial du cadre Vision d'Apple peut apparaître dans la base de données en l'absence de normalisation. Les équipes qui découvrent des valeurs UPC-A à 13 chiffres dans les enregistrements d'inventaire, les systèmes de point de vente ou les intégrations de chaîne d'approvisionnement peuvent nécessiter à la fois une correction de code et une étape de correction de données. L'ajout de la normalisation documentée gère les nouveaux scans ; migrer vers une bibliothèque avec une sortie UPC-A cohérente est parfois préféré comme solution à long terme.
Numérisation de documents PDF417 requise
Le format PDF417 est le format de code-barres utilisé sur les étiquettes d'expédition, les permis de conduire et les cartes d'embarquement en Amérique du Nord. Ce sont des cibles de numérisation courantes pour les applications logistiques, de vérification d'identité et de voyage. Le traqueur de problèmes GitHub de BarcodeScanning.Native.Maui documente PDF417 comme "très problématique — la plupart des scans ne se produisent jamais" sur les moteurs iOS/Android. Pour les applications où la fiabilité de PDF417 est une exigence fonctionnelle, les équipes évaluent souvent des bibliothèques alternatives.
Considérations courantes en matière de migration
Événement de caméra vers MediaPicker et lecture statique
Le changement structurel principal dans la migration consiste à remplacer le modèle d'événement de caméra continue par une capture MediaPicker suivie de BarcodeReader.Read(). Le gestionnaire d'événements OnDetectionFinished, le contrôle XAML CameraView, et la déclaration d'espace de noms XML scanner: sont tous supprimés. À leur place, un bouton déclenche MediaPicker.CapturePhotoAsync(), et les octets de la photo résultante sont transmis à BarcodeReader.Read(). Cela modifie l'expérience utilisateur, passant d'un viseur continu en direct à un écran de caméra système — ce qui convient à la plupart des applications professionnelles.
Modifications du marshaling des threads
BarcodeScanning.Native.Maui déclenche OnDetectionFinished sur un thread en arrière-plan, donc tous les gestionnaires existants qui mettent à jour des éléments UI emballent leurs mises à jour dans MainThread.BeginInvokeOnMainThread(). Avec le modèle MediaPicker + async utilisé par IronBarcode, la continuation après await revient sur le contexte appelant, qui est généralement le thread principal. Dans la plupart des cas, les encapsulations MainThread.BeginInvokeOnMainThread() peuvent être supprimées, simplifiant ainsi le code du gestionnaire d'événements.
Suppressions de l'Normalisation UPC-A
Tout code source qui a géré le comportement à 13 chiffres UPC-A d'iOS BarcodeScanning.Native.Maui aura un code qui vérifie BarcodeFormats.Upca et appelle Substring(1) pour retirer le zéro initial. Ce code doit être supprimé après la migration — Code-barres IronBarcode renvoie la valeur standard à 12 chiffres, et laisser la normalisation en place entraînerait la suppression incorrecte du premier chiffre des lectures UPC-A valides.
Autorisations MAUI
BarcodeScanning.Native.Maui ajoute automatiquement les permissions de caméra aux manifestes Android et iOS dans le cadre de sa configuration de package. Avec Code-barres IronBarcode utilisant MediaPicker, les permissions standard de caméra MAUI dans AndroidManifest.xml et Info.plist sont requises — les mêmes permissions que toute application MAUI nécessite pour MediaPicker.CapturePhotoAsync(). Ces autorisations sont généralement déjà présentes dans les projets MAUI qui utilisent la caméra à quelque fin que ce soit.
Fonctionnalités supplémentaires IronBarcode
Au-delà des fonctionnalités présentées dans cette comparaison, Code-barres IronBarcode offre des options que BarcodeScanning.Native.Maui n'aborde à aucun niveau :
- Génération de codes-barres : Générez des codes Code128, QR, DataMatrix, PDF417 et autres formats au format PNG, SVG ou tableau d'octets — utilisables dans l'interface utilisateur MAUI, les réponses API ou les étiquettes imprimées.
- Génération de codes QR : Créez des codes QR stylisés avec intégration de logo, personnalisation des couleurs et contrôle du niveau de correction d'erreur.
- Lecture multi-codes-barres : L'option
ExpectMultipleBarcodeslit tous les codes-barres présents dans une seule image en une seule passe. - Extraction de codes-barres PDF : Lisez directement les codes-barres intégrés aux documents PDF — aucune conversion d'image intermédiaire n'est requise.
- Déploiement côté serveur : Déployez la même logique de lecture et de génération de codes-barres dans ASP.NET, Azure Functions, Docker et AWS Lambda sans aucune dépendance à une caméra.
- Configuration de la vitesse de lecture : Les réglages
ReadingSpeed.Faster,Balanced,Detailed, etExtremeDetailpermettent d'ajuster le débit par rapport à la précision en fonction de la qualité de l'image. - Réutilisation serveur et de bureau : La même bibliothèque fonctionne dans les projets ASP.NET, console, WPF et WinForms, de sorte que la logique de code-barres peut être partagée entre un client MAUI et un service backend sans un deuxième package.
Compatibilité .NET et préparation à l'avenir
IronBarcode prend en charge .NET 6, .NET 7, et .NET 8, ainsi que .NET Framework 4.6.2 et versions ultérieures. Cela signifie qu'elle fonctionne sur des cibles .NET modernes ainsi que dans des environnements serveur hérités qui n'ont pas encore migré. BarcodeScanning.Native.Maui est une bibliothèque exclusivement MAUI sans support .NET Framework et sans chemin de déploiement côté serveur. Pour les équipes dont le code source s'étend à la fois à MAUI et aux applications serveur .NET Framework ou .NET Core existantes, Code-barres IronBarcode fournit une API cohérente dans tous les environnements sans nécessiter de package de code-barres distinct pour chaque contexte d'exécution.
Conclusion
BarcodeScanning.Native.Maui et Code-barres IronBarcode traitent des problèmes différents. BarcodeScanning.Native.Maui est une bibliothèque de contrôle de caméra qui fournit un viseur en temps réel avec détection automatique des codes-barres sur les cibles MAUI, déléguant la reconnaissance à trois moteurs de plateforme différents. Code-barres IronBarcode est une bibliothèque de lecture et de génération de codes-barres qui traite des données d'image statiques de n'importe quelle source via un moteur géré unique sur les cibles .NET. La différence architecturale — flux vidéo continu de la caméra contre entrée de données discrète — détermine quelle bibliothèque est appropriée à un ensemble d'exigences donné.
BarcodeScanning.Native.Maui est le bon choix lorsque l'application est une application MAUI où l'aperçu de caméra continue en temps réel avec détection de cadre continue est le modèle UX requis, et lorsque les exigences ne s'étendront pas pour inclure les téléchargements de fichiers, le traitement des PDF, ou le travail de code-barres côté serveur. Dans ce cadre, elle est gratuite, minimale et fonctionnelle.
IronBarcode est le bon choix lorsque l'entrée de code-barres provient de fichiers, de PDFs, ou de tableaux d'octets en plus ou à la place d'une caméra en direct, lorsque le traitement de code-barres côté serveur fait partie de l'architecture, ou lorsque la génération de code-barres est requise en plus de la lecture. Elle convient également lorsque un comportement de décodage cohérent à travers les plateformes ou la fiabilité PDF417 sont des exigences de production. Le coût de la licence commerciale est le prix à payer pour ces fonctionnalités.
Pour les équipes dont les exigences correspondent actuellement au cadre de BarcodeScanning.Native.Maui, la bibliothèque est un choix raisonnable et rentable. Pour les équipes dont les exigences ont grandi ou sont attendues de croître au-delà du scan de caméra en direct, l'API cohérente d'IronBarcode à travers les types d'entrée, plateformes et cibles de déploiement est une alternative pratique.
Questions Fréquemment Posées
Qu'est-ce que BarcodeScanning.MAUI ?
BarcodeScanning.MAUI est une bibliothèque de codes-barres .NET permettant de générer et de lire des codes-barres dans des applications C#. C'est l'une des nombreuses alternatives que les développeurs évaluent lorsqu'ils choisissent une solution de code-barres pour les projets .NET.
Quelles sont les principales différences entre BarcodeScanning.MAUI et IronBarcode ?
IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que BarcodeScanning.MAUI nécessite généralement la création et la configuration d'une instance avant utilisation. IronBarcode offre également une prise en charge native du format PDF, une détection automatique du format et une licence à clé unique pour tous les environnements.
IronBarcode est-il plus facile à licencier que BarcodeScanning.MAUI ?
IronBarcode utilise une clé de licence unique couvrant à la fois les déploiements de développement et de production. Cela simplifie les pipelines CI/CD et les configurations Docker par rapport aux systèmes de licence qui séparent les clés SDK des clés d'exécution.
Est-ce qu'IronBarcode supporte tous les formats de codes-barres que BarcodeScanning.MAUI supporte ?
IronBarcode prend en charge plus de 30 symbologies de codes-barres, notamment QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1, et bien d'autres encore. L'auto-détection du format signifie qu'aucune énumération explicite du format n'est nécessaire.
IronBarcode prend-il en charge la lecture de codes-barres PDF en mode natif ?
Oui. IronBarcode lit les codes-barres directement à partir de fichiers PDF en utilisant BarcodeReader.Read("document.pdf") sans nécessiter de bibliothèque de rendu PDF séparée. Les résultats par page comprennent le numéro de page, le format du code-barres, la valeur et le score de confiance.
Comment IronBarcode gère-t-il le traitement par lots par rapport à BarcodeScanning.MAUI ?
Les méthodes statiques d'IronBarcode sont sans état et naturellement à l'abri des threads, ce qui permet d'utiliser directement Parallel.ForEach sans gestion d'instance par thread. Il n'y a pas de plafond de débit, quel que soit le niveau de prix.
Quelles versions de .NET sont prises en charge par IronBarcode ?
IronBarcode prend en charge .NET Framework 4.6.2+, .NET Core 3.1 et .NET 5, 6, 7, 8 et 9 dans un seul package NuGet. Les plates-formes visées sont Windows x64/x86, Linux x64 et macOS x64/ARM.
Comment installer IronBarcode for .NET dans un projet .NET ?
Installez IronBarcode via NuGet : exécutez "Install-Package IronBarCode" dans la console du Package Manager, ou "dotnet add package IronBarCode" dans le CLI. Aucun installateur SDK ou fichier d'exécution supplémentaire n'est nécessaire.
Puis-je évaluer IronBarcode avant l'achat, contrairement à BarcodeScanning.MAUI ?
Oui. Le mode d'essai d'IronBarcode renvoie des valeurs de code-barres décodées complètes - seules les images de sortie générées reçoivent un filigrane. Vous pouvez comparer la précision de lecture sur vos propres documents avant de vous engager dans un achat.
Quelle est la différence de prix entre BarcodeScanning.MAUI et IronBarcode ?
IronBarcode est proposé à partir de 749 dollars pour une licence perpétuelle pour un seul développeur couvrant le développement et la production. Les détails des prix et les options de volume sont disponibles sur la page de licence d'IronBarcode. Il n'est pas nécessaire de disposer d'une licence d'exécution distincte.
Est-il simple de migrer de BarcodeScanning.MAUI vers IronBarcode ?
La migration de BarcodeScanning.MAUI vers IronBarcode implique principalement le remplacement des appels d'API basés sur les instances par les méthodes statiques d'IronBarcode, la suppression du boilerplate de licence et la mise à jour des noms des propriétés des résultats. La plupart des migrations impliquent une réduction du code plutôt qu'un ajout.
IronBarcode génère-t-il des codes QR avec des logos ?
Oui. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incorpore une image de marque dans un code QR de manière native avec une correction d'erreur configurable. Les codes QR colorés sont également pris en charge via ChangeBarCodeColor().

