Comment lire des codes-barres à partir de flux en C#
Migration du SDK barKoder vers IronBarcode
Barkoder propose des packages .NET officiels — Plugin.Maui.Barkoder et Barkoder.Xamarin — mais les deux sont strictement des composants de balayage de caméra mobile. Si vous avez évalué barKoder pour son algorithme MatrixSight, son mode DeBlur, sa détection multi-barcode ou son support DPM et que vous avez ensuite découvert que vous avez besoin d'entrées de fichiers, de traitement PDF, de déploiement côté serveur ou de génération de code-barres, rien de tout cela n'est disponible chez barKoder sur .NET. Ce guide montre comment Code-barres IronBarcode couvre chacun de ces besoins, avec du code fonctionnel pour chaque scénario.
Pourquoi migrer du SDK barKoder
Les équipes passant d'une évaluation barKoder à Code-barres IronBarcode signalent systématiquement les mêmes déclencheurs :
Surface de la caméra mobile uniquement : L'empreinte .NET de Barkoder est Plugin.Maui.Barkoder (v1.6.8, mars 2026) et Barkoder.Xamarin (v1.3.0). Les deux intègrent les SDK iOS / Android natifs et exposent un contrôle de caméra BarkoderView. Il n'y a pas de bibliothèque Barkoder.NET à usage général, pas de cible ASP.NET Core, pas de cible console / travailleur / bureau, et pas de cible serveur Linux.
Architecture en lecture seule : Barkoder est un SDK de type analyse uniquement. Si votre application a besoin de générer des codes-barres (imprimer des étiquettes d'expédition, créer des codes QR pour les emballages, intégrer des codes dans des documents), Barkoder ne fournit rien. Les équipes qui découvrent un besoin de génération en cours de projet ont besoin d'une bibliothèque qui couvre les deux aspects du flux de travail.
Absence de traitement des PDF : dans les applications Enterprise .NET , les codes-barres apparaissent fréquemment dans les documents PDF — factures, manifestes d'expédition, dossiers médicaux, documents de conformité. Barkoder n'a aucune notion de ce processus. Il est conçu pour la saisie en direct du flux vidéo d'une caméra sur un appareil mobile et ne peut pas traiter un fichier PDF.
Aucun déploiement côté serveur : le modèle de traitement de Barkoder repose sur la numérisation mobile directement sur l'appareil. Il ne peut pas s'exécuter dans ASP.NET Core, Azure Functions, les conteneurs Docker ou AWS Lambda. Les équipes qui développent des API de codes-barres côté serveur, des pipelines de traitement de documents ou des fonctions cloud n'ont aucune possibilité de déployer Barkoder.
Pas d'Entrée Fichier / Flux : Même dans une application MAUI, BarkoderView ne consomme que des trames de caméra en direct. Il n'y a pas de surcharge de chemin de fichier, tableau d'octets, ou Stream, le traitement d'une image téléchargée ou d'une photo de galerie nécessite donc une bibliothèque différente.
La frontière fondamentale
La surface MAUI de Barkoder est liée à la caméra. Un développeur .NET utilisant Plugin.Maui.Barkoder écrit du code qui ressemble à ceci :
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.SetFlashEnabled(false);
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.SetFlashEnabled(False)
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
End Class
IronBarcode fournit une API de fichiers / flux / PDF pour les mêmes données :
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("scanned-label.png", options);
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("scanned-label.png", options)
For Each result In results
Console.WriteLine($"Format: {result.Format} | Value: {result.Value}")
Next
Code-barres IronBarcode vs SDK barKoder : Comparaison des fonctionnalités
| Fonction | SDK barKoder | Code-barres IronBarcode |
|---|---|---|
| API .NET / C# | UI de caméra MAUI / Xamarin uniquement | Surface .NET complète |
| Paquet NuGet | Plugin.Maui.Barkoder, Barkoder.Xamarin |
BarCode |
| Récupération de codes-barres endommagés | MatrixSight / DeBlur | ReadingSpeed.ExtremeDetail + ML |
| Détection de plusieurs codes-barres | Oui | ExpectMultipleBarcodes = true |
| DataMatrix / DPM | Oui (lecture seule) | Oui — lire et générer |
| Code QR | Oui (lecture seule) | Oui — lire et générer |
| PDF417 | Oui | Oui |
| Aztèque | Oui | Oui |
| Code 128, Code 39, EAN | Oui | Oui — plus de 50 formats |
| Génération de codes-barres | None | Intégrale — tous formats |
| Traitement PDF | None | Natif |
| Entrée fichier / flux / tableau[] | Aucun — cadres de caméra uniquement | Oui |
| ASP.NET Core | None | Complet |
| Docker / Linux | None | Complet |
| Azure Functions | None | Complet |
| AWS Lambda | None | Complet |
| Hors ligne / Isolation physique | Sur l'appareil | Entièrement local |
| Asynchrone / Attendre | Basé sur des rappels | Complet |
| Injection de dépendance | None | DI .NET complet |
| iOS via MAUI | Plugin.Maui.Barkoder (interface utilisateur de la caméra) |
Programmatique (fichier / flux) |
| Android via MAUI | Plugin.Maui.Barkoder (interface utilisateur de la caméra) |
Programmatique (fichier / flux) |
| Tarification | Abonnement annuel | À partir de 749 $ perpétuel |
Début rapide : Migration SDK barKoder vers IronBarcode
Étape 1 : Remplacer le package NuGet
Installer IronBarcode:
dotnet add package BarCode
Si votre projet utilise Plugin.Maui.Barkoder ou Barkoder.Xamarin uniquement pour des flux de travail non basés sur la caméra (ou si vous passez complètement au traitement de fichiers / PDF), supprimez-le :
dotnet remove package Plugin.Maui.Barkoder
dotnet remove package Plugin.Maui.Barkoder
Si l'application a toujours besoin d'une interface utilisateur de caméra en direct, conservez Plugin.Maui.Barkoder et ajoutez Code-barres IronBarcode à côté pour le travail de génération de fichiers / PDF.
Étape 2 : Mise à jour des espaces de noms
Supprimez l'espace de noms barKoder là où il n'est plus nécessaire, et ajoutez l'espace de noms Code-barres IronBarcode :
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
// Remove (if no longer needed)
// using Barkoder.Maui;
// Add
using IronBarCode;
Imports IronBarCode
Étape 3 : initialisation de la licence
Ajoutez l'initialisation de licence au démarrage de l'application — dans Program.cs pour ASP.NET Core, ou avant toute opération de code-barres dans les applications console ou de bureau :
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Exemples de migration de code
Lecture des codes-barres à partir d'images
Le scénario de lecture de base est mappé des cadres de caméra en direct de barKoder à l'API de fichiers / flux / tableau[] d'IronBarcode.
Approche barKoder MAUI :
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
// dotnet add package Plugin.Maui.Barkoder
using Barkoder.Maui;
public partial class ScanPage : ContentPage, IBarkoderDelegate
{
public ScanPage()
{
InitializeComponent();
BarkoderView.StartScanning(this);
}
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
{
Console.WriteLine($"Barcode: {r.TextualData}");
Console.WriteLine($"Type: {r.BarcodeTypeName}");
}
}
}
Imports Barkoder.Maui
Public Partial Class ScanPage
Inherits ContentPage
Implements IBarkoderDelegate
Public Sub New()
InitializeComponent()
BarkoderView.StartScanning(Me)
End Sub
Public Sub DidFinishScanning(result As BarcodeResult()) Implements IBarkoderDelegate.DidFinishScanning
For Each r In result
Console.WriteLine($"Barcode: {r.TextualData}")
Console.WriteLine($"Type: {r.BarcodeTypeName}")
Next
End Sub
End Class
Approche IronBarcode :
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
// dotnet add package BarCode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var results = BarcodeReader.Read("scan.png");
foreach (var result in results)
{
Console.WriteLine($"Format: {result.Format}");
Console.WriteLine($"Value: {result.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim results = BarcodeReader.Read("scan.png")
For Each result In results
Console.WriteLine($"Format: {result.Format}")
Console.WriteLine($"Value: {result.Value}")
Next
La fonction BarcodeReader.Read() d'IronBarcode détecte automatiquement le format de code-barres sans qu'il soit nécessaire de spécifier un format à l'avance. La même fonction s'applique aux images capturées par un appareil mobile et téléchargées sur un serveur, aux images chargées depuis un système de fichiers ou aux images reçues sous forme de tableaux d'octets à partir d'un flux. Pour une documentation complète sur la lecture, consultez le guide de lecture IronBarcode .
Récupération de codes-barres endommagés (équivalent du mode DeBlur)
Le mode DeBlur de Barkoder est l'une de ses fonctionnalités les plus citées. Code-barres IronBarcode fournit l'équivalent pour l'entrée de fichier via ReadingSpeed.ExtremeDetail.
Approche barKoder MAUI :
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
// Live camera scanning with DeBlur enabled via configuration
using Barkoder.Maui;
BarkoderView.SetEnabledBarcodeTypes(/* configure formats */);
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Recovered: {r.TextualData}");
}
Imports Barkoder.Maui
' Live camera scanning with DeBlur enabled via configuration
BarkoderView.SetEnabledBarcodeTypes() ' configure formats
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Recovered: {r.TextualData}")
Next
End Sub
Approche IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("worn-shipping-label.png", options);
if (results.Any())
{
Console.WriteLine($"Recovered barcode: {results.First().Value}");
}
else
{
Console.WriteLine("Could not decode — image quality too low");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("worn-shipping-label.png", options)
If results.Any() Then
Console.WriteLine($"Recovered barcode: {results.First().Value}")
Else
Console.WriteLine("Could not decode — image quality too low")
End If
ReadingSpeed.ExtremeDetail exécute un pipeline d'analyse d'image basé sur ML en plusieurs passes, appliquant l'amélioration du contraste, l'accentuation, la correction de rotation et la récupération des dommages avant d'essayer de décoder. Pour les flux de travail par lots, utilisez ReadingSpeed.Balanced par défaut et revenez à ExtremeDetail uniquement pour les images que Balanced échoue à décoder.
Détection de plusieurs codes-barres
La numérisation en trame multi-code-barres de Barkoder est mappée à l'option ExpectMultipleBarcodes d'IronBarcode, qui fonctionne aussi bien sur les images que sur les PDF.
Approche barKoder MAUI :
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
// Live camera frame returns BarcodeResult[]; multi-scan configured on the view
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}");
}
Imports Barkoder.Maui
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"{r.BarcodeTypeName}: {r.TextualData}")
Next
End Sub
Approche IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
// Works identically on images and PDFs
var results = BarcodeReader.Read("shipping-manifest.pdf", options);
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
' Works identically on images and PDFs
Dim results = BarcodeReader.Read("shipping-manifest.pdf", options)
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber} | {barcode.Format} | {barcode.Value}")
Next
Il s'agit d'un appel de méthode unique. Aucune extraction de page, aucune requête multiple, aucun traitement supplémentaire par code-barres. Le PDF est lu nativement.
Génération et lecture de DataMatrix
Barkoder lit DataMatrix mais ne peut pas la générer. Code-barres IronBarcode couvre les deux aspects du flux de travail, ce qui est une exigence courante dans les systèmes de suivi industriels.
Approche barKoder MAUI :
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
// Camera-only DataMatrix scanning; no generation available
using Barkoder.Maui;
BarkoderView.StartScanning(this);
public void DidFinishScanning(BarcodeResult[] result)
{
foreach (var r in result)
Console.WriteLine($"Part ID: {r.TextualData}");
}
Imports Barkoder.Maui
' Camera-only DataMatrix scanning; no generation available
BarkoderView.StartScanning(Me)
Public Sub DidFinishScanning(result As BarcodeResult())
For Each r In result
Console.WriteLine($"Part ID: {r.TextualData}")
Next
End Sub
Approche IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix)
.SaveAsPng("part-label.png");
// Read DataMatrix from a scanned industrial part image
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
var results = BarcodeReader.Read("etched-part-photo.png", options);
foreach (var result in results)
{
Console.WriteLine($"Part Serial: {result.Value}");
Console.WriteLine($"Barcode Type: {result.Format}");
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate a DataMatrix barcode for a part label
BarcodeWriter.CreateBarcode("PART-SN-20240315-A42291", BarcodeEncoding.DataMatrix) _
.SaveAsPng("part-label.png")
' Read DataMatrix from a scanned industrial part image
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
Dim results = BarcodeReader.Read("etched-part-photo.png", options)
For Each result In results
Console.WriteLine($"Part Serial: {result.Value}")
Console.WriteLine($"Barcode Type: {result.Format}")
Next
Pour obtenir la liste complète des formats d'encodage pris en charge et des options de génération, consultez la documentation de génération de codes-barres IronBarcode .
Génération de codes QR avec personnalisation
Barkoder ne génère pas de codes-barres. Code-barres IronBarcode génère des codes QR avec logos intégrés, ce qui est une exigence courante pour les processus de marketing, d'emballage et d'identification des produits.
Approche barKoder MAUI :
Not available — Plugin.Maui.Barkoder is a reader-only SDK with no
generation API on any platform.
Approche IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500)
.AddBrandLogo("company-logo.png")
.SaveAsPng("branded-qr.png");
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' QR code with brand logo embedded at centre
QRCodeWriter.CreateQrCode("https://parts.example.com/product/A42", 500) _
.AddBrandLogo("company-logo.png") _
.SaveAsPng("branded-qr.png")
Point de terminaison de l'API de code-barres ASP.NET Core
Barkoder ne possède pas de modèle de déploiement côté serveur. L'équivalent d'un point de terminaison de téléchargement de numérisation mobile — recevant une image de n'importe quel client et renvoyant des données de code-barres — nécessite une bibliothèque .NET .
Approche barKoder :
Not available — Plugin.Maui.Barkoder runs only inside a MAUI app head
against a live camera. There is no ASP.NET Core integration and no
server-side execution model.
Approche IronBarcode :
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
// In Program.cs
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
app.MapPost("/api/scan", async (IFormFile file) =>
{
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var results = BarcodeReader.Read(imageBytes, options);
return Results.Ok(results.Select(r => new
{
Value = r.Value,
Format = r.Format.ToString(),
}));
});
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
app.MapPost("/api/scan", Async Function(file As IFormFile) As Task(Of IResult)
Using stream = file.OpenReadStream()
Dim imageBytes(CInt(stream.Length) - 1) As Byte
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read(imageBytes, options)
Return Results.Ok(results.Select(Function(r) New With {
.Value = r.Value,
.Format = r.Format.ToString()
}))
End Using
End Function)
Référence de mappage de l'API SDK barKoder vers IronBarcode
Cette table mappe la surface MAUI / Xamarin de barKoder à l'appel équivalent Code-barres IronBarcode :
| API barKoder | Équivalent Code-barres IronBarcode |
|---|---|
| Licence définie via le portail barKoder / config | IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" |
Configuration DeBlur sur BarkoderView |
Speed = ReadingSpeed.ExtremeDetail |
Configuration multi-scan sur BarkoderView |
ExpectMultipleBarcodes = true |
SetEnabledBarcodeTypes(...) |
BarcodeEncoding.<Format> (détecté automatiquement lors de la lecture) |
BarkoderView.StartScanning(IBarkoderDelegate) |
BarcodeReader.Read("image.png") — synchrone |
BarcodeResult.TextualData |
result.Value |
BarcodeResult.BarcodeTypeName |
result.Format |
| Récupération des dommages de MatrixSight | ReadingSpeed.ExtremeDetail avec prétraitement ML |
| Entrée de cadre de caméra en direct | Chemin de fichier / Stream / entrée byte[] |
| Traitement sur l'appareil | Entièrement local — aucun appel réseau |
| Aucun support de génération | BarcodeWriter.CreateBarcode() / QRCodeWriter.CreateQrCode() |
| Prise en charge des fichiers PDF non disponible | BarcodeReader.Read("document.pdf") — natif |
| Aucun déploiement de serveur | Fonctionne avec ASP.NET Core, Docker, Azure Functions et Lambda. |
| Pas d'index de page (N/A) | result.PageNumber — disponible sur les lectures PDF |
Problèmes de migration courants et solutions
Problème 1 : Noms des paquets NuGet
barKoder SDK : Les packages .NET officiels sont Plugin.Maui.Barkoder et Barkoder.Xamarin. Aucun ne couvre les scénarios non-mobiles.
Solution: Installer IronBarcode:
dotnet add package BarCode
Si Plugin.Maui.Barkoder n'est plus nécessaire (vous passez complètement au traitement de fichiers / PDF / serveur), éliminez-le :
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
dotnet remove package Plugin.Maui.Barkoder
dotnet add package BarCode
Problème 2 : Entrée de cadre caméra vs Entrée de fichier
SDK barKoder : Tous les entrées arrivent sous forme de cadre de caméra en continu — un flux vidéo traité en continu sur l'appareil. Il n'y a pas de mode d'entrée de chemin de fichier.
Solution : Code-barres IronBarcode accepte les fichiers, les flux, les tableaux d'octets et les objets System.Drawing.Image. Pour les images téléchargées depuis un client mobile, lisez directement le flux de requêtes :
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
using var stream = file.OpenReadStream();
var imageBytes = new byte[stream.Length];
await stream.ReadAsync(imageBytes);
var results = BarcodeReader.Read(imageBytes, options);
Imports System.IO
Using stream = file.OpenReadStream()
Dim imageBytes = New Byte(stream.Length - 1) {}
Await stream.ReadAsync(imageBytes, 0, imageBytes.Length)
Dim results = BarcodeReader.Read(imageBytes, options)
End Using
Problème 3 : API basée sur les rappels vs résultat synchrone
barKoder SDK : BarkoderView.StartScanning(IBarkoderDelegate) utilise un modèle de délégué / rappel — DidFinishScanning(BarcodeResult[]) se déclenche de manière asynchrone lorsque des codes-barres sont détectés dans le flux de la caméra.
Solution : BarcodeReader.Read() d'IronBarcode est synchrone et retourne un IEnumerable<BarcodeResult> directement. Dans les contextes ASP.NET Core où l'asynchrone est requis, enveloppez dans Task.Run() :
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
var results = await Task.Run(() => BarcodeReader.Read(imageBytes, options));
Dim results = Await Task.Run(Function() BarcodeReader.Read(imageBytes, options))
Problème 4 : Configuration du mode de débruitage
barKoder SDK : DeBlur est activé sur la configuration BarkoderView avant le début de la numérisation et s'applique à toutes les numérisations suivantes.
Solution : Dans IronBarcode, l'équivalent est ReadingSpeed.ExtremeDetail défini par lecture via BarcodeReaderOptions. Créez l'objet d'options une seule fois et réutilisez-le :
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
var deepOptions = new BarcodeReaderOptions
{
Speed = ReadingSpeed.ExtremeDetail,
ExpectMultipleBarcodes = false,
};
// Reuse across multiple reads
var results = BarcodeReader.Read("image.png", deepOptions);
Imports System
Dim deepOptions As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.ExtremeDetail,
.ExpectMultipleBarcodes = False
}
' Reuse across multiple reads
Dim results = BarcodeReader.Read("image.png", deepOptions)
Problème 5 : Capacité de génération manquante
SDK barKoder : Barkoder est en lecture seule. Il n'existe pas d'API pour générer des codes-barres ou des codes QR.
Solution : Code-barres IronBarcode prend en charge à la fois la lecture et la génération. Utilisez BarcodeWriter pour les formats standards et QRCodeWriter pour les QR codes :
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
// Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500)
.SaveAsPng("product-qr.png");
// Get as bytes for embedding in API response or PDF
byte[] barcodeBytes = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128)
.ToPngBinaryData();
Imports System
' Standard barcode generation
BarcodeWriter.CreateBarcode("SHIP-20240315-00428", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
' QR code generation
QRCodeWriter.CreateQrCode("https://example.com/product/A42", 500) _
.SaveAsPng("product-qr.png")
' Get as bytes for embedding in API response or PDF
Dim barcodeBytes As Byte() = BarcodeWriter.CreateBarcode("INV-100291", BarcodeEncoding.Code128) _
.ToPngBinaryData()
Liste de contrôle de migration SDK barKoder
Tâches préalables à la migration
Auditez votre codebase pour les références barKoder :
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
grep -r "Barkoder\|BarkoderView\|IBarkoderDelegate\|BarcodeResult" --include="*.cs" .
grep -r "Plugin.Maui.Barkoder\|Barkoder.Xamarin" --include="*.csproj" .
grep -r "Barkoder" --include="*.xaml" .
Documenter les scénarios de codes-barres actuellement mis en œuvre ou prévus :
- Quels formats de codes-barres doivent être lus (Code128, DataMatrix, QR, PDF417, etc.)
- Si la récupération de code-barres endommagé est requise (
ReadingSpeed.ExtremeDetail) - Si la détection multi-code-barres est requise (
ExpectMultipleBarcodes = true) - Si la génération de code-barres est requise (
BarcodeWriter,QRCodeWriter) - Si le traitement des PDF est requis (
BarcodeReader.Read("doc.pdf")) - Cibles de déploiement (ASP.NET Core, Azure Functions, Docker, Lambda, application de bureau, MAUI)
Tâches de mise à jour du code
- Supprimez
Plugin.Maui.BarkoderouBarkoder.Xamarinde.csprojlà où ce n'est plus nécessaire - Installez le package NuGet
BarCode - Supprimez
using Barkoder.Maui;(ou l'équivalent Xamarin) là où ce n'est plus nécessaire - Ajoutez
using IronBarCode;à tous les fichiers de traitement de code-barres - Ajoutez
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";au démarrage de l'application - Remplacez les rappels
BarkoderView.StartScanning/DidFinishScanningparBarcodeReader.Read(filePath, options) - Mettez en correspondance
BarcodeResult.TextualDataavecresult.Value - Mettez en correspondance
BarcodeResult.BarcodeTypeNameavecresult.Format - Mettez en correspondance la configuration DeBlur avec
Speed = ReadingSpeed.ExtremeDetaildansBarcodeReaderOptions - Mettez en correspondance la configuration multi-scan avec
ExpectMultipleBarcodes = truedansBarcodeReaderOptions - Ajoutez des appels
BarcodeWriter.CreateBarcode()pour tout besoin de génération - Ajoutez des appels
QRCodeWriter.CreateQrCode()pour les besoins de génération de QR codes - Remplacez tout code de prétraitement PDF par
BarcodeReader.Read("document.pdf") - Enveloppez les appels
BarcodeReader.Read()synchrones dansTask.Run()pour les points de terminaison asynchrones ASP.NET Core
Test de post-migration
Après avoir effectué les mises à jour du code, vérifiez les points suivants :
- Confirmez que
BarcodeReader.Read()retourne des résultats pour tous les formats d'image utilisés (PNG, JPEG, TIFF, BMP) - Vérifiez que
ReadingSpeed.ExtremeDetailrécupère les codes-barres à partir des échantillons de la plus basse qualité de votre jeu de test - Confirmez que
ExpectMultipleBarcodes = trueretourne le bon nombre de codes-barres à partir de documents multi-code-barres - Tester la lecture des fichiers PDF avec toutes les versions PDF utilisées dans les flux de production documentaire.
- Vérifiez que la sortie de
BarcodeWriter.CreateBarcode()est scannable par vos lecteurs cibles - Vérifiez que la sortie de
QRCodeWriter.CreateQrCode()est scannable par les lecteurs de QR codes mobiles - Tester le point de terminaison ASP.NET Core (le cas échéant) avec des téléchargements de fichiers depuis des clients mobiles
- Vérifier le bon fonctionnement dans les cibles de déploiement Docker, Azure ou Lambda
- Exécuter des tests de bout en bout couvrant l'intégralité du cycle lecture-traitement-génération, le cas échéant.
Principaux avantages de la migration vers IronBarcode
Une Plateforme Qui Couvre le .NET Non-Caméra : Code-barres IronBarcode s'installe depuis NuGet et fonctionne dans tout projet .NET — ASP.NET Core, Azure Functions, Lambda, Docker, console, travailleur, WPF, WinForms, Avalonia, Blazor, et MAUI de même. Le Plugin.Maui.Barkoder de Barkoder couvre uniquement l'interface utilisateur de la caméra dans un mode tête d'application mobile MAUI ; Code-barres IronBarcode couvre tout le reste.
Lecture Tolérante Aux Dommages Sans Caméra : Les capacités qui ont rendu Barkoder convaincant — DeBlur, MatrixSight, récupération des dommages — sont présentes dans Code-barres IronBarcode à travers ReadingSpeed.ExtremeDetail et le prétraitement d'image basé sur ML. Code-barres IronBarcode offre les mêmes améliorations de précision que Barkoder obtient sur les flux vidéo en direct, qu'il s'agisse de fichiers, de documents numérisés ou d'images téléchargées.
Flux de travail complet de lecture et de génération : Barkoder est en lecture seule. Code-barres IronBarcode permet à la fois la lecture et la génération de codes-barres dans plus de 50 formats, le tout dans un seul et même package. Les équipes qui ont besoin de générer des étiquettes d'expédition, de créer des codes QR pour les emballages ou d'intégrer des codes-barres dans des documents n'ont pas besoin d'une deuxième bibliothèque.
Prise en charge native des PDF : La lecture des codes-barres à partir de documents PDF (factures, manifestes, dossiers médicaux, documents de conformité) est une fonctionnalité de premier ordre Code-barres IronBarcode . Aucune extraction d'image intermédiaire, aucun appel API par page et aucune dépendance supplémentaire. Un PDF multi-pages est traité en un seul appel BarcodeReader.Read().
Déploiement complet côté serveur : Code-barres IronBarcode fonctionne sous ASP.NET Core, Azure Functions, AWS Lambda, dans les conteneurs Docker et dans tout autre environnement d'hébergement .NET . Il traite les codes-barres localement, sans appel réseau, sans gestion de clés API et sans latence liée à un service distant. Le traitement d'un seul code-barres ou d'un million coûte le même prix : il n'y a pas de frais par requête.
Tarification perpétuelle prévisible : Code-barres IronBarcode est disponible sous forme de licence perpétuelle unique à partir de 749 $ pour un seul développeur, sans frais par requête, sans limite de volume et sans renouvellement d'abonnement. Pour les équipes qui développent des applications de production traitant des codes-barres à grande échelle, le modèle de coûts est simple et prévisible.
Questions Fréquemment Posées
Pourquoi devrais-je migrer du SDK de Barkoder 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 Barkoder 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 du SDK de Barkoder 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 garder les deux SDK Barkoder 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 au SDK de Barkoder ?
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 BarCode ?
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 propriétés de résultat changent lors de la migration du SDK de Barkoder 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.

