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;
}
}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
NextIronBarcode 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}");
}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}")
NextComparaison 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
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
É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;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"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");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]);
}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 IfApproche IronBarcode :
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 IfLe 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);
}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)
NextApproche 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();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);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);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");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);
}
}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
NextApproche IronBarcode :
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}")
NextIronBarcode 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;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()?.ValueProblè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" .
Ne supprimez le paquet que lorsque toutes les références sont effacées :
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" .
- 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 .

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.