Passer au contenu du pied de page
COMPARER à D'AUTRES COMPOSANTS

Barcoder vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#

Pour générer un seul PNG avec Barcoder, vous installez deux paquets, importez trois espaces de noms, encodez avec une classe spécifique au format, créez un moteur de rendu avec un objet d'options, ouvrez un flux, effectuez le rendu dans celui-ci et supprimez le flux. Voilà tout le chemin du bonheur — et cela ne concerne que l'écriture. codeur à barres ne possède aucune API de lecture. La licence MIT et le caractère open source de la bibliothèque la rendent attrayante au premier abord, notamment pour les équipes qui cherchent à éviter les dépendances commerciales. Mais cette architecture fragmentée — deux packages NuGet minimum, une classe d'encodeur différente pour chaque format de code-barres et un pipeline de rendu qui sépare complètement l'encodage et la sortie — crée de réelles frictions dès que les exigences dépassent le scénario de génération à format unique le plus simple.

Comprendre le code-barres

Barcoder est une bibliothèque open source de génération de codes-barres .NET disponible sur NuGet sous licence MIT. Il encode les données dans des formats de code-barres tels que Code128, QR, DataMatrix, EAN-13, PDF417et autres. La philosophie de conception sépare entièrement l'encodage du rendu - la bibliothèque principale produit un objet IBarcode (une structure de données), et un paquet de rendu séparé convertit cet objet en une image.

Les conséquences pratiques de cette conception sont visibles dès la première installation. Deux packages NuGet sont nécessaires avant toute sortie PNG : Barcoder pour l'encodage et Barcoder.Renderer.Image pour le rendu. Si une sortie SVG est également nécessaire, un troisième package - Barcoder.Renderer.Svg - doit être ajouté. Ces packages sont versionnés indépendamment, ce qui signifie que les mises à jour de l'un ne s'alignent pas automatiquement sur les autres, et leur synchronisation au sein d'un projet devient une tâche de maintenance récurrente.

Caractéristiques architecturales clés du lecteur de codes-barres :

  • Deux packages NuGet requis pour la sortie PNG: Barcoder pour l'encodage et Barcoder.Renderer.Image pour le rendu vers des formats d'image
  • Classes d'encodeurs spécifiques au format : Chaque type de code-barres possède son propre encodeur dans son propre espace de noms - Code128Encoder, QrEncoder, DataMatrixEncoder, et ainsi de suite
  • IBarcode n'a pas de méthodes de sortie: Le résultat de l'encodage est un objet de données simples. Un moteur de rendu doit être construit séparément, un flux ouvert, rendu dans lequel il est effectué, puis fermé.
  • Le rendu d'images ne prend plus en charge .NET Framework : les équipes utilisant .NET Frameworkne peuvent plus utiliser le package de rendu d'images.
  • Aucune capacité de lecture : codeur à barres ne peut pas décoder les codes-barres à partir d'images, de fichiers ou de toute autre source.
  • Versionnement indépendant des paquets: Barcoder et Barcoder.Renderer.Image peuvent s'éloigner l'un de l'autre lors de la mise à jour des dépendances

Flux de travail de génération multi-packages

Le récit de l'installation illustre immédiatement la différence d'envergure. Avec Barcoder, la sortie PNG de base nécessite deux packages distincts :

dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
dotnet add package Barcoder
dotnet add package Barcoder.Renderer.Image
SHELL

Le flux de travail complet pour générer un code-barres Code128 et l'enregistrer au format PNG nécessite trois importations d'espace de noms, un appel d'encodeur spécifique au format, une construction de rendu avec un objet d'options, un flux de fichiers et un appel de rendu :

// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, 7 steps to save a PNG
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

IBarcode barcode = Code128Encoder.Encode("PRODUCT-12345", false);

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 2,
    BarHeightFor1DBarcode = 50
});

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

Dim barcode As IBarcode = Code128Encoder.Encode("PRODUCT-12345", False)

Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 2,
    .BarHeightFor1DBarcode = 50
})

Using stream As FileStream = File.OpenWrite("barcode.png")
    renderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Changer le format des codes-barres ne se résume pas à modifier un paramètre ; cela nécessite d'importer un espace de noms différent et d'appeler une classe différente. Code128Encoder.Encode prend un bool pour includeChecksum, QrEncoder.Encode prend un niveau de correction d'erreur et deux bools supplémentaires, et DataMatrixEncoder.Encode ne prend que la chaîne de caractères. Il n'existe pas d'interface unifiée pour créer un code-barres dans un format spécifique.

Comprendre IronBarcode

IronBarcode est une bibliothèque commerciale .NET de codes-barres qui permet la génération et la lecture via un seul package NuGet . Il utilise un modèle d'API statique construit autour de deux classes principales - BarcodeWriter pour la génération et BarcodeReader pour la lecture - et fait passer toute sélection de format par l'enum BarcodeEncoding plutôt que par des classes ou des espaces de noms spécifiques à un format.

La bibliothèque est conçue pour minimiser la distance entre l'écriture de la première ligne de code-barres et l'obtention d'un résultat fonctionnel. La génération, la lecture, la prise en charge des PDF, les codes QR avec logos intégrés et tous les types de sortie sont inclus dans un seul package avec une seule version à suivre.

Caractéristiques principales d' IronBarcode:

  • Un seul package NuGet: IronBarcode couvre toutes les fonctionnalités - génération, lecture, PDF, et tous les formats de sortie
  • Sélection de format unifiée: Tous les types de BarCode sont adressés à travers des valeurs BarcodeEncoding enum ; pas d'importations ou de classes spécifiques à un format
  • Méthodes de sortie sur l'objet résultat: GeneratedBarcode expose SaveAsPng, ToPngBinaryData, ToStream, SaveAsSvg, et ResizeTo directement
  • Capacité de lecture native: BarcodeReader.Read() décode à partir de fichiers images, de tableaux d'octets, de flux et de PDF sans bibliothèque secondaire
  • Prise en charge de MAUI, Docker, AWS Lambda et Azure : Cibles de déploiement documentées au-delà des scénarios standard de bureau et de serveur
  • Prise en charge complète du .NET Frameworket des versions modernes de .NET : du .NET Framework4.6.2 au .NET 9

Comparaison des fonctionnalités

Fonction codeur à barres Code-barres IronBarcode
Packages NuGet requis 2 minimum 1
génération de codes-barres Oui Oui
Lecture de codes-barres Non Oui
Licence MIT (logiciel libre) Commercial
Prise en charge du .NET Framework Déposé dans le moteur de rendu d'images .NET Framework4.6.2+
Lecture de PDF Non Oui
QR avec logo Non Oui

Comparaison détaillée des fonctionnalités

Fonction codeur à barres Code-barres IronBarcode
Génération
Génération Code128 Oui Oui
génération de code QR Oui Oui
Génération de DataMatrix Oui Oui
EAN-13, PDF417 Oui Oui
QR avec logo intégré Non Oui - .AddBrandLogo(path)
Format sélectionné via énumération Non — une classe d'encodeur distincte par format Oui - BarcodeEncoding enum
Sortir
Sortie PNG Oui (via Barcoder.Renderer.Image) Oui - .SaveAsPng()
Sortie SVG Oui (via Barcoder.Renderer.Svg) Oui - .SaveAsSvg()
Sortie de données binaires Oui (via MemoryStream) Oui - .ToPngBinaryData()
Flux de sortie Oui (gestion manuelle du flux) Oui - .ToStream()
API de redimensionnement direct Non - PixelSize facteur d'échelle uniquement Oui - .ResizeTo(width, height)
En lisant
Lire à partir d'un fichier image Non Oui
Lire le PDF Non Oui
Lecture à partir du flux Non Oui
Détection de plusieurs codes-barres Non Oui - ExpectMultipleBarcodes
Contrôle de la vitesse de lecture Non Oui - ReadingSpeed enum
Plateforme
.NET Core / .NET 5+ Oui Oui
.NET Framework Déposé dans le moteur de rendu d'images .NET Framework4.6.2+
.NET 9 Activité peu claire / limitée Oui
MAUI (iOS, Android, Windows, macOS) Non Oui
Docker / Azure / AWS Lambda Non documenté Oui
Conditionnement
Risque lié au versionnage indépendant des paquets Oui Non — colis unique
Espace de noms par format Oui Non - unique using IronBarCode
Licence
Modèle de licence MIT (logiciel libre) Commercial
Tarifs Gratuit Lite 749 $, Plus 1 499 $, Professional 2 999 $, Illimité 5 999 $

API de sélection et de génération de format

Le choix de la structure de sélection du format des codes-barres a des répercussions sur chaque partie du code source qui génère des codes-barres.

Approche par code-barres

