Passer au contenu du pied de page
VIDéOS

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
SHELL

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
$vbLabelText   $csharpLabel

É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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
SHELL

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
$vbLabelText   $csharpLabel

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))
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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()
$vbLabelText   $csharpLabel

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" .
SHELL

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

  1. Supprimez Plugin.Maui.Barkoder ou Barkoder.Xamarin de .csproj là où ce n'est plus nécessaire
  2. Installez le package NuGet BarCode
  3. Supprimez using Barkoder.Maui; (ou l'équivalent Xamarin) là où ce n'est plus nécessaire
  4. Ajoutez using IronBarCode; à tous les fichiers de traitement de code-barres
  5. Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; au démarrage de l'application
  6. Remplacez les rappels BarkoderView.StartScanning / DidFinishScanning par BarcodeReader.Read(filePath, options)
  7. Mettez en correspondance BarcodeResult.TextualData avec result.Value
  8. Mettez en correspondance BarcodeResult.BarcodeTypeName avec result.Format
  9. Mettez en correspondance la configuration DeBlur avec Speed = ReadingSpeed.ExtremeDetail dans BarcodeReaderOptions
  10. Mettez en correspondance la configuration multi-scan avec ExpectMultipleBarcodes = true dans BarcodeReaderOptions
  11. Ajoutez des appels BarcodeWriter.CreateBarcode() pour tout besoin de génération
  12. Ajoutez des appels QRCodeWriter.CreateQrCode() pour les besoins de génération de QR codes
  13. Remplacez tout code de prétraitement PDF par BarcodeReader.Read("document.pdf")
  14. Enveloppez les appels BarcodeReader.Read() synchrones dans Task.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.ExtremeDetail récupère les codes-barres à partir des échantillons de la plus basse qualité de votre jeu de test
  • Confirmez que ExpectMultipleBarcodes = true retourne 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.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi