NetBarcode vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#
L'enum Type de Code-barres net n'a pas de QR Code. Lorsqu'un projet d'étiquettes d'expédition ajoute une exigence de code QR au troisième mois, les développeurs se tournent vers une deuxième bibliothèque. Cette seconde bibliothèque apporte sa propre interface API, son propre calendrier de publication et une dépendance partagée SixLabors.ImageSharp dont la version peut ne plus correspondre à celle requise par NetBarcode. Cette comparaison examine ce qu'est NetBarcode, ses points forts et les lacunes IronBarcode comble sans ajouter de deuxième ou troisième package.
Comprendre les codes-barres NetBarcode
NetBarcode est une bibliothèque open-source de génération de codes-barres .NET publiée sous licence MIT. Il a été conçu pour produire des images de codes-barres linéaires à partir de données textuelles, et il remplit parfaitement cette fonction. La bibliothèque cible les formats Code128, EAN-13, UPC-A et dix autres formats 1D, tous exposés via un constructeur simple et un petit ensemble de méthodes de sortie. Sa dépendance à l'égard de SixLabors.ImageSharp fournit la couche de rendu d'image et, depuis la version 1.8, cette dépendance est reflétée dans l'API publique par le biais du type de retour Image<Rgba32> sur GetImage().
NetBarcode ne prétend pas être une boîte à outils de codes-barres à usage général. Il ne possède aucune capacité de lecture et ne prend pas en charge les formats 2D. Ce sont des décisions délibérées concernant le périmètre du projet. Cette bibliothèque est parfaitement adaptée aux applications qui nécessitent uniquement des codes-barres 1D, et sa licence MIT facilite son adoption dans les contextes open-source.
Principales caractéristiques architecturales :
- Licence MIT : La bibliothèque elle-même est sous licence MIT, mais sa dépendance SixLabors.ImageSharp est soumise à une licence commerciale partagée qui s'applique à partir d'un certain seuil de revenus.
- 1D-Only Design: L'enum
Typedéfinit exactement 14 formats de codes-barres, tous linéaires ; Il n'y a pas d'entrées 2D - Dépendance de SixLabors.ImageSharp: Le rendu des images est délégué à ImageSharp, et depuis la version 1.8, la méthode
GetImage()renvoieImage<Rgba32>, exposant le type d'ImageSharp directement dans l'API publique - IPA basée sur des constructeurs : Les codes-barres sont créés avec
new Barcode(data, Type.X)et enregistrés ou récupérés avecSaveImageFile()ouGetImage() - Pas d'API de lecture : Code-barres net ne fait que générer des codes-barres ; il n'existe pas de méthode ou de classe pour décoder les images de codes-barres
- Pas de traitement par lots : chaque code-barres est un appel de constructeur indépendant ; pas d'énumération intégrée ni de pipeline de traitement par lots
Limite de conception de l'énumération de type
L'énumération Type est la liste officielle de ce que Code-barres net peut générer. Son examen révèle l'étendue de la bibliothèque :
// Code-barres net Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
// Code-barres net Type enum — complete list as of v1.8
public enum Type
{
Code128,
Code128A,
Code128B,
Code128C,
Code39,
Code39Extended,
Code93,
EAN8,
EAN13,
UPCA,
UPCE,
Codabar,
ITF,
MSI
}
// These entries do not exist — attempting to use them produces a CS0117 compile error:
// Type.QRCode — does not exist
// Type.DataMatrix — does not exist
// Type.PDF417 — does not exist
// Type.Aztec — does not exist
' Code-barres net Type enum — complete list as of v1.8
Public Enum Type
Code128
Code128A
Code128B
Code128C
Code39
Code39Extended
Code93
EAN8
EAN13
UPCA
UPCE
Codabar
ITF
MSI
End Enum
' These entries do not exist — attempting to use them produces a BC30456 compile error:
' Type.QRCode — does not exist
' Type.DataMatrix — does not exist
' Type.PDF417 — does not exist
' Type.Aztec — does not exist
Il ne s'agit pas d'une fonctionnalité manquante en attente d'une demande de fusion. L'énumération comporte quatorze entrées, toutes unidimensionnelles, ce qui correspond à la portée prévue de la bibliothèque. Toute application nécessitant des codes QR, DataMatrix, PDF417ou Aztèque doit se procurer un package distinct pour fournir ces formats.
Comprendre IronBarcode
IronBarcode est une bibliothèque commerciale .NET de codes-barres qui couvre à la fois la génération et la lecture dans un seul package. Il est développé et maintenu par Iron Software, avec des mises à jour régulières ciblant les versions actuelles de .NET . La surface statique de l'API de la bibliothèque est conçue de manière à ce que le passage d'un format de code-barres à un autre ne nécessite que la modification d'une seule constante - le même appel @BarcodeWriter.CreateBarcode qui génère le Code128 génère également des codes QR, DataMatrix, PDF417et Aztec.
IronBarcode gère la lecture des codes-barres par le biais de la classe BarcodeReader, qui accepte les fichiers images et les documents PDF et renvoie les résultats décodés avec identification du format. Cela signifie que la génération et la lecture partagent une seule dépendance, une seule licence et un seul ensemble de notes de version à suivre.
Caractéristiques principales :
- Génération et lecture unifiées: Les deux
BarcodeWriteretBarcodeReadersont inclus dans un seul paquet NuGet - Plus de 50 formats pris en charge : les formats 1D incluent tous les équivalents NetBarcode ; Les formats 2D incluent les codes QR, DataMatrix, PDF417, Aztèque et autres.
- Fluent Chain API:
BarcodeWriter.CreateBarcode(data, encoding)renvoie un objetGeneratedBarcodeavec des méthodes de sortie comprenantSaveAsPng(),SaveAsJpeg(),ToPngBinaryData(), et des surcharges basées sur les flux - Aucune dépendance à ImageSharp : le rendu d'images d'IronBarcode est autonome ; Aucune dépendance transitive SixLabors n'est introduite
- <L'API de lecture accepte directement les fichiers
.pdfen plus des formats d'image - Licence commerciale : une clé de licence est requise ; un mode d'essai est disponible et supprime les filigranes à l'achat
Comparaison des fonctionnalités
| Fonction | Code-barres net | Code-barres IronBarcode |
|---|---|---|
| génération de codes-barres 1D | Oui | Oui |
| génération de codes-barres 2D | Non | Oui |
| Lecture de codes-barres | Non | Oui |
| Prise en charge des fichiers PDF | Non | Oui |
| Symbologie totale | 14 | 50 ans et plus |
| Dépendance d'ImageSharp | Oui (permis partagé) | Non |
| Modèle de licence | MIT (+ conditions ImageSharp) | Commercial |
Comparaison détaillée des fonctionnalités
| Fonction | Code-barres net | Code-barres IronBarcode |
|---|---|---|
| Génération | ||
| Code 128, EAN-13, UPC-A, Code 39 | Oui | Oui |
| EAN-8, UPC-E, Code93, Codabar, ITF, MSI | Oui | Oui |
| Code QR | Non | Oui |
| Matrice de données | Non | Oui |
| PDF417 | Non | Oui |
| Aztèque | Non | Oui |
| GS1-128, GS1 DataBar | Non | Oui |
| Formats postaux (Intelligent Mail, Royal Mail) | Non | Oui |
| Sortie SVG | Non | Oui |
| En lisant | ||
| Décoder les images de codes-barres | Non | Oui |
| Lire à partir de documents PDF | Non | Oui |
| Détection de plusieurs codes-barres | Non | Oui |
| Détection automatique du format | Non | Oui |
| Conception d'API | ||
| Création basée sur un constructeur | Oui | Non (méthode statique) |
| Chaîne de sortie fluide | Non | Oui |
| Support au traitement par lots | Manuel | Intégré |
| Licences et dépendances | ||
| Licence de bibliothèque | MIT | Commercial |
| Dépendance d'ImageSharp | Oui | Non |
| Soutien commercial | Communauté | Professional |
Couverture du format
Approche NetBarcode
NetBarcode fournit 14 formats de codes-barres linéaires par le biais de l'enum Type. Dans ce contexte, la sélection du format est simple : il suffit de passer le membre d'énumération approprié au constructeur. La limite est tout aussi claire : toute tentative d'utilisation d'un format extérieur à l'énumération produit une erreur de compilation.
// Code-barres net — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// Code-barres net — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
// Code-barres net — formats that compile and produce output
using NetBarcode;
var code128 = new Barcode("12345678901234", Type.Code128);
code128.SaveImageFile("shipping.png");
var ean13 = new Barcode("5901234123457", Type.EAN13);
ean13.SaveImageFile("product.png");
// Code-barres net — formats that produce CS0117 compile errors
// var qr = new Barcode("data", Type.QRCode); // error CS0117
// var dm = new Barcode("data", Type.DataMatrix); // error CS0117
// var p417 = new Barcode("data", Type.PDF417); // error CS0117
// var aztec = new Barcode("data", Type.Aztec); // error CS0117
Imports NetBarcode
Dim code128 As New Barcode("12345678901234", Type.Code128)
code128.SaveImageFile("shipping.png")
Dim ean13 As New Barcode("5901234123457", Type.EAN13)
ean13.SaveImageFile("product.png")
' Code-barres net — formats that produce CS0117 compile errors
' Dim qr As New Barcode("data", Type.QRCode) ' error CS0117
' Dim dm As New Barcode("data", Type.DataMatrix) ' error CS0117
' Dim p417 As New Barcode("data", Type.PDF417) ' error CS0117
' Dim aztec As New Barcode("data", Type.Aztec) ' error CS0117
Les secteurs où cette limite devient une contrainte comprennent le suivi pharmaceutique (DataMatrix requis par les mandats de la FDA sur les codes-barres 2D), les cartes d'embarquement des compagnies aériennes (Aztec), les manifestes logistiques (PDF417) et le marketing mobile (code QR). Chacune de ces exigences élimine Code-barres net en tant que solution autonome.
Approche IronBarcode
IronBarcode expose tous les formats pris en charge par le biais de la même méthode BarcodeWriter.CreateBarcode. La surface de l'API ne change pas lorsque l'on passe d'un format 1D à un format 2D - seule la constante BarcodeEncoding diffère.
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
using IronBarCode;
// 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("shipping.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product.png");
// 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-label.png");
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec)
.SaveAsPng("boarding-pass.png");
Imports IronBarCode
' 1D formats — identical API to the 2D examples below
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("shipping.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product.png")
' 2D formats — same method, different encoding constant
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
BarcodeWriter.CreateBarcode("01034531200000111719112510ABCD1234", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-label.png")
BarcodeWriter.CreateBarcode("M1DOE/JOHN MR ABC123 JFKLHR 0012 123Y015A0001 100", BarcodeEncoding.Aztec) _
.SaveAsPng("boarding-pass.png")
La liste complète des constantes prises en charge est disponible dans le guide des formats de codes-barres pris en charge , couvrant tous les formats de génération de codes-barres 2D ainsi que l'ensemble complet des codes-barres 1D.
Conception d'API de génération
Approche NetBarcode
Le modèle de génération de Code-barres net est basé sur des constructeurs. Un objet Barcode est instancié avec la chaîne de données et une valeur Type enum. Le résultat est soit enregistré directement avec SaveImageFile(), soit récupéré en tant que Image<Rgba32> via GetImage(). Depuis la version 1.8, le type de retour de GetImage() est le type SixLabors.ImageSharp, ce qui signifie que tout code qui stocke ou traite la valeur de retour doit importer et travailler dans l'API ImageSharp.
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
using NetBarcode;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
// Constructor-based creation
var barcode = new Barcode("12345678901234", Type.Code128);
// Save to file — straightforward
barcode.SaveImageFile("code128.png");
// GetImage() returns Image<Rgba32> — ImageSharp import required
Image<Rgba32> image = barcode.GetImage();
// Further processing requires familiarity with the ImageSharp API
using var stream = new MemoryStream();
image.SaveAsPng(stream);
byte[] bytes = stream.ToArray();
Imports NetBarcode
Imports SixLabors.ImageSharp
Imports SixLabors.ImageSharp.PixelFormats
Imports System.IO
' Constructor-based creation
Dim barcode As New Barcode("12345678901234", Type.Code128)
' Save to file — straightforward
barcode.SaveImageFile("code128.png")
' GetImage() returns Image(Of Rgba32) — ImageSharp import required
Dim image As Image(Of Rgba32) = barcode.GetImage()
' Further processing requires familiarity with the ImageSharp API
Using stream As New MemoryStream()
image.SaveAsPng(stream)
Dim bytes As Byte() = stream.ToArray()
End Using
Le type de retour de la méthode GetImage() relie le code en aval à la bibliothèque ImageSharp. Toute méthode qui accepte ou stocke le résultat doit le déclarer comme Image<Rgba32>, ce qui introduit une dépendance transitive dans le code appelant.
Approche IronBarcode
IronBarcode utilise une chaîne fluide. BarcodeWriter.CreateBarcode renvoie un objet GeneratedBarcode qui comporte plusieurs méthodes de sortie. Le traitement des images est interne — aucun type ImageSharp n'est exposé au code appelant.
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
using IronBarCode;
// Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
.SaveAsPng("code128.png");
// Multiple output options on the same GeneratedBarcode object
var barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128);
barcode.SaveAsPng("code128.png");
barcode.SaveAsJpeg("code128.jpg");
byte[] bytes = barcode.ToPngBinaryData();
using var stream = new MemoryStream();
barcode.SaveAsPng(stream);
Imports IronBarCode
' Fluent generation — save directly to file
BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128) _
.SaveAsPng("code128.png")
' Multiple output options on the same GeneratedBarcode object
Dim barcode = BarcodeWriter.CreateBarcode("12345678901234", BarcodeEncoding.Code128)
barcode.SaveAsPng("code128.png")
barcode.SaveAsJpeg("code128.jpg")
Dim bytes As Byte() = barcode.ToPngBinaryData()
Using stream As New MemoryStream()
barcode.SaveAsPng(stream)
End Using
Les options détaillées de génération de codes-barres 1D, notamment la largeur, la hauteur et la configuration des étiquettes, sont décrites dans la documentation Code-barres IronBarcode .
Capacité de lecture
Approche NetBarcode
NetBarcode ne possède pas d'API de lecture. Il n'existe aucune méthode, classe ou configuration permettant de décoder une image de code-barres pour retrouver sa chaîne de données. Il s'agit d'une délimitation délibérée du périmètre, et non d'une omission en attendant une version. Un projet qui génère des codes-barres avec Code-barres net et qui doit ensuite les lire (pour valider une étiquette imprimée, scanner un envoi de retour ou extraire des valeurs d'une facture fournisseur) doit introduire une bibliothèque distincte à cet effet.
// Code-barres net — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
// Code-barres net — no reading method exists
// The following does not compile because the method does not exist:
// var result = barcode.Read("image.png"); // method does not exist
// The typical workaround requires ZXing.Net as a third-party dependency
' Code-barres net — no reading method exists
' The following does not compile because the method does not exist:
' Dim result = barcode.Read("image.png") ' method does not exist
' The typical workaround requires ZXing.Net as a third-party dependency
La bibliothèque ZXing .NET est l'ajout le plus courant pour la lecture en parallèle de NetBarcode, apportant une troisième surface d'API et un troisième package à gérer en version aux côtés de Code-barres net et de toute bibliothèque 2D déjà ajoutée pour les codes QR.
Approche IronBarcode
IronBarcode inclut BarcodeReader dans le même paquet que BarcodeWriter. L'API de lecture accepte les fichiers image et les documents PDF et renvoie une collection de résultats décodés, chacun contenant la valeur du code-barres, le type de format et le numéro de page s'il s'agit d'un PDF.
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
using IronBarCode;
// Read barcodes from an image file
var imageResults = BarcodeReader.Read("shipping-label.png");
foreach (var r in imageResults)
{
Console.WriteLine($"{r.BarcodeType}: {r.Value}");
}
// Read barcodes from a PDF document — no additional library required
var pdfResults = BarcodeReader.Read("invoice.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
Imports IronBarCode
' Read barcodes from an image file
Dim imageResults = BarcodeReader.Read("shipping-label.png")
For Each r In imageResults
Console.WriteLine($"{r.BarcodeType}: {r.Value}")
Next
' Read barcodes from a PDF document — no additional library required
Dim pdfResults = BarcodeReader.Read("invoice.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
Le guide de lecture des codes-barres à partir d'images aborde le réglage de la vitesse, la détection de plusieurs codes-barres et les options de correction d'image disponibles dans l'API de lecture.
Considérations relatives à la dépendance et aux licences
Code-barres net et ImageSharp
NetBarcode est distribué sous licence MIT. La bibliothèque SixLabors.ImageSharp dont elle dépend utilise un modèle différent : gratuite pour les projets open-source et pour les entreprises dont le chiffre d'affaires annuel brut est inférieur à un seuil défini, mais une licence commerciale est requise au-delà de ce seuil. Cette répartition s'applique indépendamment du fait qu'ImageSharp soit listé explicitement dans le .csproj d'un projet ou qu'il arrive transitoirement par NetBarcode.
<PackageReference Include="NetBarcode" Version="1.8.2" />
<PackageReference Include="NetBarcode" Version="1.8.2" />
Pour une entreprise de vente au détail ou de logistique traitant des codes-barres à grande échelle — le principal cas d'utilisation ciblé par Code-barres net — le chiffre d'affaires annuel est souvent supérieur au seuil auquel s'applique la licence commerciale ImageSharp. Un audit de conformité peut révéler cette obligation dissimulée dans l'arborescence du package.
La version v1.8 a introduit une conséquence supplémentaire de la dépendance d'ImageSharp : le type de retour de GetImage() est passé d'une représentation interne à SixLabors.ImageSharp.Image<Rgba32>. Le code existant qui appelait GetImage() sans typage explicite se cassait à la compilation, et de nouvelles directives using pour SixLabors.ImageSharp et SixLabors.ImageSharp.PixelFormats devenaient nécessaires. Lorsque l'API d'ImageSharp évolue dans les versions futures, l'interface API publique de Code-barres net est elle aussi affectée.
IronBarcode
IronBarcode ne dépend pas de SixLabors.ImageSharp. Ses conditions de licence sont énoncées directement sur la page de licence Code-barres IronBarcode , sans seuil de séparation ni obligation commerciale transitive. Une clé d'essai est disponible pour évaluation ; L'achat d'une licence permet de supprimer le filigrane d'essai des fichiers générés.
Référence de mappage d'API
| Code-barres net | Code-barres IronBarcode | Notes |
|---|---|---|
new Barcode(data, Type.Code128) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) |
Constructeur → méthode statique |
new Barcode(data, Type.EAN13) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN13) |
Mappage direct |
new Barcode(data, Type.UPCA) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCA) |
Mappage direct |
new Barcode(data, Type.Code39) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code39) |
Mappage direct |
new Barcode(data, Type.EAN8) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.EAN8) |
Mappage direct |
new Barcode(data, Type.UPCE) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.UPCE) |
Mappage direct |
new Barcode(data, Type.ITF) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.ITF) |
Mappage direct |
new Barcode(data, Type.Codabar) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Codabar) |
Mappage direct |
barcode.SaveImageFile("x.png") |
.SaveAsPng("x.png") |
renommer la méthode |
barcode.SaveImageFile("x.jpg") |
.SaveAsJpeg("x.jpg") |
renommer la méthode |
barcode.GetImage() → Image<Rgba32> |
.ToPngBinaryData() ou .SaveAsPng() |
Aucun type ImageSharp exposé |
Non Type.QRCode |
BarcodeEncoding.QRCode |
Nouvelle capacité |
Non Type.DataMatrix |
BarcodeEncoding.DataMatrix |
Nouvelle capacité |
Non Type.PDF417 |
BarcodeEncoding.PDF417 |
Nouvelle capacité |
Non Type.Aztec |
BarcodeEncoding.Aztec |
Nouvelle capacité |
| API de lecture indisponible | BarcodeReader.Read(path) |
Nouvelle capacité |
using NetBarcode; |
using IronBarCode; |
remplacement d'espace de noms |
using SixLabors.ImageSharp; |
Retirer | Plus nécessaire |
La documentation complète relative aux formats de codes-barres pris en charge contient le guide complet des formats disponibles.
Quand les équipes envisagent de passer de Code-barres net à IronBarcode
Exigences relatives aux codes QR et aux formats 2D
Le déclencheur le plus fréquent de l'évaluation d'une alternative à Code-barres net est une nouvelle exigence concernant les codes QR. Les applications qui commencent par la génération de codes-barres 1D pour les étiquettes de vente au détail ou les manifestes d'expédition reçoivent généralement une exigence ultérieure pour les codes QR — liens sans contact, liens profonds d'applications mobiles, campagnes marketing. L'enum Type n'ayant pas d'entrée QR, cette exigence ne peut pas être satisfaite par NetBarcode. Les équipes qui ajoutent une bibliothèque QR distincte pour combler cette lacune doivent ensuite faire l'objet d'une seconde évaluation lorsque Matrice de données est requis pour une intégration pharmaceutique, ou PDF417pour un transporteur logistique qui l'impose sur les étiquettes d'expédition.
La lecture des codes-barres devient nécessaire
Certains projets commencent par une simple génération et ajoutent ultérieurement une exigence de validation ou de traitement de documents : confirmer qu'un code-barres imprimé correspond à ses données sources, extraire les valeurs des codes-barres des factures fournisseurs entrantes ou scanner les étiquettes de retour des expéditions. Code-barres net ne propose aucune solution pour cela. L'ajout de ZXing .NET ou d'une bibliothèque de lecture comparable introduit une troisième API à apprendre et à maintenir dans la même base de code qui contient déjà Code-barres net et une bibliothèque QR. Les projets qui anticipent des besoins en lecture, même dans une phase ultérieure, trouvent souvent plus efficace de choisir une bibliothèque qui prend en compte ces deux aspects dès le départ.
Audit de la licence commerciale d'ImageSharp
Les analyses juridiques et de conformité des dépendances tierces font parfois apparaître la condition de licence commerciale SixLabors.ImageSharp intégrée dans l'arborescence du package NetBarcode. Pour les entreprises dont le chiffre d'affaires annuel brut dépasse le seuil, l'obligation s'applique que ImageSharp ait été choisi délibérément ou qu'il ait été acquis par transitivité via NetBarcode. Les équipes qui découvrent ce problème lors d'un audit — plutôt qu'avant l'adoption — doivent procéder à une correction rétroactive plutôt qu'à une migration planifiée. Évaluer la licence de dépendance avant de démarrer un projet est la solution la plus propre.
Réduction de la complexité des bibliothèques multiples
Les équipes qui ont accumulé Code-barres net pour la génération 1D, une bibliothèque spécifique QR pour la sortie 2D et ZXing .NET pour la lecture se retrouvent à devoir maintenir la compatibilité des versions entre trois packages distincts. Chaque cycle de mise à niveau nécessite de vérifier si les trois bibliothèques s'accordent sur leur version partagée d'ImageSharp. Chaque nouveau développeur travaillant sur le projet rencontre trois API différentes pour ce qui, conceptuellement, ne représente qu'un seul problème. La consolidation dans une bibliothèque de codes-barres unique simplifie l'intégration, réduit les risques de conflits de versions et concentre la maintenance sur un seul cycle de publication.
Considérations courantes en matière de migration
Échange de paquets et nettoyage des dépendances transitives
La première étape consiste à supprimer le Code-barres net avec dotnet remove package NetBarcode. Le paquet SixLabors.ImageSharp peut réapparaître dans l'arbre des dépendances si d'autres paquets du projet l'intègrent également de manière transitoire. Après la suppression, inspectez la liste de paquets restaurée avec dotnet list package --include-transitive pour confirmer si ImageSharp est toujours présent et si la condition de licence commerciale s'applique toujours.
Remplacement du type de retour de GetImage()
Tout code qui a stocké le résultat de GetImage() en tant que Image<Rgba32> doit être mis à jour. Le type ImageSharp n'a pas d'équivalent direct dans IronBarcode; Le remplacement dépend de l'utilisation ultérieure de l'image. Le code qui enregistre l'image dans un flux peut être remplacé par .SaveAsPng(stream) directement sur l'objet GeneratedBarcode. Le code qui récupère des octets bruts peut utiliser .ToPngBinaryData(). Le code qui effectue des manipulations ImageSharp supplémentaires sur l'image renvoyée devra évaluer ces opérations individuellement.
Mise à jour de l'espace de noms
Les fichiers qui ont importé using NetBarcode;, using SixLabors.ImageSharp;, using SixLabors.ImageSharp.PixelFormats;, ou using SixLabors.Fonts; doivent être remplacés par using IronBarCode;. Une recherche à l'échelle du projet de ces instructions " using " permet d'identifier chaque fichier nécessitant une attention particulière avant la tentative de compilation.
Fonctionnalités supplémentaires IronBarcode
Outre les fonctionnalités de base de génération et de lecture présentées dans cette comparaison, Code-barres IronBarcode offre :
- Sortie de code-barres SVG : Générez des images de codes-barres au format vectoriel adaptées aux flux d'impression et à la conception d'étiquettes évolutives.
- Style des codes-barres : configurez la couleur des barres, la couleur de fond, la police des annotations, les marges et la rotation des codes-barres générés.
- GS1-128 et GS1 DataBar : Codes-barres structurés avec identifiant d'application pour la conformité dans le commerce de détail et la chaîne d'approvisionnement
- Formats postaux : Courrier intelligent, Royal Mail et autres symbologies postales pour les applications d'envoi. Extraction de codes-barres PDF : Lisez les codes-barres directement à partir de documents PDF multipages sans bibliothèque PDF externe.
- Génération par lots : Traitement efficace des ensembles de données de codes-barres au sein d'un seul pipeline
- Cibles MAUI et mobiles : Code-barres IronBarcode prend en charge les applications .NET MAUI pour les flux de travail de codes-barres multiplateformes mobiles et de bureau.
Compatibilité .NET et préparation à l'avenir
IronBarcode cible .NET 8, .NET 9 et maintient la compatibilité avec .NET Standard pour les projets qui n'ont pas encore migré vers les versions modernes de .NET. Comme .NET 10 est attendu pour fin 2026, le rythme de publication régulier d'Iron Software garantit que les mises à jour de compatibilité suivent chaque version majeure de .NET . Code-barres net cible .NET Standard 2.0 et est fonctionnel sur les environnements d'exécution actuels grâce à cette couche de compatibilité, bien que la fréquence de mise à jour de la bibliothèque et l'ensemble de formats 2D soient fixés par son périmètre de conception.
Conclusion
NetBarcode et Code-barres IronBarcode occupent des positions différentes sur le spectre des bibliothèques de codes-barres. Code-barres net est une implémentation ciblée et propre de la génération de codes-barres 1D : quatorze formats, une API de construction simple et une licence MIT qui facilite l'adoption pour les projets open source respectant le seuil de revenus d'ImageSharp. Code-barres IronBarcode est une boîte à outils plus large couvrant la génération dans plus de 50 formats, la lecture à partir d'images et de PDF, et une API fluide qui traite les formats 1D et 2D de manière identique.
Pour les projets dont les exigences se limitent véritablement à la génération de codes-barres linéaires — un système de point de vente produisant des codes EAN-13 et UPC-A pour les scanners de vente au détail traditionnels, ou un outil interne à durée de vie fixe et courte — Code-barres net fournit ce qui est nécessaire sans introduire de dépendance commerciale. La bibliothèque est bien construite dans les limites de son champ d'application, et ce champ d'application est explicite dès le premier coup d'œil à l'enum Type.
Pour les projets où la portée du format peut s'étendre, où la lecture sera éventuellement nécessaire, ou lorsqu'un examen de conformité de la dépendance transitive d'ImageSharp est une préoccupation, Code-barres IronBarcode répond à ces trois besoins grâce à un seul package. Les équipes qui commencent avec Code-barres net pour la génération 1D et ajoutent plus tard QRCoder pour la 2D et ZXing .NET pour la lecture accumulent trois obligations de maintenance de bibliothèque distinctes ; Code-barres IronBarcode les regroupe en un seul.
Ce choix découle directement des exigences du projet. Si quatorze formats 1D et aucune capacité de lecture ne correspondent exactement aux spécifications, Code-barres net est un choix techniquement judicieux. Si le cahier des charges inclut un format 2D, un flux de travail de lecture ou toute préoccupation relative aux conditions de licence d'ImageSharp, Code-barres IronBarcode constitue la solution la plus complète.
Questions Fréquemment Posées
Qu'est-ce que NetBarcode ?
NetBarcode 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 NetBarcode et IronBarcode ?
IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que NetBarcode 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 NetBarcode ?
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 NetBarcode 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 à NetBarcode ?
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 à NetBarcode ?
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 NetBarcode 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 NetBarcode à IronBarcode ?
La migration de NetBarcode vers IronBarcode consiste principalement à remplacer les appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, à supprimer les modèles de licence et à 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().

