Spire.Barcode vs IronBarcode : Comparaison de la bibliothèque BarCode C#
BarCode requiert le type de code-barres lors de la lecture : scanner.Scan(path, BarCodeType.Code128). Si vous traitez des documents dont les codes-barres entrants peuvent être de n'importe quel format, vous devez écrire une boucle de détection de format avant de pouvoir extraire une valeur. Ce choix concernant l'API influence considérablement la manière dont vous créez des flux de travail de lecture de codes-barres avec Spire.Barcode ; il est donc important de le comprendre avant de vous y engager.
Comprendre Spire.Barcode
Spire.Barcode est une bibliothèque commerciale de codes-barres .NET développée par E-iceblue, une société de logiciels chinoise qui produit également les gammes de produits Spire.Doc, Spire.XLS et Spire.PDF. La bibliothèque prend en charge la génération et la lecture de codes-barres pour une gamme de symbologies 1D et 2D et est conçue pour s'intégrer à l'écosystème de traitement de documents E-iceblue.
E-iceblue publie deux paquets : FreeSpire.Barcode gratuitement et Spire.Barcode en tant que produit commercial. Le forfait gratuit est un produit à capacité limitée permanente et assorti de restrictions intentionnelles, et non un essai à durée limitée. Le pack commercial débloque l'ensemble complet des symboles et supprime les restrictions présentes dans la version gratuite, mais nécessite l'achat d'une licence distincte pour tout autre produit Spire utilisé.
Les principales caractéristiques architecturales de Spire.Barcode sont les suivantes :
- Paramètre BarCodeType obligatoire: Chaque appel à
BarcodeScanner.Scan()nécessite une valeur d'énumérationBarCodeType. Il n'existe aucune surcharge qui accepte uniquement un chemin de fichier et effectue une détection automatique du format. - Modèle de génération d'objets de paramétrage : La génération de BarCodes est centrée sur un objet
BarcodeSettingsmutable qui est transmis à une instanceBarCodeGenerator, nécessitant de multiples affectations de propriétés avant qu'une quelconque sortie ne soit produite. - Absence de prise en charge native des fichiers PDF : Spire.Barcode ne peut pas lire directement les codes-barres à partir de fichiers PDF. Les flux de travail basés sur le PDF nécessitent un paquetage
Spire.PDFdistinct, une licence distincte et un code d'extraction manuelle de pages et d'images écrit par le développeur. - Limitations de la version gratuite de FreeSpire.Barcode : La version gratuite applique de grands filigranes d'évaluation aux codes-barres générés, dégrade intentionnellement les performances de numérisation, limite l'ensemble de symbologie disponible et exige une clé d'enregistrement obtenue auprès d'E-iceblue avant que les boîtes de dialogue d'avertissement ne soient supprimées.
- Intégration à l'écosystème E-iceblue : les équipes utilisant déjà Spire.Doc ou Spire.XLS pourraient trouver avantageux la familiarité avec l'API et les tarifs groupés potentiels. Les équipes utilisant Spire.Barcode de manière isolée supportent le coût total de chaque licence produit sans bénéficier des avantages de l'écosystème.
- Type de retour:
BarcodeScanner.Scan()renvoiestring[], qui ne contient pas de métadonnées de format. Le type détecté n'est pas inclus dans le résultat.
Exigences relatives aux spécifications de type
Le BarcodeScanner.Scan() de BarCode n'a pas de surcharge qui accepte seulement un chemin de fichier. Chaque opération de lecture exige que le code appelant déclare le format du code-barres à l'avance. Pour les flux de travail à format unique, cela fonctionne, mais pour le traitement de documents à formats mixtes, cela produit une boucle d'itération potentielle :
// Spire.Barcode: multi-format detection requires a guessing loop
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: multi-format detection requires a guessing loop
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
Chaque type ajouté au tableau des candidats correspond à une passe d'analyse supplémentaire. Tout format absent de la liste est ignoré sans que cela ne soit pris en compte. Le développeur est responsable de la tenue d'un inventaire exhaustif des types et de la réalisation de nouveaux tests chaque fois qu'un nouveau format est intégré au flux de travail.
Comprendre IronBarcode
IronBarcode est une bibliothèque commerciale de codes-barres .NET développée par Iron Software. Il assure à la fois la lecture et la génération de codes-barres via un modèle d'API statique qui élimine le besoin de gestion d'instances. La bibliothèque est distribuée sous la forme d'un package NuGet unique qui inclut la prise en charge native du traitement PDF et d'images sans nécessiter de dépendances supplémentaires.
Le moteur de lecture d'IronBarcode effectue une détection automatique du format sur plus de 50 symbologies en une seule passe de numérisation. Les objets de résultat renvoyés par BarcodeReader.Read() comprennent le type de code-barres détecté, la valeur décodée et les métadonnées contextuelles telles que le numéro de page pour les sources PDF et les coordonnées de délimitation dans l'image source.
Les principales caractéristiques d' Code-barres IronBarcode sont les suivantes :
- Détection automatique du format:
BarcodeReader.Read()ne nécessite aucun paramètre de type. La bibliothèque identifie la symbologie lors de l'analyse et l'inclut dans l'objet résultat. - Single-package PDF support: Les fichiers PDF sont acceptés directement par
BarcodeReader.Read()sans aucun code supplémentaire de package NuGet, de licence ou d'extraction de page manuelle. - Fluent generation API:
BarcodeWriter.CreateBarcode()est une méthode d'usine statique qui renvoie un objet chaînable pour le dimensionnement, le style et l'enregistrement dans une seule expression. - Mode d'essai avec toutes les fonctionnalités : La version d'essai Code-barres IronBarcode s'exécute à partir du même package que le produit sous licence, offrant une vitesse de lecture maximale, une prise en charge complète de la symbologie et l'ensemble des fonctionnalités. Les données générées en mode d'essai comportent un petit filigrane sur les bords ; Le comportement de lecture reste inchangé.
BarcodeReaderOptionspour le réglage: La vitesse de lecture, la détection multi-barcodes, le prétraitement des images et les filtres de symbologie attendus sont configurables sans changer de produit de bibliothèque.- Objets de résultat avec métadonnées: Chaque résultat d'une collection
BarcodeResultsexposeValue,BarcodeType,PageNumber, et des données sur la région de l'image.
Comparaison des fonctionnalités
Le tableau suivant résume les principales différences entre Spire.Barcode et IronBarcode:
| Fonction | Spire.Barcode | Code-barres IronBarcode |
|---|---|---|
| Lecture de codes-barres | Oui (Type de code-barres requis) | Oui (détection automatique) |
| génération de codes-barres | Oui | Oui |
| Détection automatique du format | Non | Oui |
| Prise en charge native des fichiers PDF | Non (nécessite Spire.PDF) | Oui |
| Niveau gratuit | FreeSpire.Barcode (restreint) | Mode d'essai (fonctionnalités complètes) |
| Nombre de symboles | 39+ (commercial) | 50 ans et plus |
| Modèle de licence | Tarifs par utilisateur et abonnement | Perpétuel avec support optionnel |
Comparaison détaillée des fonctionnalités
| Fonction | Spire.Barcode | Code-barres IronBarcode |
|---|---|---|
| En lisant | ||
| Détection automatique du format | Non | Oui |
| Type de code-barres requis | Oui | Non |
| Métadonnées de format de retour | Non | Oui |
| Plusieurs codes-barres par image | Oui | Oui |
| Contrôle de la vitesse de lecture | Non | Oui (BarcodeReaderOptions) |
| Correction d'erreurs assistée par l'apprentissage automatique | Non | Oui |
| Génération | ||
| Modèle d'API | Objet Paramètres + générateur | Usine statique avec chaîne fluide |
| Code QR avec logo personnalisé | Niveau commercial uniquement | Tous les niveaux |
| Formats de sortie | Image (PNG, JPEG, BMP) | PNG, JPEG, BMP, SVG, HTML, flux |
| Enchaînement fluide | Non | Oui |
| Prise en charge des fichiers PDF | ||
| Lire les codes-barres à partir d'un PDF | Nécessite Spire.PDF | Natif, aucun package supplémentaire |
| Numéro de page dans le résultat | Suivi manuel | Oui |
| Licence supplémentaire requise | Oui (Spire.PDF) | Non |
| Plateforme | ||
| .NET Framework | Oui | Oui |
| .NET Core / .NET 5+ | Oui | Oui |
| Docker / Linux | Oui | Oui |
| Symbologies | ||
| 1D (Code 128, Code 39, EAN, UPC) | Oui | Oui |
| 2D (QR, DataMatrix, PDF417) | Oui | Oui |
| Nombre total de symboles | 39+ (commercial) | 50 ans et plus |
| Licence | ||
| Niveau gratuit | FreeSpire.Barcode (filigrané, dégradé) | Mode d'essai (pleine vitesse, petit filigrane) |
| Inscription requise pour le niveau gratuit | Oui | Non |
| Modèle de licence | Licence perpétuelle par utilisateur + abonnement | Perpétuel avec renouvellement optionnel |
| point d'entrée en matière de prix | 349 $ (développeur unique) | 749 $ (Lite) |
Lecture de codes-barres
Approche Spire.Barcode
Le BarcodeScanner.Scan() de Spire.BarCode nécessite un paramètre BarCodeType à chaque appel. L'appel à type unique est approprié lorsque le format est connu et garanti :
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);
foreach (string value in results)
{
Console.WriteLine(value);
}
// Spire.Barcode — type is mandatory
BarcodeScanner scanner = new BarcodeScanner();
string[] results = scanner.Scan("barcode.png", BarCodeType.Code128);
foreach (string value in results)
{
Console.WriteLine(value);
}
Imports Spire.Barcode
Dim scanner As New BarcodeScanner()
Dim results As String() = scanner.Scan("barcode.png", BarCodeType.Code128)
For Each value As String In results
Console.WriteLine(value)
Next
Lorsque le format est inconnu à l'avance, la seule approche possible consiste à parcourir les types candidats. Chaque itération correspond à une analyse complète, et tout format absent de la liste est ignoré sans notification. Le résultat est un string[] qui ne contient aucune information de type, de sorte que le routage en aval basé sur le format nécessite une gestion d'état supplémentaire de la part de l'appelant.
Approche IronBarcode
Le BarcodeReader.Read() d'IronBarcode ne nécessite aucun paramètre de type. La bibliothèque détecte automatiquement le format pour toutes les symbologies prises en charge, en une seule passe. La lecture des codes-barres à partir d'images se résume à un seul appel de méthode, quel que soit le nombre de formats différents que peut contenir la source :
// Code-barres IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
// Code-barres IronBarcode — auto-detection built in
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
Console.WriteLine($"{result.BarcodeType}: {result.Value}");
}
Imports IronBarCode
' Code-barres IronBarcode — auto-detection built in
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
Console.WriteLine($"{result.BarcodeType}: {result.Value}")
Next
Chaque objet de résultat comprend BarcodeType, Value, et des métadonnées de position. Le routage en aval basé sur le format ne nécessite aucun état supplémentaire : le type est présent dans le résultat lui-même.
Limitations du niveau gratuit
Spire.Barcode Niveau gratuit
FreeSpire.Barcode applique un grand filigrane d'évaluation aux images de codes-barres générées. Le filigrane recouvre le code-barres de telle sorte qu'il le rend inutilisable pour la production et empêche toute évaluation pertinente de la qualité de la génération. Les performances de numérisation sont intentionnellement dégradées dans la version gratuite, ce qui signifie que les mesures de débit effectuées lors de l'évaluation ne représentent pas les performances commerciales de Spire.Barcode. Le package gratuit nécessite également une clé d'enregistrement obtenue auprès d'E-iceblue pour que les boîtes de dialogue d'avertissement soient supprimées lors de l'exécution. L'ensemble de symboles disponibles dans la version gratuite est un sous-ensemble de l'offre commerciale. Ces restrictions signifient collectivement qu'une évaluation basée sur FreeSpire.Barcode ne représente pas fidèlement les performances du produit commercial.
Mode d'essai IronBarcode
La version d'essai d'IronBarcode est le package sous licence utilisé sans clé de licence. La lecture s'effectue à pleine vitesse avec une prise en charge complète de la symbologie et sans restrictions comportementales. Les options de vitesse et de précision de lecture fonctionnent de manière identique en mode d'essai et en mode licence. Les codes-barres générés en mode d'essai comportent un petit filigrane sur le bord de l'image ; Il ne masque pas le code-barres lui-même. Le comportement mesuré lors d'une évaluation Code-barres IronBarcode est celui qui est déployé en production.
| Aspect | FreeSpire.Barcode | Essai Code-barres IronBarcode |
|---|---|---|
| Filigranes sur le résultat généré | Grand format, couvre le code-barres | Petit, bord de l'image seulement |
| performance de lecture | Dégradé intentionnellement | Pleine vitesse |
| Support de la symbologie | Sous-ensemble limité (~20 types) | Ensemble complet (plus de 50 types) |
| Inscription requise | Oui (clé gratuite d'E-iceblue) | Non |
| Fonctionnalités disponibles | Sous-ensemble limité | Ensemble complet de fonctionnalités |
| limite de temps | Aucun | 30 jours |
Prise en charge des codes-barres PDF
Approche Spire.Barcode
Spire.Barcode ne possède pas de fonctionnalité native de lecture de fichiers PDF. Pour extraire des codes-barres d'un fichier PDF, un développeur doit installer le package Spire.PDF séparé, acheter une licence Spire.PDF distincte et écrire un code manuel d'itération de page et d'extraction d'image avant que la lecture des codes-barres ne puisse commencer :
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;
var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");
var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
var images = page.ExtractImages();
foreach (var image in images)
{
// BarCodeType is still required even here
string[] results = scanner.Scan(image, BarCodeType.QRCode);
}
}
// Spire.Barcode + Spire.PDF: two libraries, two licenses
using Spire.Pdf;
var pdf = new PdfDocument();
pdf.LoadFromFile("document.pdf");
var scanner = new BarcodeScanner();
foreach (PdfPageBase page in pdf.Pages)
{
var images = page.ExtractImages();
foreach (var image in images)
{
// BarCodeType is still required even here
string[] results = scanner.Scan(image, BarCodeType.QRCode);
}
}
Imports Spire.Pdf
Dim pdf As New PdfDocument()
pdf.LoadFromFile("document.pdf")
Dim scanner As New BarcodeScanner()
For Each page As PdfPageBase In pdf.Pages
Dim images = page.ExtractImages()
For Each image In images
' BarCodeType is still required even here
Dim results As String() = scanner.Scan(image, BarCodeType.QRCode)
Next
Next
Ce modèle nécessite deux packages NuGet , deux contrats de licence et du code de gestion de pages écrit par les développeurs. Si les codes-barres sont intégrés dans un contenu vectoriel plutôt que dans des images raster au sein du PDF, la méthode d'extraction d'images risque de ne pas les détecter du tout.
Approche IronBarcode
IronBarcode gère les fichiers PDF nativement, sans aucune dépendance supplémentaire. La lecture de codes-barres à partir de documents PDF est un appel de méthode unique utilisant la même BarcodeReader.Read() API que celle utilisée pour les fichiers images. Les numéros de page sont inclus dans chaque objet de résultat :
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
// IronBarcode: native PDF support, no additional library
var results = BarcodeReader.Read("document.pdf");
foreach (var barcode in results)
{
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}");
}
Imports IronBarcode
Dim results = BarcodeReader.Read("document.pdf")
For Each barcode In results
Console.WriteLine($"Page {barcode.PageNumber}: {barcode.BarcodeType} = {barcode.Value}")
Next
Aucune extraction manuelle de pages, aucun paquetage secondaire et aucun achat de licence supplémentaire ne sont requis.
API de génération
Approche Spire.Barcode
Le modèle de génération de BarCode est centré sur un objet de configuration BarcodeSettings mutable. Un développeur instancie les paramètres, attribue les propriétés individuellement, transmet l'objet paramètres à un BarCodeGenerator, puis appelle le GenerateImage() :
// Spire.Barcode generation
using Spire.Barcode;
BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;
BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
// Spire.Barcode generation
using Spire.Barcode;
BarcodeSettings settings = new BarcodeSettings();
settings.Type = BarCodeType.Code128;
settings.Data = "12345678";
settings.ShowText = true;
settings.TextMargin = 5;
settings.BarHeight = 60;
settings.Unit = GraphicsUnit.Pixel;
BarCodeGenerator generator = new BarCodeGenerator(settings);
Image barcodeImage = generator.GenerateImage();
barcodeImage.Save("barcode.png", ImageFormat.Png);
Imports Spire.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging
Dim settings As New BarcodeSettings()
settings.Type = BarCodeType.Code128
settings.Data = "12345678"
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("barcode.png", ImageFormat.Png)
L'objet de paramètres modifiable signifie que les configurations peuvent être partagées accidentellement entre les appels lorsqu'une seule instance est réutilisée dans plusieurs opérations de génération. La classe générateur ajoute une étape d'instanciation supplémentaire qui ne comporte aucune logique de configuration propre.
Approche IronBarcode
IronBarcode utilise une méthode de fabrique statique avec chaînage fluide optionnel. Il n'existe aucun objet de configuration ni aucune instance de générateur à gérer :
// Code-barres IronBarcode generation
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
// Code-barres IronBarcode generation
using IronBarCode;
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128)
.ResizeTo(400, 100)
.SaveAsPng("barcode.png");
Imports IronBarCode
' Code-barres IronBarcode generation
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
' With sizing:
BarcodeWriter.CreateBarcode("12345678", BarcodeEncoding.Code128) _
.ResizeTo(400, 100) _
.SaveAsPng("barcode.png")
Les codes QR avec logos personnalisés sont disponibles pour tous les niveaux de licence IronBarcode :
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
var qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-with-logo.png");
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-with-logo.png")
Tarification
La structure tarifaire de Spire.Barcode comprend quatre niveaux :
| Licence | Prix |
|---|---|
| Développeur unique | $349 |
| Licence de site | $1,398 |
| OEM | $6,990 |
| Abonnement | 999 $/an |
Les formules perpétuelles couvrent une version spécifique. Les mises à jour et le support continus nécessitent un abonnement actif en plus de la licence perpétuelle. Une équipe passant d'un développeur à deux passe directement du forfait développeur unique à 349 $ à la licence de site à 1 398 $. Si Spire.PDF est également requis pour l'extraction des codes-barres PDF, cette licence représente un coût supplémentaire.
Le système de licences IronBarcode utilise trois niveaux perpétuels :
| Licence | Prix | Développeurs |
|---|---|---|
| Lite | $749 | 1 |
| Professional | $1,499 | 10 |
| Nombre illimité | $2,999 | Nombre illimité |
Tous les niveaux d'abonnement sont perpétuels avec la possibilité d'ajouter un abonnement annuel de support et de mises à jour. Une équipe de cinq développeurs utilisant la licence Site de Spire.Barcode (1 398 $) Plus un an d'abonnement (999 $) totalise 2 397 $ la première année, comparable à Code-barres IronBarcode Professionalà 1 499 $ en achat unique sans coût requis pour la deuxième année.
Référence de mappage d'API
| Spire.Barcode | Code-barres IronBarcode |
|---|---|
new BarcodeScanner() |
Statique BarcodeReader.Read() |
scanner.Scan(path, BarCodeType.X) |
BarcodeReader.Read(path) |
BarCodeType.Code128 (paramètre obligatoire) |
Détection automatique ; aucun équivalent n'est nécessaire |
string[] results |
BarcodeResults collection |
results[0] (chaîne) |
results[0].Value (chaîne de caractères) |
new BarcodeSettings() |
Paramètres de BarcodeWriter.CreateBarcode() |
settings.Type = BarCodeType.Code128 |
BarcodeEncoding.Code128 comme deuxième paramètre |
settings.Data = "value" |
Premier paramètre de CreateBarcode() |
new BarCodeGenerator(settings) |
Inutile ; static factory remplace this |
generator.GenerateImage() + image.Save() |
.SaveAsPng(path) ou .SaveAsJpeg(path) |
Spire.PDF (pour une lecture en PDF) |
Inutile ; Prise en charge native du format PDF intégrée |
BarcodeSettings.ApplyKey("key") |
IronBarCode.License.LicenseKey = "key" |
Spire.License.LicenseProvider.SetLicenseKey("key") |
IronBarCode.License.LicenseKey = "key" |
Quand les équipes envisagent de passer de Spire.Barcode à IronBarcode
Traitement de documents de formats mixtes
Les équipes qui commencent avec un seul format de code-barres connu constatent souvent que la diversité des formats utilisés augmente avec le temps. Une application de gestion d'entrepôt initialement conçue avec des étiquettes Code128 peut recevoir des livraisons de fournisseurs utilisant des codes DataMatrix, GS1-128 ou des codes QR. Chaque nouveau format qui entre dans le flux de travail nécessite la mise à jour du tableau candidat dans la boucle de devinette de type, le test de la logique de détection et la confirmation qu'aucun format existant n'est déplacé par l'ordre d'itération. Lorsque la diversité des formats atteint un point où les frais de maintenance de cette boucle deviennent un coût de développement récurrent, les équipes évaluent si la détection automatique permettrait d'éliminer complètement ce fardeau.
Intégration PDF
Les applications qui manipulent beaucoup de documents rencontrent souvent un moment où il est nécessaire d'extraire les codes-barres de fichiers PDF plutôt que d'images autonomes. Dans un flux de travail Spire.Barcode, cette transition nécessite l'acquisition d'une licence Spire.PDF, l'intégration d'un deuxième package et la mise en place d'une infrastructure d'itération de page et d'extraction d'images avant toute lecture de code-barres. Les équipes qui n'avaient pas anticipé cette exigence lors de l'achat initial se retrouvent à gérer deux licences de produit et deux interfaces API pour une tâche qui relève conceptuellement de la lecture de codes-barres. Découvrir que la prise en charge des fichiers PDF nécessite un achat séparé est un élément déclencheur fréquent qui incite à réévaluer le choix du produit.
Limitations de l'évaluation gratuite
Les équipes qui ont évalué FreeSpire.Barcode puis acheté la licence commerciale signalent parfois que le produit commercial se comporte différemment de ce que leur évaluation laissait présager. Ceci est intentionnel : le niveau gratuit dégrade volontairement les performances de lecture et restreint l'ensemble de symbologie, ce qui signifie que les tests de performance et de couverture de format effectués lors de l'évaluation ne sont pas transposables au déploiement commercial. Lorsqu'une équipe découvre cette anomalie après l'achat, elle recherche souvent des alternatives dont le comportement à l'essai est représentatif du comportement en production.
Réduction du nombre de produits
Les organisations qui standardisent leur pile technologique identifient parfois Spire.Barcode comme un composant d'un inventaire croissant de produits E-iceblue, chacun ayant son propre coût de licence et son propre cycle de renouvellement. Si le principal moteur de Spire.Barcode est la lecture des codes-barres au sein d'un pipeline de traitement de documents — plutôt qu'une intégration profonde avec Spire.Doc ou Spire.XLS — les équipes évaluent si une bibliothèque de codes-barres unique et autonome permettrait de réduire à la fois la complexité des licences et la surface d'assistance.
Considérations courantes en matière de migration
Suppression du paramètre BarCodeType
Chaque appel scanner.Scan() dans une base de code Spire.BarCode porte un argument BarCodeType. Le remplacement de ces appels par BarcodeReader.Read() supprime entièrement le paramètre de type. Les boucles d'évaluation de type - les blocs foreach qui itèrent à travers les valeurs candidates BarCodeType - peuvent être supprimées dans leur intégralité ; un seul appel BarcodeReader.Read() remplace toute la boucle.
Mise à jour du type de retour
Le Scan() de BarCode renvoie le string[]. Code-barres IronBarcode renvoie une collection BarcodeResults. Les sites d'appel qui attribuent à string[] ou transmettent les résultats à des méthodes qui s'attendent à ce que ce type nécessite une mise à jour. L'extraction de valeurs sous forme de tableau utilise .Select(r => r.Value).ToArray() ; l'accès au premier résultat utilise .First()?.Value.
Suppression du package Spire.PDF
Si Spire.PDF a été installé uniquement pour prendre en charge l'extraction de codes-barres à partir de fichiers PDF, il peut être supprimé après la migration vers IronBarcode. Toutes les importations using Spire.Pdf; et les blocs d'itération de page manuelle sont remplacés par un seul appel BarcodeReader.Read("file.pdf"). Si Spire.PDF est utilisé pour d'autres opérations sur les documents que l'extraction de codes-barres, il doit être conservé et seuls les chemins de code liés aux codes-barres doivent être remplacés.
Modifications de l'espace de nommage
Remplacez using Spire.Barcode; par using IronBarCode;. L'énumération BarCodeType est remplacée par BarcodeEncoding pour la génération et ne nécessite pas d'équivalent pour la lecture. L'initialisation de la licence passe de BarcodeSettings.ApplyKey() ou Spire.License.LicenseProvider.SetLicenseKey() à une seule affectation de propriété IronBarCode.License.LicenseKey au démarrage de l'application.
Fonctionnalités supplémentaires IronBarcode
Les fonctionnalités suivantes Code-barres IronBarcode n'ont pas été abordées dans les comparaisons ci-dessus :
- Lecture d'images par lots:
BarcodeReader.Read()accepte les tableaux de chemins de fichiers, les objetsStreamet les instancesBitmap, ce qui permet un traitement par lots sans boucle manuelle sur la collection d'entrée. - BarcodeReaderOptions: La vitesse de lecture, la détection multi-barcodes, les candidats maximaux et le prétraitement d'amélioration de l'image sont configurables par le biais d'un seul objet d'options transmis à
Read(). - Sortie SVG et HTML:
BarcodeWriter.CreateBarcode()prend en charge.SaveAsSvg()et.SaveAsHtmlFile()en plus des formats d'images matricielles, ce qui permet une sortie de codes-barres intégrable sur le web. - Code QR avec logo:
QRCodeWriter.CreateQrCode()prend en chargeAddBrandLogo()à tous les niveaux de licence, ce qui permet de composer une image personnalisée dans le centre du code QR sans affecter la fiabilité du balayage à des niveaux de correction d'erreur appropriés. - Sortie de flux et de tableau d'octets : Les codes-barres générés peuvent être exportés sous forme de
Streamoubyte[]pour le stockage direct ou l'écriture de réponses HTTP sans fichier intermédiaire. - GS1-128 et symbologies structurées : Code-barres IronBarcode inclut la prise en charge des symbologies GS1 structurées au-delà de ce qui est disponible dans le niveau commercial Spire.Barcode.
Compatibilité .NET et préparation à l'avenir
IronBarcode prend en charge .NET Framework4.6.2 et versions ultérieures, .NET Core 3.1 et toutes les versions de .NET 5 à .NET 9, avec des mises à jour de compatibilité pour .NET 10 prévues au fur et à mesure de l'avancement du calendrier de publication jusqu'en 2026. La bibliothèque est testée sous Windows, Linux et macOS, et s'exécute dans des conteneurs Docker sans configuration de dépendance native supplémentaire. Spire.Barcode prend également en charge le déploiement .NET multiplateforme, bien que ses configurations Linux et Docker puissent nécessiter une configuration supplémentaire de bibliothèques natives en fonction de la version utilisée. Le rythme de publication régulier d'IronBarcode garantit l'intégration des nouvelles fonctionnalités du langage C# et des améliorations du runtime .NET , parallèlement aux mises à jour de compatibilité de la plateforme.
Conclusion
Spire.Barcode et Code-barres IronBarcode abordent le problème de la lecture des codes-barres sous des angles fondamentalement différents. Spire.Barcode impose à l'appelant la connaissance du format : chaque opération de numérisation exige que le développeur déclare la symbologie à l'avance, ce qui constitue une contrainte acceptable dans les flux de travail à format fermé et une charge de maintenance dans ceux à format ouvert. Code-barres IronBarcode intègre la détection de format dans la bibliothèque, sans nécessiter de paramètre de type, et renvoie le format détecté dans le résultat.
Spire.Barcode est un choix judicieux pour les applications qui traitent un seul format de code-barres garanti, en particulier lorsque l'équipe a déjà investi dans l'écosystème de produits E-iceblue. Le modèle de génération d'objets de paramètres est familier aux développeurs qui préfèrent une configuration explicite, et la licence commerciale est compétitive pour les projets à développeur unique. Les équipes qui peuvent garantir BarCodeType.Code128 à chaque appel ne paient aucun coût pratique pour le paramètre de type obligatoire.
IronBarcode est mieux adapté aux applications où la diversité des formats est imprévisible ou croissante, où l'extraction de codes-barres PDF est une exigence primordiale et où la précision de l'évaluation est importante. L'essai se déroule à pleine vitesse de production avec l'ensemble complet de symbologie, ce qui rend les tests de performance et de couverture de format effectués pendant l'évaluation directement applicables au déploiement en production. La prise en charge native du format PDF élimine le besoin d'une bibliothèque secondaire et les frais de licence associés. Pour les équipes qui envisagent Code-barres IronBarcode comme alternative à Spire.Barcode, la présentation des alternatives à Spire.Barcode fournit un contexte supplémentaire sur la comparaison.
La décision repose en définitive sur la prévisibilité du format et la portée du flux de travail. Un système d'entrepôt utilisant une norme d'étiquetage Code128 fixe et ne disposant pas de documents sources PDF n'a aucune raison pratique de privilégier la détection automatique d'IronBarcode. Un pipeline de traitement de documents qui ingère des codes-barres provenant de fournisseurs externes, gère des symbologies mixtes et lit des pièces jointes PDF constatera que le paramètre de type obligatoire et l'exigence de deux bibliothèques PDF représentent des coûts de maintenance continus Code-barres IronBarcode élimine.
Questions Fréquemment Posées
Qu'est-ce que Spire.BarCode ?
Spire.Barcode est une bibliothèque de codes-barres .NET permettant de générer et de lire des codes-barres dans des applications C#. C'est l'une des nombreuses alternatives que les développeurs évaluent lorsqu'ils choisissent une solution de code-barres pour les projets .NET.
Quelles sont les principales différences entre Spire.Barcode et IronBarcode ?
IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que Spire.Barcode nécessite généralement la création et la configuration d'une instance avant utilisation. IronBarcode offre également une prise en charge native du format PDF, une détection automatique du format et une licence à clé unique pour tous les environnements.
IronBarcode est-il plus facile à licencier que Spire.Barcode ?
IronBarcode utilise une clé de licence unique couvrant à la fois les déploiements de développement et de production. Cela simplifie les pipelines CI/CD et les configurations Docker par rapport aux systèmes de licence qui séparent les clés SDK des clés d'exécution.
IronBarcode prend-il en charge tous les formats de codes-barres que Spire.Barcode prend en charge ?
IronBarcode prend en charge plus de 30 symbologies de codes-barres, notamment QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1, et bien d'autres encore. L'auto-détection du format signifie qu'aucune énumération explicite du format n'est nécessaire.
IronBarcode prend-il en charge la lecture de codes-barres PDF en mode natif ?
Oui. IronBarcode lit les codes-barres directement à partir de fichiers PDF en utilisant BarcodeReader.Read("document.pdf") sans nécessiter de bibliothèque de rendu PDF séparée. Les résultats par page comprennent le numéro de page, le format du code-barres, la valeur et le score de confiance.
Comment IronBarcode gère-t-il le traitement par lots par rapport à Spire.Barcode ?
Les méthodes statiques d'IronBarcode sont sans état et naturellement à l'abri des threads, ce qui permet d'utiliser directement Parallel.ForEach sans gestion d'instance par thread. Il n'y a pas de plafond de débit, quel que soit le niveau de prix.
Quelles versions de .NET sont prises en charge par IronBarcode ?
IronBarcode prend en charge .NET Framework 4.6.2+, .NET Core 3.1 et .NET 5, 6, 7, 8 et 9 dans un seul package NuGet. Les plates-formes visées sont Windows x64/x86, Linux x64 et macOS x64/ARM.
Comment installer IronBarcode for .NET dans un projet .NET ?
Installez IronBarcode via NuGet : exécutez "Install-Package IronBarCode" dans la console du gestionnaire de paquets, ou "dotnet add package IronBarCode" dans le CLI. Aucun installateur SDK ou fichier d'exécution supplémentaire n'est nécessaire.
Puis-je évaluer IronBarcode avant l'achat, contrairement à Spire.Barcode ?
Oui. Le mode d'essai d'IronBarcode renvoie des valeurs de code-barres décodées complètes - seules les images de sortie générées reçoivent un filigrane. Vous pouvez comparer la précision de lecture sur vos propres documents avant de vous engager dans un achat.
Quelle est la différence de prix entre Spire.Barcode et IronBarcode ?
IronBarcode est proposé à partir de 749 dollars pour une licence perpétuelle pour un seul développeur couvrant le développement et la production. Les détails des prix et les options de volume sont disponibles sur la page de licence d'IronBarcode. Il n'est pas nécessaire de disposer d'une licence d'exécution distincte.
Est-il simple de migrer de Spire.Barcode vers IronBarcode ?
La migration de Spire.Barcode vers IronBarcode implique principalement le remplacement des appels d'API basés sur les instances par les méthodes statiques d'IronBarcode, la suppression des modèles de licence et la mise à jour des noms des propriétés des résultats. La plupart des migrations impliquent une réduction du code plutôt qu'un ajout.
IronBarcode génère-t-il des codes QR avec des logos ?
Oui. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incorpore une image de marque dans un code QR de manière native avec une correction d'erreur configurable. Les codes QR colorés sont également pris en charge via ChangeBarCodeColor().

