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
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
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
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
É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
É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"
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")
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
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
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
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()
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)
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)
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")
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
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
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
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" .
Ne supprimez le paquet que lorsque toutes les références sont effacées :
dotnet remove package Spire.PDF
dotnet remove package Spire.PDF
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" .
- 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 deScan()et nécessiteront des mises à jour de type - Confirmez si
Spire.PDFest utilisé pour des opérations autres que l'extraction de codes-barres
Tâches de mise à jour du code
- Supprimez le package NuGet
FreeSpire.BarcodeouSpire.Barcode - Supprimez le package NuGet
Spire.PDFsi l'extraction de codes-barres était son seul usage - Installez le package NuGet
IronBarcode - Remplacez tout
using Spire.Barcode;parusing IronBarCode; - Supprimez toutes les importations
using Spire.Pdf;là où elles ne sont plus nécessaires - Remplacez l'initialisation de la licence :
ApplyKey()ouSetLicenseKey()parIronBarCode.License.LicenseKey = "key" - Supprimez toutes les instanciations
new BarcodeScanner() - Remplacez tous les appels
scanner.Scan(path, BarCodeType.X)parBarcodeReader.Read(path) - Supprimez les boucles foreach qui devinent le type ; remplacez chacun par un seul appel
BarcodeReader.Read() - Supprimer les blocs d'itération de page PDF et d'extraction d'images ; remplacez par
BarcodeReader.Read("file.pdf") - Mettez à jour les affectations de résultat
string[]pour utiliser.Valueou.Select(r => r.Value).ToArray() - Remplacez les blocs
new BarcodeSettings()par des chaînesBarcodeWriter.CreateBarcode(data, encoding) - Supprimez les instanciations
new BarCodeGenerator(settings) - Remplacez
.GenerateImage()+image.Save()par.SaveAsPng()ou.SaveAsJpeg() - Remplacez les valeurs d'énumération
BarCodeType.Xdans la génération parBarcodeEncoding.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 .
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.