Le système de codage à barres achemine la sélection du format via des classes d'encodeurs distinctes dans des espaces de noms séparés. Le changement de format implique l'ajout d'une nouvelle directive using et l'utilisation d'une classe différente avec une signature de méthode différente :

// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);

// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);

// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
// Code128
using Barcoder.Code128;
IBarcode barcode = Code128Encoder.Encode("data", false);

// QR Code — different namespace, different class, different parameters
using Barcoder.Qr;
IBarcode barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false);

// DataMatrix — different namespace, different class again
using Barcoder.DataMatrix;
IBarcode barcode = DataMatrixEncoder.Encode("data");
Imports Barcoder.Code128
Imports Barcoder.Qr
Imports Barcoder.DataMatrix

' Code128
Dim barcode As IBarcode = Code128Encoder.Encode("data", False)

' QR Code — different namespace, different class, different parameters
barcode = QrEncoder.Encode("data", ErrorCorrectionLevel.M, False, False)

' DataMatrix — different namespace, different class again
barcode = DataMatrixEncoder.Encode("data")
$vbLabelText   $csharpLabel

Chaque encodeur possède son propre contrat de paramètres. Ajouter un nouveau format à un projet existant ne se résume pas à un simple changement d'un mot : il s'agit d'importer un nouvel espace de noms, d'apprendre une nouvelle classe et de comprendre de nouveaux paramètres.

Approche IronBarcode

IronBarcode fait passer toute la sélection de format par l'enum BarcodeEncoding sur la classe unifiée BarcodeWriter. L'ajout d'un nouveau format consiste à modifier un seul mot la valeur de l'énumération :

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");

// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");

// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");

// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png");

// DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png");

// QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png");

// QR with logo
QRCodeWriter.CreateQrCode("data", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

' Code128
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128).SaveAsPng("code128.png")

' DataMatrix — same class, same method, one word changed
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix).SaveAsPng("dm.png")

' QR — dedicated optimized method
QRCodeWriter.CreateQrCode("data", 500).SaveAsPng("qr.png")

' QR with logo
QRCodeWriter.CreateQrCode("data", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

Pour une utilisation en production, ajoutez la clé de licence au démarrage de l'application :

IronBarCode.License.LicenseKey = "YOUR-KEY";
IronBarCode.License.LicenseKey = "YOUR-KEY";
Imports IronBarCode

IronBarCode.License.LicenseKey = "YOUR-KEY"
$vbLabelText   $csharpLabel

La documentation relative à la génération de codes-barres IronBarcode couvre l'ensemble des options de génération, y compris le style, les marges et la personnalisation des couleurs.

Options de rendu et de sortie

L'obtention des données issues des codes-barres sous différentes formes (fichier, données binaires, flux) est une exigence commune que chaque bibliothèque gère de manière très différente.

Approche par code-barres

La séparation entre l'encodage et le rendu chez codeur à barres est un principe architectural, mais elle engendre une surcharge à chaque changement de format de sortie. L'enregistrement dans un fichier nécessite l'ouverture d'un FileStream. Pour obtenir des données binaires, il faut ouvrir un MemoryStream et appeler le ToArray(). Chaque scénario de sortie nécessite la construction d'un moteur de rendu avec un objet d'options :

// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);

// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
// Barcoder: changing output dimensions requires rebuilding the renderer
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode-large.png");
renderer.Render(barcode, stream);

// Getting binary data — different stream, same renderer pipeline
using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports System.IO

' Barcoder: changing output dimensions requires rebuilding the renderer
Dim renderer = New ImageRenderer(New ImageRendererOptions With {
    .ImageFormat = ImageFormat.Png,
    .PixelSize = 3,
    .BarHeightFor1DBarcode = 80
})

Using stream As FileStream = File.OpenWrite("barcode-large.png")
    renderer.Render(barcode, stream)
End Using

' Getting binary data — different stream, same renderer pipeline
Using ms As New MemoryStream()
    renderer.Render(barcode, ms)
    Dim pngBytes As Byte() = ms.ToArray()
End Using
$vbLabelText   $csharpLabel

Le contrôle de la taille est indirect : PixelSize est un multiplicateur d'échelle sur la taille du module de code-barres, et non une spécification directe de la largeur et de la hauteur.

Approche IronBarcode

IronBarcode renvoie un objet GeneratedBarcode à partir duquel n'importe quelle forme de sortie peut être atteinte par le biais d'appels de méthodes enchaînés. Aucune construction de moteur de rendu, aucune gestion de flux :

using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100);

// File
barcode.SaveAsPng("barcode.png");

// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();

// Stream
System.IO.Stream stream = barcode.ToStream();
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100);

// File
barcode.SaveAsPng("barcode.png");

// Bytes
byte[] pngBytes = barcode.ToPngBinaryData();

// Stream
System.IO.Stream stream = barcode.ToStream();
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100)

' File
barcode.SaveAsPng("barcode.png")

' Bytes
Dim pngBytes As Byte() = barcode.ToPngBinaryData()

' Stream
Dim stream As System.IO.Stream = barcode.ToStream()
$vbLabelText   $csharpLabel

.ResizeTo(width, height) prend des dimensions de pixels explicites et enchaîne avec n'importe quelle méthode de sortie sur le même objet.

Lecture des codes-barres

L'absence d'une API de lecture dans codeur à barres est une contrainte architecturale stricte, et non un choix de configuration.

Approche par code-barres

Le codeur à barres ne possède aucune capacité de lecture ou de décodage. Il n'existe pas d'API, aucune API prévue et aucune solution de contournement au sein de la bibliothèque. Si une application a besoin de lire des codes-barres, une deuxième bibliothèque — une dépendance NuGet distincte avec sa propre interface API et sa propre version à suivre — doit être ajoutée en plus de Barcoder. Cela signifie au minimum deux dépendances liées à la lecture : codeur à barres pour la génération et un autre élément pour la lecture.

Approche IronBarcode

IronBarcode prend en charge à la fois la génération et la lecture avec le même package et des modèles d'API cohérents. La méthode BarcodeReader.Read() accepte les fichiers images, les tableaux d'octets, les flux et les PDF en mode natif :

using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);
    Console.WriteLine(result.Format);
}

// Lire le PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
using IronBarCode;

// Read from image file
var results = BarcodeReader.Read("barcode.png");
foreach (var result in results)
{
    Console.WriteLine(result.Value);
    Console.WriteLine(result.Format);
}

// Lire le PDF — no conversion step, no extra dependency
var pdfResults = BarcodeReader.Read("document.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-label.png", options);
Imports IronBarCode

' Read from image file
Dim results = BarcodeReader.Read("barcode.png")
For Each result In results
    Console.WriteLine(result.Value)
    Console.WriteLine(result.Format)
Next

' Lire le PDF — no conversion step, no extra dependency
Dim pdfResults = BarcodeReader.Read("document.pdf")

' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-label.png", options)
$vbLabelText   $csharpLabel

La lecture des fichiers PDF est native — aucune extraction d'image intermédiaire, aucune bibliothèque de conversion, aucun package supplémentaire. La documentation relative à la lecture des codes-barres IronBarcode couvre les PDF multipages, la lecture de zones d'intérêt et l'optimisation des performances.

Référence de mappage d'API

codeur à barres Code-barres IronBarcode
Code128Encoder.Encode("data", false) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M, false, false) QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... }) Pas nécessaire - la sortie est enchaînée à partir de GeneratedBarcode
renderer.Render(barcode, stream) .SaveAsPng(path) / .ToPngBinaryData() / .ToStream()
IBarcode (structure de données, pas de méthodes de sortie) GeneratedBarcode (a SaveAsPng, ToPngBinaryData, ToStream, ResizeTo, etc.)
Barcoder + Barcoder.Renderer.Image (2 paquets) IronBarcode (1 paquet)
using Barcoder.Code128 using IronBarCode(espace de noms unique, tous formats)
using Barcoder.Qr using IronBarCode
using Barcoder.DataMatrix using IronBarCode
API de lecture indisponible BarcodeReader.Read(path / bytes / stream / pdf)
Aucun moteur de rendu d'images .NET Framework .NET Framework4.6.2+
PixelSize + BarHeightFor1DBarcode options .ResizeTo(width, height)

Quand les équipes envisagent de passer de codeur à barres à IronBarcode

La lecture est ajoutée aux exigences

De nombreux projets débutent par de simples chaînes de génération : impression d'étiquettes, génération de codes pour les documents, intégration de codes-barres dans les rapports. codeur à barres prend en charge ces projets dès le départ. Lorsque la même application doit ultérieurement vérifier les codes-barres entrants, traiter des documents numérisés ou décoder les codes-barres des PDF téléchargés, codeur à barres n'offre aucune solution. L'équipe doit évaluer une deuxième bibliothèque, apprendre son API, gérer sa version NuGet séparément et gérer l'interface d'intégration entre les deux bibliothèques. Les équipes qui atteignent ce stade optent souvent pour une bibliothèque qui gère les deux aspects plutôt que de maintenir deux dépendances de codes-barres distinctes.

Rupture de compatibilité avec le .NET Framework

Barcoder.Renderer.Image a abandonné la prise en charge de .NET Framework. Les équipes qui gèrent des services ou des applications de bureau sur .NET Framework4.x et qui mettent à jour le package de rendu d'images lors de la maintenance de routine des dépendances rencontrent un échec de compilation. Il ne s'agit pas d'une erreur de configuration, mais d'une décision de la bibliothèque concernant la prise en charge de la plateforme. Code-barres IronBarcode prend en charge .NET Framework4.6.2 à .NET 9sans packaging spécial ni dépendances conditionnelles pour différentes cibles.

La dérive des versions de packages crée des problèmes de coordination

Les versions de Barcoder et Barcoder.Renderer.Image étant indépendantes, la mise à jour de l'une sans l'autre lors d'un rafraîchissement des dépendances peut introduire de subtiles incompatibilités. Dans un dépôt comportant plusieurs projets — chacun utilisant une version différente de chaque package de rendu — garantir un comportement cohérent entre les projets devient un problème de coordination qui s'accroît avec la taille de l'équipe. Les équipes qui utilisent désormais Code-barres IronBarcode indiquent que la gestion d'un seul package et d'une seule version élimine complètement ce type de problème.

La couverture des formats s'étend au fil du temps

Un projet pourrait commencer par des étiquettes Code128, puis ajouter ultérieurement des codes QR pour les liens destinés aux clients, puis DataMatrix pour répondre aux exigences de conformité. Avec Barcoder, chaque ajout de format implique une nouvelle importation d'espace de noms, une classe d'encodeur différente avec des paramètres de méthode différents, et potentiellement un nouveau package NuGet . Avec IronBarcode, l'ajout d'un format est une modification de la valeur BarcodeEncoding enum dans un appel existant. Les équipes dont la feuille de route prévoit l'extension de la couverture des formats de codes-barres trouvent le modèle basé sur les énumérations beaucoup plus facile à maintenir.

Exigences de déploiement MAUI et multiplateformes

Barcoder ne documente pas la prise en charge des déploiements MAUI, Docker, AWS Lambda ou Azure. Les équipes qui développent des applications MAUI multiplateformes ou qui déploient le traitement des codes-barres sur une infrastructure sans serveur constatent que la documentation et les tests de codeur à barres ne couvrent pas ces cibles. Code-barres IronBarcode documente et teste activement le déploiement sur les cibles iOS, Android, Windows, macOS MAUI, les conteneurs Docker et les principales plateformes cloud.

Considérations courantes en matière de migration

Le changement de type IBarcode en GeneratedBarcode

Le code BarCode qui stocke une variable IBarcode et la transmet ultérieurement à un moteur de rendu doit être refactorisé. Dans IronBarcode, GeneratedBarcode porte ses propres méthodes de sortie - il n'y a pas d'étape de rendu séparée. Toute signature de méthode qui accepte actuellement IBarcode devrait changer pour accepter GeneratedBarcode, et l'appel de rendu à l'intérieur de cette méthode devrait devenir un appel direct comme .SaveAsPng() ou .ToPngBinaryData(). Le système de types fera apparaître chaque emplacement nécessitant une mise à jour pendant la compilation - IBarcode ne se résoudra pas après la suppression des paquets BarCode.

PixelSize N'a pas d'équivalent direct

Le PixelSize de BarCode est un multiplicateur d'échelle sur la taille naturelle du module du code-barres, et non une dimension explicite en pixels. La largeur de sortie dépend du contenu du code-barres, de son format et du multiplicateur, combinés. Code-barres IronBarcode utilise .ResizeTo(width, height)avec des dimensions en pixels explicites. Pendant la migration, mesurez les dimensions de sortie réelles que le code BarCode existant produit et utilisez ces valeurs dans l'appel .ResizeTo() :

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .ResizeTo(300, 80)
    .SaveAsPng("barcode.png");
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .ResizeTo(300, 80) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Consolidation des espaces de noms

Les projets BarCode accumulent des énoncés using Barcoder.* - un par format utilisé. Au cours de la migration, toutes ces traductions se réduisent à un seul using IronBarCode;. Une recherche de using Barcoder dans la solution permettra d'identifier tous les fichiers à mettre à jour. Le nombre de fichiers concernés est généralement plus élevé que prévu par les équipes, car chaque fichier utilisant un format de code-barres importe son propre espace de noms spécifique à ce format.

Modifications du chemin de sortie SVG

Les projets utilisant Barcoder.Renderer.Svg et la classe SvgRenderer remplacent le pipeline de rendu par un appel direct à la méthode GeneratedBarcode :

// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
// Before
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);

// After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
Imports System.IO

' Before
Dim svgRenderer As New SvgRenderer()
Using stream As FileStream = File.OpenWrite("barcode.svg")
    svgRenderer.Render(barcode, stream)
End Using

' After
BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
    .SaveAsSvg("barcode.svg")
$vbLabelText   $csharpLabel

Le paquet Barcoder.Renderer.Svg pourra être supprimé une fois que tous les sites de rendu SVG auront été migrés.

Fonctionnalités supplémentaires IronBarcode

Outre les points de comparaison évoqués ci-dessus, Code-barres IronBarcode inclut des fonctionnalités pour lesquelles codeur à barres n'a pas d'équivalent :

Compatibilité .NET et préparation à l'avenir

IronBarcode est compatible avec .NET Framework4.6.2, .NET Core 2.x, .NET 5, .NET 6, .NET 7, .NET 8 et .NET 9. Son développement se poursuit activement avec des mises à jour régulières, et la compatibilité avec .NET 10 (prévue fin 2026) figure dans la feuille de route. Le moteur de rendu d'images de codeur à barres ne prend plus en charge .NET Framework, et l'activité sur le dépôt a été limitée ces dernières années, ce qui rend incertaine la compatibilité de la bibliothèque avec .NET 9et les versions ultérieures. Pour les équipes qui ont besoin d'une longue période de support et d'une compatibilité prévisible avec les prochaines versions de .NET , le rythme de publication régulier d'IronBarcode offre une plus grande garantie.

Conclusion

BarCode et Code-barres IronBarcode reflètent des portées fondamentalement différentes. BarCode est une bibliothèque de génération uniquement avec une séparation de principe entre l'encodage et le rendu - la structure de données IBarcode et le pipeline de rendu sont des couches distinctes par conception. Code-barres IronBarcode est une bibliothèque complète de codes-barres où la génération et la lecture partagent un seul package, un seul espace de noms et une API statique cohérente. La différence architecturale devient la plus visible lorsque les exigences augmentent : la conception multi-packages, multi-espaces de noms et sans lecture de codeur à barres fait de chaque ajout une tâche structurelle, tandis Code-barres IronBarcode traite les nouveaux ajouts de format ou de fonctionnalité comme des modifications de configuration.

Barcoder est le choix idéal lorsqu'un projet a uniquement besoin de génération de codes-barres, cible exclusivement .NET Core , utilise un petit nombre de formats de codes-barres et que la licence MIT est une exigence absolue. La bibliothèque fonctionne comme prévu dans ces limites, et pour les projets à périmètre restreint sans exigences de lecture ni cibles .NET Framework, l'option open source gratuite est raisonnable.

IronBarcode est le choix idéal lorsqu'un projet nécessite à la fois la lecture et la génération, cible .NET Frameworkou les déploiements MAUI multiplateformes, prévoit d'ajouter des formats de codes-barres au fil du temps ou requiert un déploiement dans des environnements Docker ou cloud. Le modèle à package unique et la sélection de format basée sur une énumération éliminent la surcharge qui s'accumule avec codeur à barres à mesure que la portée du projet s'élargit.

La décision pratique se résume à une question de trajectoire. Un projet qui restera assurément un simple générateur à format unique sans aucune exigence de lecture peut être parfaitement servi par Barcoder. Un projet présentant la moindre ambiguïté quant à ses exigences en matière de codes-barres (ajout de formats, ajout de lecture, déploiement multiplateforme) se heurtera aux limites architecturales de codeur à barres plus tôt que prévu. Les deux bibliothèques sont des outils honnêtes ; La question est de savoir laquelle correspond à l'étendue réelle des travaux.

Questions Fréquemment Posées

Qu'est-ce que BarCode ?

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 BarCode et IronBarcode ?

IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que BarCode requiert 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 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 Barcoder 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 à Barcoder ?

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 de l'acheter, contrairement à Barcoder ?

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 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 BarCode à IronBarcode ?

La migration de BarCode vers IronBarcode implique principalement de remplacer les appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, de supprimer les modèles de licence et de mettre à jour les 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().

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi