Spire.Barcode vs IronBarcode : Comparaison de la bibliothèque BarCode C#
ZXing.Net.MAUI vs Code-barres IronBarcode : Comparaison du Barcode C# MAUI 2026
ZXing.Net.Maui.Controls v0.7.4. Stable sur NuGet mais encore pré-1.0. Le balayage MAUI Windows n'est pas pris en charge (génération uniquement). Autofocus de l'iPhone 15 Pro documenté comme affecté (problème #260). Fuite de ressources caméra sans Dispose() (problème #164). C'est la bibliothèque que la plupart des développeurs .NET MAUI utilisent en premier lieu — et celle qui fait le plus souvent émerger des problèmes de production avant la mise en production d'un projet.
Comprendre ZXing .NET.MAUI
ZXing .NET.MAUI est un portage .NET MAUI maintenu par la communauté de la bibliothèque de codes-barres ZXing .NET , développée et publiée par Jon Dick (GitHub: Redth) sous la licence MIT. Il fournit un contrôle de caméra XAML, CameraBarcodeReaderView, qui intègre un viseur de balayage en direct dans les pages MAUI. Les développeurs connectent un événement BarcodesDetected pour recevoir les résultats du balayage lorsque la caméra capture des images. La bibliothèque hérite du moteur de format de code-barres complet de ZXing.Net, y compris son enum BarcodeFormats et son modèle de configuration BarcodeReaderOptions.
Le package ZXing.Net.Maui.Controls est enregistré dans MauiProgram.cs via builder.UseBarcodeReader() et est conçu autour du pipeline de caméra mobile pour iOS et Android. La bibliothèque n'est affiliée à aucune organisation commerciale, ne bénéficie d'aucun contrat de niveau de service (SLA) et ne propose aucun niveau d'assistance payant. Sa version v0.7.4 est une version stable NuGet mais reste pré-1.0 sous la version sémantique.
Principales caractéristiques architecturales de ZXing .NET.MAUI :
- Statut pré-1.0 : Le package NuGet est à v0.7.4 — stable, mais toujours pré-1.0. Les changements d'API de version mineure restent possibles avant la 1.0, le rythme des corrections de bugs dépend du mainteneur communautaire, et il n'y a pas de contrat de support commercial.
- Balayage iOS et Android : La bibliothèque est construite autour des API de caméra plateforme pour iOS et Android. Windows MAUIprend en charge uniquement la génération — le balayage par caméra n'est pas implémenté. Mac Catalyst est inclus dans la liste de frameworks cibles mais le balayage n'est pas officiellement documenté.
- Viseur de caméra continu :
CameraBarcodeReaderViewest un contrôle de caméra en direct qui fonctionne en continu tant que la page est visible. Elle occupe de l'espace à l'écran et nécessite une gestion du cycle de vie des pages. - Pas d'implémentation Dispose() : Le contrôle n'implémente pas
IDisposable. Les ressources de la caméra ne sont pas officiellement libérées lors de la navigation dans les pages, exigeant une solution manuelleIsDetecting = falsedansOnDisappearing()(problème GitHub #164). - Problème de mise au point automatique de l'iPhone 15 Pro : le problème GitHub #260 documente que les appareils iPhone 15 Pro et Pro Max (identifiants matériels
iPhone16,1etiPhone16,2) ne parviennent pas à obtenir une mise au point fiable pour la détection de codes-barres. Aucune solution programmatique n'est actuellement disponible. - Problème de compatibilité de la caméra Android : le problème GitHub #275 suit les échecs de construction dus à des conflits de compatibilité avec AndroidX Camera 1.5.0, avec une solution en fixant les packages caméra à 1.4.x ou en relevant le
minSdkVersiondu projet. - Hérite de la spécification de format ZXing.Net : Chaque session de balayage nécessite une déclaration explicite des valeurs
BarcodeFormatsà balayer. Les formats non répertoriés dansBarcodeReaderOptions.Formatssont ignorés en silence, même lorsqu'ils sont visibles dans le cadre de la caméra. - Architecture basée uniquement sur la caméra : la bibliothèque ne possède ni API d'entrée de fichier, ni API de lecture de flux, ni capacité d'extraction de codes-barres PDF. Toute numérisation doit être effectuée via le viseur de la caméra en direct.
Architecture CameraBarcodeReaderView
Le contrôle CameraBarcodeReaderView est le composant central de ZXing.Net.MAUI. Il est déclaré en XAML et configuré via une liaison BarcodeReaderOptions. Chaque page l'utilisant doit implémenter OnAppearing et OnDisappearing pour gérer l'état IsDetecting :
<ContentPage xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
<zxing:CameraBarcodeReaderView
x:Name="CameraView"
Options="{Binding ReaderOptions}"
BarcodesDetected="OnBarcodesDetected" />
</ContentPage>
<ContentPage xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;assembly=ZXing.Net.MAUI.Controls">
<zxing:CameraBarcodeReaderView
x:Name="CameraView"
Options="{Binding ReaderOptions}"
BarcodesDetected="OnBarcodesDetected" />
</ContentPage>
// Toggling IsDetecting in lifecycle overrides is the documented pattern
protected override void OnDisappearing()
{
base.OnDisappearing();
if (CameraView != null)
CameraView.IsDetecting = false; // Non IDisposable on the control
}
protected override void OnAppearing()
{
base.OnAppearing();
if (CameraView != null)
CameraView.IsDetecting = true;
}
// Toggling IsDetecting in lifecycle overrides is the documented pattern
protected override void OnDisappearing()
{
base.OnDisappearing();
if (CameraView != null)
CameraView.IsDetecting = false; // Non IDisposable on the control
}
protected override void OnAppearing()
{
base.OnAppearing();
if (CameraView != null)
CameraView.IsDetecting = true;
}
' Toggling IsDetecting in lifecycle overrides is the documented pattern
Protected Overrides Sub OnDisappearing()
MyBase.OnDisappearing()
If CameraView IsNot Nothing Then
CameraView.IsDetecting = False ' Non IDisposable on the control
End If
End Sub
Protected Overrides Sub OnAppearing()
MyBase.OnAppearing()
If CameraView IsNot Nothing Then
CameraView.IsDetecting = True
End If
End Sub
Chaque page de numérisation d'une application ZXing .NET.MAUI contient ce modèle de cycle de vie. L'absence de IDisposable signifie que l'état de la caméra doit être géré manuellement via le drapeau IsDetecting plutôt que via le modèle standard Dispose.
Comprendre IronBarcode
IronBarcode est une bibliothèque de codes-barres .NET commercialement prise en charge, développée par Iron Software. Il fournit à la fois la lecture et la génération de codes-barres via une API statique, BarcodeReader.Read(), qui accepte les octets d'image, les chemins de fichiers, les flux et les documents PDF. Dans un contexte MAUI, Code-barres IronBarcode s'associe au MediaPicker intégré de MAUI pour capturer des images via la caméra du système, puis traite l'image résultante après la capture plutôt que de traiter un flux de caméra continu.
La bibliothèque cible toutes les plateformes MAUI — iOS, Android, Windows et macOS — via le même package et les mêmes chemins de code. Aucun enregistrement de service spécifique à la plateforme n'est requis dans MauiProgram.cs, aucun contrôle de visualisation de caméra n'est intégré dans XAML, et aucune gestion du cycle de vie n'est nécessaire car Code-barres IronBarcode ne maintient pas d'état de caméra en cours d'exécution.
Caractéristiques principales d' IronBarcode:
- Version commerciale stable : publiée sous forme de package NuGet prêt pour la production avec support commercial, SLA et un rythme de publication régulier.
- Toutes les plateformes MAUI : Prend en charge les cibles MAUI iOS, Android, Windows et macOS à partir d'un seul package et d'un seul modèle de code.
- API sans état :
BarcodeReader.Read()est un appel de méthode statique. Aucun processus en arrière-plan ne s'exécute entre les analyses, aucun hook de cycle de vie n'est requis et aucune ressource de la caméra ne s'accumule lors des navigations entre les pages. Détection automatique de tous les formats : détecte automatiquement plus de 50 formats de codes-barres sans liste de spécifications. Aucune configuration n'est requise pour scanner un format inconnu. - Lecture de fichiers et de PDF : lit nativement les codes-barres à partir de chemins de fichiers, de tableaux d'octets, de flux et de documents PDF, couvrant des scénarios que les bibliothèques de caméras en direct ne peuvent pas prendre en charge.
- Récupération de codes-barres endommagés par apprentissage automatique : applique des modèles d'apprentissage automatique pour récupérer les codes-barres à partir d'images endommagées, partiellement masquées ou de faible qualité, au-delà des capacités des algorithmes de seuillage.
- Génération de codes-barres : Génère tous les principaux formats de codes-barres 1D et 2D sous forme d'images avec une taille, une couleur et une marge configurables.
- Déploiement multiplateforme : le même package s'exécute dans ASP.NET Core, WPF, WinForms, les applications console, Azure Functions et les conteneurs Docker, parallèlement à MAUI.
Comparaison des fonctionnalités
Le tableau suivant met en évidence les principales différences entre ZXing .NET.MAUI et IronBarcode:
| Fonction | ZXing.Net.MAUI | Code-barres IronBarcode |
|---|---|---|
| État de la publication | Stable mais pré-1.0 (v0.7.4) | Version stable et commerciale |
| Support de la plateforme | iOS, balayage Android (génération Windows uniquement) | iOS, Android, Windows, macOS, serveur |
| Spécification de format requise | Oui | Non (détection automatique) |
| Gestion des ressources de la caméra | Manuel (IsDetecting) |
Non applicable — apatride |
| Extraction de codes-barres PDF | Non disponible | Oui |
| Licence | MIT (gratuit, communautaire) | Commercial |
| Soutien commercial | None | Oui |
Comparaison détaillée des fonctionnalités
| Fonction | ZXing.Net.MAUI | Code-barres IronBarcode |
|---|---|---|
| Plateforme | ||
| iOS MAUI | Oui (problème de mise au point iPhone 15 Pro #260) | Oui |
| Android MAUI | Oui (problème de build Camera 1.5.0 #275) | Oui |
| Windows MAUI | Génération uniquement — balayage non implémenté | Oui |
| macOS MAUI | Mac Catalyst ciblé ; balayage pas officiellement documenté | Oui |
| ASP.NET Core / Serveur | Non | Oui |
| WPF / WinForms | Non | Oui |
| Azure Functions / Docker | Non | Oui |
| .NET Framework 4.6.2+ | Non | Oui |
| En lisant | ||
| Détection automatique du format | Non — il faut préciser les formats | Oui (plus de 50 formats) |
| Saisie du chemin de fichier | Via ZXing .NET Core uniquement | Oui |
| Entrée du flux | Via ZXing .NET Core uniquement | Oui |
| extraction de codes-barres PDF | Non | Oui |
| Récupération de codes-barres endommagés | TryHarder uniquement | Oui (basé sur l'apprentissage automatique) |
| Intégration de la caméra | ||
| Contrôle du viseur en direct | Oui | Non (interface utilisateur du système MediaPicker) |
| Gestion du cycle de vie requise | Oui (Détection en cours) | Non |
| implémentation de Dispose() | Non | Sans objet |
| Mise au point automatique de l'iPhone 15 Pro | Affecté (problème GitHub #260) | Sans objet |
| Génération | ||
| génération de codes-barres | Oui (via ZXing .NET) | Oui |
| Maintenance | ||
| État de la publication | Stable mais pré-1.0 (v0.7.4) | Prêt pour la production |
| Soutien commercial | None | Oui |
| garantie de stabilité de l'API | Pré-1.0 — changements de version mineure possibles | Oui |
| Licence | MIT (gratuit) | Commercial |
Support de la plateforme
La couverture de la plateforme est une différence structurelle entre ZXing .NET.MAUI et Code-barres IronBarcode car les deux bibliothèques sont construites sur des hypothèses fondamentalement différentes quant à l'endroit où s'exécutent les applications .NET MAUI .
Approche ZXing .NET.MAUI
ZXing.Net.MAUI est conçu autour des API de caméra plateforme pour iOS et Android. Windows MAUIprend uniquement en charge la génération des codes-barres — le balayage par caméra n'est pas implémenté et n'est pas sur une feuille de route publique. Cela reflète le choix architectural de construire la bibliothèque autour d'un contrôle de viseur de caméra en direct dont les implémentations de plateforme ont été écrites uniquement pour les systèmes d'exploitation mobiles.
Un projet MAUI ciblant net8.0-windows10.0.19041.0 n'obtiendra pas de fonctionnalité de balayage de code-barres de ZXing.Net.MAUI. Mac Catalyst est présent dans la liste des frameworks cibles, mais le balayage sur cette cible n'est pas officiellement documenté. Les équipes qui commencent un projet avec des cibles uniquement mobiles et ajoutent plus tard une exigence Windows ou macOS trouveront que ZXing.Net.MAUI ne peut pas couvrir le balayage sur ces cibles. Le support iOS lui-même comporte une mise en garde : le problème GitHub #260 documente que les appareils iPhone 15 Pro et Pro Max sont affectés par un problème d'autofocus qui empêche la détection fiable.
Approche IronBarcode
IronBarcode prend en charge tous les frameworks cibles MAUI (iOS, Android, Windows et macOS) à partir du même package et du même modèle de code. L'approche MediaPicker + BarcodeReader.Read() s'adapte naturellement à chaque plateforme : sur mobile, MediaPicker.CapturePhotoAsync() invoque la caméra de l'appareil ; Sous Windows, cela correspond au sélecteur de fichiers, ce qui est un comportement approprié pour un environnement de bureau. Aucun code spécifique à la plateforme, aucune compilation conditionnelle et aucun enregistrement de service de plateforme ne sont requis.
Le modèle de code-barres MAUI pour ordinateurs de bureau Windows et macOS est géré par le même package que celui qui gère la numérisation mobile. Le même appel BarcodeReader.Read() qui s'exécute sur un appareil Android s'exécute également dans un point de terminaison ASP.NET Core, une application de bureau WinForms ou une fonction Azure — la cible de déploiement n'affecte pas l'API.
Intégration et cycle de vie de la caméra
Les deux bibliothèques adoptent des positions architecturales opposées sur le fonctionnement de l'accès à la caméra dans une application MAUI.
Approche ZXing .NET.MAUI
CameraBarcodeReaderView est un contrôle de caméra persistant intégré dans la page XAML. Il commence à traiter les images de la caméra lorsque IsDetecting est réglé sur true et s'arrête lorsqu'il est réglé sur false. L'absence d'une implémentation Dispose() signifie que les ressources de la caméra ne sont pas libérées via le modèle standard IDisposable lorsque l'utilisateur se déplace. L'atténuation documentée consiste à régler IsDetecting = false dans OnDisappearing() et à le restaurer dans OnAppearing() :
// ZXing.Net.MAUI: toggle IsDetecting in page lifecycle overrides
protected override void OnDisappearing()
{
base.OnDisappearing();
CameraView.IsDetecting = false;
}
protected override void OnAppearing()
{
base.OnAppearing();
CameraView.IsDetecting = true;
}
// ZXing.Net.MAUI: toggle IsDetecting in page lifecycle overrides
protected override void OnDisappearing()
{
base.OnDisappearing();
CameraView.IsDetecting = false;
}
protected override void OnAppearing()
{
base.OnAppearing();
CameraView.IsDetecting = true;
}
' ZXing.Net.MAUI: toggle IsDetecting in page lifecycle overrides
Protected Overrides Sub OnDisappearing()
MyBase.OnDisappearing()
CameraView.IsDetecting = False
End Sub
Protected Overrides Sub OnAppearing()
MyBase.OnAppearing()
CameraView.IsDetecting = True
End Sub
Ce modèle doit être répété sur chaque page contenant un scanner. Les applications qui naviguent fréquemment vers et depuis des pages de balayage peuvent accumuler des ressources caméra qui n'ont pas été entièrement libérées, ce qui est suivi dans le problème GitHub #164 avec des rapports de croissance de la mémoire et d'initialisation intermittente de la caméra au retour. Le problème de mise au point automatique de l'iPhone 15 Pro (problème GitHub #260) est une préoccupation distincte dans la couche d'intégration de la caméra : la vue de la caméra rend le code-barres clairement, mais le système de mise au point automatique ne se verrouille pas suffisamment net pour la détection sur le matériel iPhone16,1 et iPhone16,2. La solution de contournement documentée est d'indiquer à l'utilisateur d'ajuster manuellement la distance entre l'appareil et le code-barres.
Approche IronBarcode
IronBarcode n'intègre pas de contrôle de caméra dans la mise en page XAML. Au lieu de cela, l'appel MediaPicker.CapturePhotoAsync() ouvre l'interface utilisateur de la caméra du système lorsque l'utilisateur appuie sur un bouton. Le système de caméra gère la mise au point, l'exposition et l'autofocus indépendamment. Lorsque l'utilisateur confirme la capture, l'image résultante est transmise à BarcodeReader.Read() sous forme de tableau d'octets :
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanButton_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 barcode in results)
Console.WriteLine($"{barcode.Format}: {barcode.Value}");
}
// Non OnAppearing or OnDisappearing needed — no camera state to manage
// NuGet: dotnet add package IronBarcode
using IronBarCode;
private async void ScanButton_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 barcode in results)
Console.WriteLine($"{barcode.Format}: {barcode.Value}");
}
// Non OnAppearing or OnDisappearing needed — no camera state to manage
Imports IronBarCode
Imports System.IO
Private Async Sub ScanButton_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 barcode In results
Console.WriteLine($"{barcode.Format}: {barcode.Value}")
Next
End Using
End Using
End Sub
' Non OnAppearing or OnDisappearing needed — no camera state to manage
Le tutoriel sur le lecteur de codes-barres .NET MAUI couvre la configuration complète du projet pour ce modèle, y compris la configuration des autorisations pour iOS et Android. Puisqu'il n'y a pas de vue caméra persistante, il n'y a pas de ressource à libérer, pas d'état à basculer et pas de code de cycle de vie à maintenir d'une page à l'autre.
Spécification du format
La manière dont une bibliothèque gère la détection du format des codes-barres a des conséquences directes sur la fiabilité de la numérisation dans les déploiements réels.
Approche ZXing .NET.MAUI
ZXing .NET.MAUI hérite des exigences de spécification de format de ZXing .NET . Avant le début du balayage, le développeur doit remplir BarcodeReaderOptions.Formats avec un masque binaire des valeurs enum BarcodeFormats qui doivent être détectées. Les formats non inclus dans cette liste ne seront pas détectés — silencieusement, sans erreur ni avertissement :
// ZXing.Net.MAUI: formats must be declared explicitly
// Formats not listed here are not detected
ReaderOptions = new BarcodeReaderOptions
{
Formats = BarcodeFormats.QRCode |
BarcodeFormats.Code128 |
BarcodeFormats.Ean13 |
BarcodeFormats.UpcA,
TryHarder = true,
AutoRotate = true
};
// ZXing.Net.MAUI: formats must be declared explicitly
// Formats not listed here are not detected
ReaderOptions = new BarcodeReaderOptions
{
Formats = BarcodeFormats.QRCode |
BarcodeFormats.Code128 |
BarcodeFormats.Ean13 |
BarcodeFormats.UpcA,
TryHarder = true,
AutoRotate = true
};
' ZXing.Net.MAUI: formats must be declared explicitly
' Formats not listed here are not detected
ReaderOptions = New BarcodeReaderOptions With {
.Formats = BarcodeFormats.QRCode Or
BarcodeFormats.Code128 Or
BarcodeFormats.Ean13 Or
BarcodeFormats.UpcA,
.TryHarder = True,
.AutoRotate = True
}
Si un utilisateur pointe la caméra sur un GS1 DataBar, un code Aztec, un MaxiCode, ou tout format qui n'a pas été déclaré dans les options, le balayage ne renvoie aucun résultat sans émettre d'erreur. La caméra rend le code-barres et aucun résultat n'est renvoyé à l'application. Dans un environnement contrôlé — un entrepôt où chaque article porte une étiquette Code128 —, cela est gérable. Dans les déploiements où les formats de code-barres sont déterminés par des fournisseurs externes, des clients, ou des systèmes tiers, l'absence d'un chemin de secours devient un problème de support récurrent.
Approche IronBarcode
IronBarcode effectue une détection automatique du format pour tous les formats pris en charge, sans aucune préconfiguration. BarcodeReader.Read() analyse l'image et renvoie les résultats pour chaque code-barres qu'il identifie, quel que soit le format. Aucune liste BarcodeReaderOptions n'est requise :
// IronBarcode: no format specification needed
// All 50+ formats detected automatically
var results = BarcodeReader.Read(imageBytes);
foreach (var barcode in results)
Console.WriteLine($"{barcode.Format}: {barcode.Value}");
// IronBarcode: no format specification needed
// All 50+ formats detected automatically
var results = BarcodeReader.Read(imageBytes);
foreach (var barcode in results)
Console.WriteLine($"{barcode.Format}: {barcode.Value}");
Imports IronBarcode
' IronBarcode: no format specification needed
' All 50+ formats detected automatically
Dim results = BarcodeReader.Read(imageBytes)
For Each barcode In results
Console.WriteLine($"{barcode.Format}: {barcode.Value}")
Next
Si un réglage des performances est nécessaire dans un scénario contrôlé où un seul format est attendu, des indications de format peuvent être transmises en option, mais elles ne sont jamais requises pour une détection correcte. Un code-barres dont le format n'a pas été prévu par le développeur sera tout de même détecté et renvoyé.
Traitement de fichiers et de PDF
Au-delà de la numérisation en direct par caméra, de nombreux flux de travail de production de codes-barres impliquent la lecture de documents stockés : factures d'expédition, billets numériques, images téléchargées et pièces jointes PDF.
Approche ZXing .NET.MAUI
ZXing .NET.MAUI est une bibliothèque de contrôle de caméra. Il ne dispose d'aucune API pour la lecture des codes-barres à partir des chemins de fichiers, des tableaux d'octets transmis directement depuis le stockage ou des documents PDF. Le contrôle CameraBarcodeReaderView nécessite un flux de caméra en direct ; Il n'existe pas de méthode statique qui accepte un chemin de fichier et renvoie des résultats de code-barres. Les équipes qui doivent lire les codes-barres à partir de fichiers PDF téléchargés, de systèmes de gestion de documents ou de files d'attente de traitement d'images par lots ne peuvent pas utiliser ZXing .NET.MAUI pour ces scénarios et doivent introduire une bibliothèque distincte.
Approche IronBarcode
IronBarcode lit les codes-barres à partir de n'importe quelle source via la même méthode BarcodeReader.Read(). Il accepte les chemins de fichiers, les tableaux d'octets, les flux et les documents PDF. L'analyse des PDF est native — Code-barres IronBarcode traite directement les pages PDF sans étape de rastérisation intermédiaire :
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Read barcodes from a PDF file
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
// Read from a user-selected file using MAUI FilePicker
var file = await FilePicker.PickAsync();
if (file != null)
{
var fileResults = BarcodeReader.Read(file.FullPath);
foreach (var result in fileResults)
ResultLabel.Text += $"\n{result.Format}: {result.Value}";
}
// NuGet: dotnet add package IronBarcode
using IronBarCode;
// Read barcodes from a PDF file
var results = BarcodeReader.Read("invoice.pdf");
foreach (var barcode in results)
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}");
// Read from a user-selected file using MAUI FilePicker
var file = await FilePicker.PickAsync();
if (file != null)
{
var fileResults = BarcodeReader.Read(file.FullPath);
foreach (var result in fileResults)
ResultLabel.Text += $"\n{result.Format}: {result.Value}";
}
Imports IronBarCode
Imports Microsoft.Maui.Storage
' Read barcodes from a PDF file
Dim results = BarcodeReader.Read("invoice.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} — {barcode.Value}")
Next
' Read from a user-selected file using MAUI FilePicker
Dim file = Await FilePicker.PickAsync()
If file IsNot Nothing Then
Dim fileResults = BarcodeReader.Read(file.FullPath)
For Each result In fileResults
ResultLabel.Text &= $"\n{result.Format}: {result.Value}"
Next
End If
Le flux de travail complet de lecture des codes-barres PDF, y compris les documents multipages et les formats de codes-barres mixtes sur plusieurs pages, est documenté dans le guide de lecture des codes-barres à partir de PDF . Cela couvre les factures d'expédition, les billets numériques, les flux de travail de gestion de documents et les scénarios de traitement par lots que l'architecture uniquement basée sur la caméra de ZXing .NET.MAUI ne peut pas prendre en charge.
Référence de mappage d'API
| ZXing.Net.MAUI | Code-barres IronBarcode | Notes |
|---|---|---|
builder.UseBarcodeReader() |
Non requis | Retirer de MauiProgram.cs |
xmlns:zxing="clr-namespace:ZXing.Net.Maui.Controls;..." |
Non requis | Supprimer la déclaration d'espace de noms XAML |
<zxing:CameraBarcodeReaderView> |
Remplacer par <Button> + MediaPicker |
Changement architectural |
Options="{Binding ReaderOptions}" |
Non requis | Aucun objet d'options nécessaire |
BarcodesDetected="OnBarcodesDetected" |
Valeur de retour BarcodeReader.Read() |
Événement → retour de méthode |
new BarcodeReaderOptions { Formats = BarcodeFormats.X \N| ... } |
Non requis | La détection automatique remplace ceci |
BarcodeDetectionEventArgs e |
IEnumerable<BarcodeResult> |
Modèle de prestation de résultats différent |
e.Results |
Valeur de retour de BarcodeReader.Read() |
|
barcode.Value |
result.Value |
Même nom de propriété |
barcode.Format |
result.Format |
Même nom de propriété |
BarcodeFormats.QRCode |
BarcodeEncoding.QRCode |
renommer l'énumération |
BarcodeFormats.Code128 |
BarcodeEncoding.Code128 |
renommer l'énumération |
BarcodeFormats.Ean13 |
BarcodeEncoding.EAN13 |
renommer l'énumération |
CameraView.IsDetecting = false (OnDisappearing) |
Non requis — supprimez la méthode | Code-barres IronBarcode est sans état |
CameraView.IsDetecting = true (OnAppearing) |
Non requis — supprimez la méthode | Code-barres IronBarcode est sans état |
| API sans fichier | BarcodeReader.Read("path/to/file.png") |
Nouvelle capacité |
| API PDF indisponible | BarcodeReader.Read("document.pdf") |
Nouvelle capacité |
Lorsque les équipes envisagent de passer de ZXing .NET.MAUI à IronBarcode
Plusieurs scénarios concrets motivent la décision d'évaluer Code-barres IronBarcode comme alternative à ZXing .NET.MAUI. Il s'agit de conditions au niveau du projet et du produit, et non de préférences de mise en œuvre.
Configuration requise pour Windows MAUI
Le déclencheur le plus courant d'une réévaluation est l'ajout d'une cible Windows MAUIà un projet qui a débuté uniquement pour iOS et Android. Les équipes MAUI commencent souvent par des versions optimisées pour les mobiles et étendent ensuite leur utilisation aux ordinateurs de bureau à mesure que les besoins évoluent. Lorsque cette expansion aura lieu, ZXing .NET.MAUI ne propose aucune solution de rechange : la plateforme Windows n'est pas implémentée et ne figure pas dans la feuille de route publique. L'équipe doit soit accepter que la lecture de codes-barres ne soit pas disponible sous Windows, soit remplacer la bibliothèque. Étant donné que le remplacement implique de toute façon une modification structurelle du schéma de numérisation, les équipes effectuent généralement le changement simultanément sur toutes les plateformes.
Compatibilité matérielle de génération actuelle
Le problème de mise au point automatique de l'iPhone 15 Pro (problème GitHub #260) est une réelle considération pour toute équipe qui expédie un scanner de code-barres en production aux utilisateurs iOS. Les iPhone 15 Pro et Pro Max sont courants dans le segment des consommateurs qui s'attendent à une expérience d'application raffinée, et une solution de contournement demandant aux utilisateurs d'ajuster leur distance par rapport à un code-barres est une régression UX notable par rapport aux anciens matériels iPhone. Les équipes qui rencontrent ce problème en QA, ou reçoivent des rapports de support des utilisateurs iPhone 15 Pro, font face à un choix entre rester sur une bibliothèque où aucune solution n'est actuellement disponible ou migrer vers une approche qui n'est pas affectée par le modèle de mise au point de vue de la caméra.
Traitement des fichiers et des documents
Les exigences en matière de lecture de codes-barres se limitent rarement à la capture vidéo en direct. Les applications qui débutent comme scanners d'inventaire s'étendent fréquemment pour inclure la lecture de codes-barres à partir de fichiers PDF téléchargés, le traitement des factures d'expédition ou la gestion des billets numériques provenant de pièces jointes aux courriels. ZXing .NET.MAUI ne dispose d'aucune API pour aucun de ces scénarios. Lorsqu'une exigence produit est ajoutée au backlog et implique la lecture d'un code-barres à partir d'un fichier ou d'un document, les équipes utilisant ZXing .NET.MAUI doivent introduire une bibliothèque distincte pour la gérer. Si l'équipe utilise déjà Code-barres IronBarcode pour l'un de ces scénarios basés sur des fichiers, l'intégration de la numérisation par caméra MAUI dans la même bibliothèque devient la prochaine étape naturelle.
Exigences de stabilité de la production
La désignation pré-1.0 à la version v0.7.4 — bien que le package lui-même soit une version NuGet stable — a des implications pour les équipes soumises à l'analyse de la composition logicielle, aux audits de dépendance, ou aux processus d'approbation internes. Certains environnements d'entreprise exigent que les dépendances de production portent une version stable 1.0+, un contrat de support commercial, ou les deux. ZXing.Net.MAUI est maintenu par la communauté et pré-1.0, ce qui est adapté aux outils internes et aux prototypes mais ajoute des étapes de révision dans les applications destinées aux clients où le scanner de code-barres est un flux de travail principal. L'absence de niveau de support payant signifie que tout bug critique dépend de la disponibilité du mainteneur communautaire.
Considérations courantes en matière de migration
Le changement structurel de ZXing .NET.MAUI à Code-barres IronBarcode implique trois remplacements techniques spécifiques qui affectent chaque fichier du code source participant à la lecture des codes-barres.
Modèle CameraBarcodeReaderView vers MediaPicker
Le contrôle XAML CameraBarcodeReaderView et sa déclaration de namespace xmlns:zxing sont entièrement supprimés. Dans chaque fichier XAML contenant une vue de scan, le remplacement est un contrôle Button qui invoque MediaPicker.CapturePhotoAsync() dans son gestionnaire Clicked. Le modèle orienté événement — où les résultats arrivent via BarcodesDetected — est remplacé par la lecture de la valeur de retour de BarcodeReader.Read() directement dans le gestionnaire asynchrone.
Détection de la suppression du cycle de vie
Chaque OnAppearing et OnDisappearing substitution qui existe uniquement pour basculer CameraView.IsDetecting peut être supprimée. Si ces substitutions contiennent d'autres logiques de cycle de vie de la page, les lignes IsDetecting sont supprimées et la logique restante est préservée. Il n'y a pas d'équivalent Code-barres IronBarcode à IsDetecting car il n'y a pas d'état de caméra persistant à gérer entre les navigations de pages.
Suppression de l'enregistrement UseBarcodeReader()
ZXing.Net.MAUI nécessite un appel builder.UseBarcodeReader() unique dans MauiProgram.cs pour enregistrer ses services de caméra de plateforme. Code-barres IronBarcode ne nécessite aucun enregistrement MauiProgram.cs. La ligne UseBarcodeReader() est supprimée, et l'importation de namespace using ZXing.Net.Maui; qui la prend en charge est également supprimée avec la désinstallation du package.
Fonctionnalités supplémentaires IronBarcode
Au-delà des scénarios abordés dans cette comparaison, Code-barres IronBarcode offre des fonctionnalités de code-barres qui vont bien au-delà de ce qu'une commande MAUI basée sur une caméra peut offrir :
- Balayage de code-barres iOS : Plein support de MAUI iOS utilisant le même modèle
MediaPicker+BarcodeReader.Read()— pas de gestion de caméra spécifique à la plateforme, pas de listes de formats, et pas de code généré de cycle de vie. - Numérisation de codes-barres Android : numérisation Android MAUIvia la même API unifiée, sans les problèmes de dépendance à Camera 1.5.0 présents dans ZXing .NET.MAUI.
- Génération de codes-barres : Génère des codes QR, Code128, EAN-13, PDF417, Data Matrix et tous les principaux formats sous forme d'images avec une taille, une couleur, une zone de silence et un niveau de correction d'erreur configurables.
- Traitement par lots : Lit tous les codes-barres de toutes les pages d'un PDF multipage ou d'un répertoire d'images en un seul appel, en renvoyant les métadonnées du numéro de page avec chaque résultat.
- Déploiement côté serveur : Le même package NuGet et le même appel
BarcodeReader.Read()fonctionnent dans les points de terminaison ASP.NET Core, les fonctions Azure et les containers Docker — un package couvre à la fois le client mobile et le backend serveur. - Récupération de codes-barres endommagés : les modèles d'apprentissage automatique récupèrent les codes-barres à partir d'étiquettes physiquement endommagées, d'impressions à faible contraste et d'images capturées sous des angles sous-optimaux que les décodeurs standard basés sur un seuil ne peuvent pas traiter.
- Génération de codes-barres stylisés : Génère des codes-barres avec des couleurs personnalisées, des logos intégrés, des coins arrondis et du texte d'annotation, au-delà de la simple sortie monochrome disponible via ZXing .NET.
Compatibilité .NET et préparation à l'avenir
IronBarcode maintient un développement actif avec des mises à jour régulières ciblant les versions actuelles de .NET . La bibliothèque prend en charge .NET 8, .NET 9, et suit les versions .NET ultérieures. Elle prend également en charge .NET Framework 4.6.2 et versions ultérieures pour les environnements d'applications héritées. ZXing.Net.MAUI, en tant que package pré-1.0 maintenu par la communauté, ne porte pas d'engagements formels sur les chronologies de support des versions .NET. Pour les projets MAUI — qui sont liés au rythme de publication de .NET — la disponibilité d'une bibliothèque activement maintenue et bénéficiant d'un support commercial, qui suit chaque version de .NET, est pertinente pour la planification à long terme.
Conclusion
ZXing .NET.MAUI et Code-barres IronBarcode représentent des réponses différentes au même problème — la lecture des codes-barres dans une application .NET MAUI — mais elles partent de prémisses architecturales différentes. ZXing .NET.MAUI intègre un viseur de caméra en direct directement dans la page XAML, fonctionnant comme un contrôle de caméra persistant qui déclenche des événements au fur et à mesure que les images sont analysées. Code-barres IronBarcode traite la caméra comme un dispositif de capture accessible via le MediaPicker du système, en traitant une image statique après la capture plutôt qu'un flux continu. Cette différence d'approche détermine presque tout le reste : la couverture de la plateforme, la complexité du cycle de vie, la gestion des formats et la portée du déploiement.
ZXing.Net.MAUI est véritablement approprié pour des profils de projet spécifiques : applications iOS et Android, prototypes et outils internes, équipes qui connaissent à l'avance leurs formats de code-barres, projets sans exigence de balayage MAUI Windows, et situations où la licence MIT à coût zéro est le facteur décisif. Pour un scanner d'inventaire d'entrepôt sur un ensemble fixe d'appareils Android scannant des étiquettes Code128, ZXing .NET.MAUI fonctionnera correctement. Le statut pré-1.0, le problème iPhone 15 Pro, et le modèle de cycle de vie sont de réels compromis qui valent la peine d'être acceptés dans le bon contexte.
IronBarcode convient lorsque la portée du projet est plus large : cibles MAUI Windows ou macOS, formats de codes-barres inconnus ou variables provenant de systèmes externes, exigences incluant la lecture de codes-barres à partir de fichiers PDF ou de fichiers téléchargés, besoins de stabilité de niveau production ou traitement des codes-barres côté serveur en plus de la numérisation mobile. La licence commerciale est un investissement qui couvre le support, la maintenance et les mises à jour de compatibilité pour toutes les versions de .NET . L'API sans état élimine une catégorie de bugs — fuites de ressources de la caméra, erreurs d'état du cycle de vie — que ZXing .NET.MAUI exige des développeurs qu'ils préviennent manuellement.
En toute honnêteté, aucune des deux bibliothèques n'est universellement correcte. ZXing .NET.MAUI mérite sa place de première bibliothèque essayée par la plupart des développeurs MAUI car elle est gratuite, familière et rapide à intégrer. Les problèmes qu'il soulève sont réels, mais ils n'ont d'importance que dans certaines conditions de projet. Lorsque ces conditions sont réunies (exigence Windows, matériel iPhone de dernière génération, numérisation de fichiers ou normes de stabilité de production), Code-barres IronBarcode les prend toutes en charge. Le choix dépend de si les contraintes spécifiques du projet le placent à l'intérieur ou à l'extérieur des scénarios où les limitations connues de ZXing .NET.MAUI deviennent des obstacles.
Questions Fréquemment Posées
Qu'est-ce que ZXing.Net.MAUI ?
ZXing.Net.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 ZXing.Net.MAUI et IronBarcode ?
IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que ZXing.Net.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 ZXing.Net.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.
IronBarcode prend-il en charge tous les formats de codes-barres que ZXing.Net.MAUI prend en charge ?
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 à ZXing.Net.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 for .NET avant de l'acheter, contrairement à ZXing.Net.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 ZXing.Net.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 ZXing.Net.MAUI à IronBarcode ?
La migration de ZXing.Net.MAUI vers IronBarcode implique principalement le remplacement des appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, la suppression du boilerplate de licence et la mise à jour des noms des propriétés de résultat. 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().

