IRONSOFTWAREHOME
VIDÉOS

Passer de Spire.Barcode à IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 août 2026

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;
    }
}

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}");
}

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

FonctionSpire.BarcodeCode-barres IronBarcode
Détection automatique du formatNonOui
Paramètre BarCodeType requisOuiNon
Format des métadonnées dans le résultatNonOui
Lecture native de PDFNon (nécessite Spire.PDF)Oui
Bibliothèque supplémentaire pour PDFSpire.PDF (licence séparée)None
performances de lecture du niveau gratuitDégradé intentionnellementPleine vitesse
filigranes du niveau gratuitGrand format, couvre le code-barresPetit, bord seulement
symbologies de niveau gratuit~20 typesPlus de 50 types
Inscription au niveau gratuitOuiNon
Modèle d'API de générationObjet Paramètres + générateurUsine statique avec chaîne fluide
Code QR avec logo personnaliséNiveau commercial uniquementTous les niveaux
Type de retour de la lecturestring[]BarcodeResults (avec métadonnées de type)
Nombre de symboles39+ (commercial)50 ans et plus
Modèle de licenceLicence perpétuelle par utilisateur + abonnementPerpé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
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
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;

É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";

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");

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]);
}

Approche IronBarcode :

using IronBarCode;

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

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

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);
}

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();

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);

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);

Approche IronBarcode :

using 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);
    }
}

Approche IronBarcode :

using IronBarCode;

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

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

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.BarcodeCode-barres IronBarcodeNotes
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 automatiqueAucun équivalent requis
BarCodeType.QRCode (requis)Détection automatiqueAucun équivalent requis
string[] results de Scan()collection BarcodeResultsAccédez aux valeurs via .Value
results[0] (chaîne de caractères)results[0].Value
Format inconnu sur le résultatresult.FormatType inclus dans l'objet de résultat
new BarcodeSettings()Paramètres sur CreateBarcode()Aucun objet de configuration nécessaire
settings.Type = BarCodeType.XBarcodeEncoding.X comme deuxième paramètre
settings.Data = "value"Premier paramètre de CreateBarcode()
new BarCodeGenerator(settings)Pas nécessaireL'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écessairePrise 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;

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

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

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" .
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 noter: Spire 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.
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 et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise