Passer au contenu du pied de page
VIDéOS

Comment utiliser un scanner de code-barres dans Blazor | IronBarcode

Passer de Spire.Barcode à IronBarcode

Spire.Barcode's BarcodeScanner.Scan() nécessite un argument BarCodeType à chaque appel. À mesure qu'une base de code s'étoffe pour gérer diverses sources de documents, de nouvelles étiquettes de fournisseurs et de nouveaux formats de codes-barres, cette conception génère des boucles de devinettes de type qui augmentent les coûts de maintenance au fil du temps. Ce guide décrit la transition complète de Spire.Barcode vers IronBarcode: les raisons qui motivent cette migration, les étapes techniques à suivre et les modèles de code avant et après migration pour chaque opération courante.

Pourquoi migrer depuis Spire.Barcode ?

Dépense supplémentaire de spécification de format : Chaque appel à BarcodeScanner.Scan() dans Spire.Barcode nécessite une valeur d'énumération BarCodeType que le code appelant doit fournir. Les applications qui traitent les codes-barres provenant de sources inconnues ou de formats mixtes doivent conserver une liste de types possibles et la parcourir jusqu'à ce qu'une correspondance soit trouvée. Chaque format ajouté au flux de travail nécessite la mise à jour du tableau des candidats, le test de la logique de détection et la confirmation que l'ordre d'itération n'entraîne pas l'occultation d'un format par un autre. Ces frais généraux augmentent proportionnellement à la diversité des formats.

Contraintes de l'évaluation du niveau gratuit : FreeSpire.Barcode dégrade intentionnellement les performances de lecture et limite l'ensemble de symbologie disponible par rapport au produit commercial. Les tests de performance et de couverture de format effectués lors d'une évaluation de FreeSpire.Barcode ne représentent pas le comportement commercial de Spire.Barcode. Les équipes qui s'engagent à effectuer un achat sur la base d'une évaluation gratuite peuvent découvrir après l'achat que le produit se comporte différemment en production, notamment en ce qui concerne le débit et les symbologies prises en charge.

PDF nécessitant deux bibliothèques : Spire.Barcode ne peut pas lire directement les codes-barres des fichiers PDF. Les workflows basés sur des PDF nécessitent le package Spire.PDF distinct avec sa propre licence, plus un code écrit par le développeur pour itérer les pages, extraire les images de chaque page, et transmettre ces images au scanner de code-barres. Une tâche qui relève conceptuellement de la lecture de codes-barres est répartie entre deux produits, deux accords de licence et une infrastructure de code importante.

Complexité du type de retour : BarcodeScanner.Scan() retourne string[], qui contient uniquement des valeurs décodées. Le format du code-barres détecté n'est pas inclus dans le retour. Les applications qui doivent acheminer les résultats par format (par exemple, en envoyant les valeurs de code QR à un processeur et les valeurs Code128 à un autre) doivent conserver une variable de type distincte dérivée de l'étape d'itération qui a produit le résultat, créant ainsi une gestion d'état supplémentaire au-delà de la numérisation elle-même.

Le problème fondamental

La boucle d'estimation du type est le symptôme le plus visible de la contrainte BarCodeType obligatoire. Dans un code source Spire.Barcode traitant des documents provenant de sources multiples, ce schéma apparaît de manière répétée :

// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
// Spire.Barcode: growing candidate loop with silent misses
BarcodeScanner scanner = new BarcodeScanner();
var candidates = new[] { BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417 };

string foundValue = null;
foreach (var type in candidates)
{
    string[] found = scanner.Scan("barcode.png", type);
    if (found.Length > 0)
    {
        foundValue = found[0];
        break;
    }
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates = {BarCodeType.Code128, BarCodeType.QRCode, BarCodeType.DataMatrix, BarCodeType.EAN13, BarCodeType.PDF417}

Dim foundValue As String = Nothing
For Each type In candidates
    Dim found As String() = scanner.Scan("barcode.png", type)
    If found.Length > 0 Then
        foundValue = found(0)
        Exit For
    End If
Next
$vbLabelText   $csharpLabel

IronBarcode supprime entièrement la boucle. La détection du format est intégrée à la bibliothèque :

// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: single call, all formats, type included in result
var results = BarcodeReader.Read("barcode.png");

foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarcode

' IronBarcode: single call, all formats, type included in result
Dim results = BarcodeReader.Read("barcode.png")

For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Comparaison des fonctionnalités Code-barres IronBarcode et de Spire.Barcode

Fonction Spire.Barcode Code-barres IronBarcode
Détection automatique du format Non Oui
Paramètre BarCodeType requis Oui Non
Format des métadonnées dans le résultat Non Oui
Lecture native de PDF Non (nécessite Spire.PDF) Oui
Bibliothèque supplémentaire pour PDF Spire.PDF (licence séparée) None
performances de lecture du niveau gratuit Dégradé intentionnellement Pleine vitesse
filigranes du niveau gratuit Grand format, couvre le code-barres Petit, bord seulement
symbologies de niveau gratuit ~20 types Plus de 50 types
Inscription au niveau gratuit Oui Non
Modèle d'API de génération Objet Paramètres + générateur Usine statique avec chaîne fluide
Code QR avec logo personnalisé Niveau commercial uniquement Tous les niveaux
Type de retour de la lecture string[] BarcodeResults (avec métadonnées de type)
Nombre de symboles 39+ (commercial) 50 ans et plus
Modèle de licence Licence perpétuelle par utilisateur + abonnement Perpétuel avec renouvellement optionnel

Démarrage rapide

Étape 1 : Remplacer le package NuGet

Supprimez le ou les packages Spire actuellement utilisés :

# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
# Remove whichever variant is installed
dotnet remove package FreeSpire.Barcode
# or
dotnet remove package Spire.Barcode

# If Spire.PDF was installed only for barcode extraction, remove it as well
dotnet remove package Spire.PDF
SHELL

Si Spire.PDF est utilisé pour d'autres opérations documentaires au-delà de l'extraction de code-barres, conservez-le et retirez uniquement les chemins de code liés aux codes-barres.

Installer IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Étape 2 : Mise à jour des espaces de noms

Remplacez toutes les importations de namespace Spire par le namespace Code-barres IronBarcode :

// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
// Remove:
using Spire.Barcode;
using Spire.Pdf;

// Add:
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Étape 3 : initialisation de la licence

Remplacez l'initialisation de la licence Spire par une simple attribution de propriété Code-barres IronBarcode au démarrage de l'application. Consultez la page relative aux licences IronBarcode pour connaître les formats de clés et les options de déploiement :

// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key");

// Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key");

// Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove (FreeSpire registration):
Spire.Barcode.BarcodeSettings.ApplyKey("your-free-key")

' Remove (commercial Spire license):
Spire.License.LicenseProvider.SetLicenseKey("your-commercial-key")

' Add (IronBarcode):
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Pour les environnements Docker et CI, la clé de licence peut être fournie à partir d'une variable d'environnement :

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Exemples de migration de code

Lecture d'un code-barres de format connu

Une lecture à format unique dans Spire.Barcode passe le type explicitement et reçoit un string[].

Approche Spire.Barcode :

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("shipping-label.png", BarCodeType.Code128);

if (results.Length > 0)
{
    ProcessShipment(results[0]);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("shipping-label.png", BarCodeType.Code128)

If results.Length > 0 Then
    ProcessShipment(results(0))
End If
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
using IronBarCode;

var results = BarcodeReader.Read("shipping-label.png");

if (results.Any())
{
    ProcessShipment(results.First().Value);
}
Imports IronBarCode

Dim results = BarcodeReader.Read("shipping-label.png")

If results.Any() Then
    ProcessShipment(results.First().Value)
End If
$vbLabelText   $csharpLabel

Le paramètre BarCodeType est supprimé. Si la logique en aval doit confirmer le format détecté, results.First().Format le fournit sans nécessiter de variable d'état distincte.

Réduction d'une boucle de type à format mixte

Lorsqu'un code source Spire.Barcode gère des documents pouvant contenir plusieurs formats, la boucle de devinette de type s'accumule au fil du temps à mesure que de nouveaux formats intègrent le flux de travail.

Approche Spire.Barcode :

using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
using Spire.Barcode;

BarcodeScanner scanner = new BarcodeScanner();
BarCodeType[] candidates = new[]
{
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
};

List<string> allValues = new List<string>();
foreach (BarCodeType type in candidates)
{
    string[] found = scanner.Scan("document-scan.png", type);
    allValues.AddRange(found);
}
Imports Spire.Barcode

Dim scanner As New BarcodeScanner()
Dim candidates As BarCodeType() = {
    BarCodeType.Code128,
    BarCodeType.QRCode,
    BarCodeType.DataMatrix,
    BarCodeType.EAN13,
    BarCodeType.PDF417
}

Dim allValues As New List(Of String)()
For Each type As BarCodeType In candidates
    Dim found As String() = scanner.Scan("document-scan.png", type)
    allValues.AddRange(found)
Next
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
using IronBarCode;

// The entire loop is replaced by a single call
var results = BarcodeReader.Read("document-scan.png");
List<string> allValues = results.Select(r => r.Value).ToList();
Imports IronBarCode

' The entire loop is replaced by a single call
Dim results = BarcodeReader.Read("document-scan.png")
Dim allValues As List(Of String) = results.Select(Function(r) r.Value).ToList()
$vbLabelText   $csharpLabel

Le système de lecture d'images d'IronBarcode gère plus de 50 symbologies en une seule passe. Lorsque la vitesse de lecture doit être ajustée pour un traitement par lots à haut volume, BarcodeReaderOptions fournit ce contrôle sans ajouter de branches spécifiques au format :

var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var results = BarcodeReader.Read("document-scan.png", options);
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim results = BarcodeReader.Read("document-scan.png", options)
$vbLabelText   $csharpLabel

Pour des conseils sur le choix de la valeur appropriée ReadingSpeed, consultez la documentation des options de vitesse de lecture.

Générer un code-barres

La génération Spire.Barcode nécessite l'instanciation d'un objet BarcodeSettings, l'attribution de chaque propriété individuellement, le passage des paramètres à un BarCodeGenerator, puis l'appel de GenerateImage() avant que tout fichier ne soit écrit.

Approche Spire.Barcode :

using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
using Spire.Barcode;

BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "SHIP-9842-XZ";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;

BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("shipping-label.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "SHIP-9842-XZ"
settings.ShowText = True
settings.TextMargin = 5
settings.BarHeight = 60
settings.Unit = GraphicsUnit.Pixel

Dim generator As New BarCodeGenerator(settings)
Dim barcodeImage As Image = generator.GenerateImage()
barcodeImage.Save("shipping-label.png", ImageFormat.Png)
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("SHIP-9842-XZ", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")
$vbLabelText   $csharpLabel

L'objet mutable BarcodeSettings et l'instance BarCodeGenerator distincte sont remplacés par un seul appel de fabrique statique avec une chaîne fluide. Il n'y a pas de risque que les paramètres soient partagés accidentellement entre les appels concurrents car chaque invocation CreateBarcode() est indépendante.

Lecture des codes-barres dans un document PDF

Spire.Barcode ne peut pas lire directement les fichiers PDF. L'approche basée sur Spire exige le package Spire.PDF distinct pour ouvrir le fichier, analyser ses pages, extraire des images raster de chaque page, et ensuite passer ces images une à une au scanner de codes-barres.

Approche Spire.Barcode :

using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
using Spire.Pdf;
using Spire.Barcode;

var pdf = new PdfDocument();
pdf.LoadFromFile("invoices.pdf");

var scanner = new BarcodeScanner();
var extractedValues = new List<string>();

foreach (PdfPageBase page in pdf.Pages)
{
    Image[] images = page.ExtractImages();
    foreach (Image image in images)
    {
        string[] found = scanner.Scan(image, BarCodeType.QRCode);
        extractedValues.AddRange(found);
    }
}
Imports Spire.Pdf
Imports Spire.Barcode

Dim pdf As New PdfDocument()
pdf.LoadFromFile("invoices.pdf")

Dim scanner As New BarcodeScanner()
Dim extractedValues As New List(Of String)()

For Each page As PdfPageBase In pdf.Pages
    Dim images() As Image = page.ExtractImages()
    For Each image As Image In images
        Dim found() As String = scanner.Scan(image, BarCodeType.QRCode)
        extractedValues.AddRange(found)
    Next
Next
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
using IronBarCode;

var results = BarcodeReader.Read("invoices.pdf");

foreach (var barcode in results)
{
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}");
}
Imports IronBarCode

Dim results = BarcodeReader.Read("invoices.pdf")

For Each barcode In results
    Console.WriteLine($"Page {barcode.PageNumber}: {barcode.Format} = {barcode.Value}")
Next
$vbLabelText   $csharpLabel

IronBarcode lit directement les documents PDF sans nécessiter Spire.PDF ni aucune gestion manuelle des pages. Le numéro de page à partir duquel chaque code-barres a été extrait est disponible dans l'objet résultat. Une fois que le code de lecture PDF est remplacé, la référence au package Spire.PDF et toutes les importations using Spire.Pdf; peuvent être retirées du projet.

Référence de correspondance entre l'API Spire.Barcode et IronBarcode

Spire.Barcode Code-barres IronBarcode Notes
new BarcodeScanner() BarcodeReader.Read() (statique) Aucune instance de scanner nécessaire
scanner.Scan(path, BarCodeType.X) BarcodeReader.Read(path) Paramètre de type supprimé
BarCodeType.Code128 (requis) Détection automatique Aucun équivalent requis
BarCodeType.QRCode (requis) Détection automatique Aucun équivalent requis
string[] results de Scan() collection BarcodeResults Accédez aux valeurs via .Value
results[0] (chaîne de caractères) results[0].Value
Format inconnu sur le résultat result.Format Type inclus dans l'objet de résultat
new BarcodeSettings() Paramètres sur CreateBarcode() Aucun objet de configuration nécessaire
settings.Type = BarCodeType.X BarcodeEncoding.X comme deuxième paramètre
settings.Data = "value" Premier paramètre de CreateBarcode()
new BarCodeGenerator(settings) Pas nécessaire L'usine statique la remplace
generator.GenerateImage() .SaveAsPng() / .SaveAsJpeg() Méthodes de sortie spécifiques au format
BarcodeSettings.ApplyKey("key") IronBarCode.License.LicenseKey = "key" Définir une fois au démarrage
Spire.License.LicenseProvider.SetLicenseKey("key") IronBarCode.License.LicenseKey = "key" Même remplacement à une seule ligne
Spire.PDF (pour la lecture de PDF) Pas nécessaire Prise en charge native du format PDF intégrée

Problèmes de migration courants et solutions

Problème 1 : Suppression du paramètre BarCodeType

Spire.Barcode : scanner.Scan(path, BarCodeType.Code128) — le type d'argument est requis par la signature de la méthode. Sa suppression provoque une erreur de compilation.

Solution : Remplacez l'appel entier par BarcodeReader.Read(path). Recherchez dans le code source BarCodeType. pour localiser chaque occurrence. Les boucles d'estimation de type (blocs foreach itérant sur un tableau de candidats BarCodeType[]) peuvent être supprimées dans leur intégralité ; un seul appel BarcodeReader.Read() remplace la boucle.

Problème 2 : Type de retour string[]

Spire.Barcode: Scan() returns string[]. Le code en aval qui assigne cela à une variable string[] ou le passe à une méthode attendant string[] échouera à la compilation après la migration.

Solution : Mettez à jour les sites d'appel pour travailler avec BarcodeResults. Pour obtenir un tableau de chaînes de caractères simple, utilisez .Select(r => r.Value).ToArray(). Pour accéder au premier résultat, utilisez .First()?.Value. Si le format détecté est nécessaire en aval, il est disponible sur l'objet résultat via .Format — aucune variable d'état distincte n'est requise.

// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
// If a plain string array is needed:
string[] texts = BarcodeReader.Read("barcode.png")
    .Select(r => r.Value)
    .ToArray();

// If only the first value is needed:
string first = BarcodeReader.Read("barcode.png").First()?.Value;
Imports System.Linq

' If a plain string array is needed:
Dim texts As String() = BarcodeReader.Read("barcode.png") _
    .Select(Function(r) r.Value) _
    .ToArray()

' If only the first value is needed:
Dim first As String = BarcodeReader.Read("barcode.png").FirstOrDefault()?.Value
$vbLabelText   $csharpLabel

Problème n° 3 : Nettoyage du package Spire.PDF

Spire.Barcode : Les workflows de lecture de PDF dépendent de Spire.PDF pour l'accès aux pages et l'extraction d'images. Le projet référence le package et contient des importations using Spire.Pdf; et l'utilisation de PdfDocument / PdfPageBase répartis sur plusieurs fichiers.

Solution : Après avoir remplacé tout le code d'extraction de codes-barres PDF par BarcodeReader.Read("file.pdf"), effectuez un audit grep pour confirmer qu'il n'y a plus de références Spire.Pdf avant de supprimer le package :

grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "Spire\.Pdf\|PdfPageBase\|ExtractImages" --include="*.cs" .
SHELL

Ne supprimez le paquet que lorsque toutes les références sont effacées :

dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
SHELL

Problème n° 4 : Modifications des espaces de noms

Spire.Barcode : L'espace de noms Spire.Barcode contient BarcodeScanner, BarcodeSettings, BarCodeGenerator, et BarCodeType. L'espace de noms IronBarCode contient BarcodeReader, BarcodeWriter, BarcodeEncoding, et BarcodeReaderOptions.

Solution : Remplacez using Spire.Barcode; par using IronBarCode; globalement. L'énum BarCodeType utilisé dans la génération est remplacé par BarcodeEncoding. L'énum BarCodeType utilisé dans la lecture n'a pas d'équivalent Code-barres IronBarcode — il est simplement supprimé, car la détection de format est automatique.

Liste de contrôle pour la migration Spire.Barcode

Tâches préalables à la migration

Avant d'apporter des modifications, auditez le code source afin d'identifier toutes les utilisations de Spire.Barcode :

grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
grep -r "using Spire.Barcode" --include="*.cs" .
grep -r "using Spire.Pdf" --include="*.cs" .
grep -r "BarcodeScanner\|BarcodeSettings\|BarCodeGenerator\|BarCodeType\." --include="*.cs" .
grep -r "ApplyKey\|SetLicenseKey" --include="*.cs" .
grep -r "ExtractImages\|PdfPageBase" --include="*.cs" .
SHELL
  • Documentez tous les fichiers contenant des tableaux de candidats BarCodeType (boucles d'estimation de type à supprimer)
  • Identifiez toutes les variables string[] qui reçoivent des résultats de Scan() et nécessiteront des mises à jour de type
  • Confirmez si Spire.PDF est utilisé pour des opérations autres que l'extraction de codes-barres

Tâches de mise à jour du code

  1. Supprimez le package NuGet FreeSpire.Barcode ou Spire.Barcode
  2. Supprimez le package NuGet Spire.PDF si l'extraction de codes-barres était son seul usage
  3. Installez le package NuGet IronBarcode
  4. Remplacez tout using Spire.Barcode; par using IronBarCode;
  5. Supprimez toutes les importations using Spire.Pdf; là où elles ne sont plus nécessaires
  6. Remplacez l'initialisation de la licence : ApplyKey() ou SetLicenseKey() par IronBarCode.License.LicenseKey = "key"
  7. Supprimez toutes les instanciations new BarcodeScanner()
  8. Remplacez tous les appels scanner.Scan(path, BarCodeType.X) par BarcodeReader.Read(path)
  9. Supprimez les boucles foreach qui devinent le type ; remplacez chacun par un seul appel BarcodeReader.Read()
  10. Supprimer les blocs d'itération de page PDF et d'extraction d'images ; remplacez par BarcodeReader.Read("file.pdf")
  11. Mettez à jour les affectations de résultat string[] pour utiliser .Value ou .Select(r => r.Value).ToArray()
  12. Remplacez les blocs new BarcodeSettings() par des chaînes BarcodeWriter.CreateBarcode(data, encoding)
  13. Supprimez les instanciations new BarCodeGenerator(settings)
  14. Remplacez .GenerateImage() + image.Save() par .SaveAsPng() ou .SaveAsJpeg()
  15. Remplacez les valeurs d'énumération BarCodeType.X dans la génération par BarcodeEncoding.X

Test de post-migration

  • Confirmez que tous les formats précédemment analysés via la boucle de candidats sont détectés correctement par BarcodeReader.Read()
  • Mesurer le débit du traitement par lots et confirmer qu'il répond aux exigences de production
  • Vérifier que l'extraction des codes-barres PDF produit des valeurs et des numéros de page corrects.
  • Vérifier la qualité et la lisibilité des codes-barres générés à l'aide d'un scanner physique ou logiciel.
  • Vérifiez que la clé de licence est correctement chargée dans tous les environnements de déploiement (local, préproduction, production, CI/CD).
  • Exécutez les commandes d'audit grep des tâches de pré-migration pour confirmer qu'il ne reste aucune référence à Spire.

Principaux avantages de la migration vers IronBarcode

Élimination des coûts liés à la maintenance des formats : après la migration, il n'y a plus de liste de types candidats à maintenir ni de boucle de devinette de type à mettre à jour lorsqu'un nouveau format de code-barres entre dans le flux de travail. BarcodeReader.Read() gère l'ensemble complet des symbologies automatiquement, et le format détecté est inclus dans chaque objet de résultat pour le routage en aval.

Évaluation précise avant engagement : la version d'essai Code-barres IronBarcode s'exécute à partir du même fichier binaire que le produit sous licence, à pleine vitesse de lecture et avec l'ensemble complet de symbologie. Les tests de performance et de couverture de format réalisés lors de l'évaluation préliminaire sont directement transposés en production. Les équipes peuvent prendre une décision d'achat en ayant l'assurance que le comportement évalué sera bien le comportement déployé.

Support PDF à package unique : L'extraction de code-barres à partir de fichiers PDF est gérée par le même appel BarcodeReader.Read() utilisé pour les images. Aucune bibliothèque secondaire, aucune licence supplémentaire et aucun code d'itération de page de manuel ne sont requis. Les équipes qui maintenaient précédemment à la fois Spire.Barcode et Spire.PDF se réduisent à une seule dépendance pour l'ensemble du workflow de codes-barres.

Objets Résultat avec Métadonnées de Format : Chaque entrée dans une collection BarcodeResults porte la valeur décodée, la symbologie détectée, le numéro de page source pour les entrées PDF, et la région de délimitation au sein de l'image source. Les applications qui doivent router, filtrer ou consigner par format disposent de ces informations dans le résultat sans gestion d'état supplémentaire.

API de génération simplifiée : Le modèle de fabrique statique dans BarcodeWriter.CreateBarcode() supprime l'objet mutable BarcodeSettings et l'instance BarCodeGenerator séparée. Chaque appel de génération est autonome, réduisant ainsi le risque de contamination de la configuration entre les opérations simultanées.

Compatibilité ascendante : Code-barres IronBarcode reçoit des mises à jour régulières alignées sur les versions du runtime .NET . À mesure que l'adoption de .NET 10 augmente jusqu'en 2026, les mises à jour de compatibilité garantissent que les bases de code migrées continuent de se compiler et de s'exécuter sans nécessiter de modifications de bibliothèque à chaque nouvelle version de .NET .

Veuillez noterSpire est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par, ou sponsorisé par e-iceblue. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Questions Fréquemment Posées

Pourquoi devrais-je migrer de Spire.Barcode 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 API de Spire.Barcode par IronBarcode ?

Remplacer la création d'instance et le modèle de licence par IronBarCode.License.LicenseKey = "key". Remplacer les appels au lecteur par BarcodeReader.Read(path) et les appels à l'écrivain par BarcodeWriter.CreateBarcode(data, encoding). Les méthodes statiques ne nécessitent aucune gestion d'instance.

Quelle quantité de code change lors de la migration de Spire.Barcode 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 logiciels Spire.Barcode 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 à Spire.Barcode ?

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 Spire.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 de Spire.Barcode 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