QRCoder.NET vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#
QRCoder excelle dans un domaine : la génération de codes QR en C# pur, sans aucune dépendance externe, sous une licence MIT sans restriction, et grâce à une API bien pensée qui gère tout, du formatage standard de la charge utile à une variété de moteurs de rendu de sortie. Avec plus de 8 millions de téléchargements de NuGet , sa réputation n'est pas usurpée. La comparaison avec Code-barres IronBarcode n'est pas un jugement de qualité, mais une question de portée. Code-barres IronBarcode prend en charge plus de 50 formats de codes-barres, assure la lecture et l'écriture, et s'intègre aux documents PDF via une API unique et cohérente. Pour les équipes dont les besoins vont au-delà de la simple génération de QR codes, il est essentiel de comprendre où s'arrête intentionnellement la conception de QRCoder.
Comprendre le codeur QR
QRCoder a été créé par Raffael Herrmann en 2013 et est maintenant maintenu par Shane32. La bibliothèque est entièrement écrite en C# sans aucune dépendance externe : aucun conflit de version avec SkiaSharp, aucun problème de licence commerciale avec ImageSharp, aucun binaire natif à déployer. Il fonctionne sur toutes les plateformes compatibles avec .NET .
La licence MIT est véritablement sans restriction. Contrairement à certaines bibliothèques populaires où un seuil de revenus déclenche l'obligation d'une licence commerciale, Codeur QR ne comporte aucune restriction commerciale cachée. Cette distinction est importante pour les équipes qui développent des applications commerciales.
La classe PayloadGenerator ajoute une valeur pratique significative : elle gère les formats de données de code QR courants - identifiants WiFi, cartes de contact (vCard), événements de calendrier, messages SMS et points de géolocalisation - de sorte que les développeurs n'ont pas besoin de mémoriser le format de fil pour chaque norme. La variété des moteurs de rendu est également un point fort, et ce, pour de multiples types de sortie.
Principales caractéristiques architecturales :
- Aucune dépendance externe : du C# pur sans aucune exigence d'environnement d'exécution tiers, simplifiant le déploiement dans des environnements conteneurisés ou restreints.
- Licence MIT sans restriction de revenus : utilisation véritablement gratuite à des fins commerciales, sans seuil de revenus ni déclencheur commercial.
- Assistants PayloadGenerator : Formateurs intégrés pour WiFi, vCard, CalendarEvent, SMS, Geo et autres normes de charge utile QR courantes
- Variété des formats de rendu : octets PNG, chaîne SVG, art ASCII, Base64, BMP et plusieurs autres formats de sortie
- Contrôle complet de la correction d'erreurs : les quatre niveaux ECC (L, M, Q, H) sont activés.
- Prise en charge des micro QR : variante QR compacte pour les étiquettes à espace limité, non disponible dans toutes les bibliothèques de codes-barres
- Conception exclusivement dédiée aux QR codes : l'interface de l'API se concentre exclusivement sur la génération de QR codes ; aucun format 1D, Matrice de données ou lecture de codes-barres n'est pris en charge.
Conception avec QR uniquement
QRCoder sépare l'étape de création des données de l'étape de rendu. Un QRCodeGenerator produit un objet intermédiaire QRCodeData, qui est ensuite transmis à une classe de rendu. Ce modèle permet un contrôle précis du format de sortie, au prix d'objets supplémentaires :
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);
// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
// PNG bytes via PngByteQRCode
var pngQR = new PngByteQRCode(qrCodeData);
byte[] pngBytes = pngQR.GetGraphic(20); // 20px per module
File.WriteAllBytes("qr.png", pngBytes);
// SVG string via SvgQRCode
string svgContent = new SvgQRCode(qrCodeData).GetGraphic(10);
File.WriteAllText("qr.svg", svgContent);
Imports QRCoder
Imports System.IO
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
' PNG bytes via PngByteQRCode
Dim pngQR As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = pngQR.GetGraphic(20) ' 20px per module
File.WriteAllBytes("qr.png", pngBytes)
' SVG string via SvgQRCode
Dim svgContent As String = New SvgQRCode(qrCodeData).GetGraphic(10)
File.WriteAllText("qr.svg", svgContent)
La méthode QRCodeGenerator.CreateQrCode est le seul point d'entrée pour la création de code - il n'y a pas de CreateCode128, pas de CreateDataMatrix, pas de CreateEAN13. La bibliothèque respecte pleinement son périmètre d'action prévu.
Comprendre IronBarcode
IronBarcode est une bibliothèque commerciale .NET de codes-barres développée par Iron Software , qui permet de générer et de lire plus de 50 formats de codes-barres via une API unique et cohérente. Plutôt que de maintenir des bibliothèques distinctes pour différentes familles de formats, Code-barres IronBarcode expose tous les formats par le biais de paramètres BarcodeEncoding sur les mêmes points d'entrée statiques BarcodeWriter et BarcodeReader.
La bibliothèque utilise un modèle d'API statique : BarcodeWriter.CreateBarcode ne nécessite aucune configuration d'instance, et BarcodeReader.Read accepte les chemins de fichiers, les flux, les tableaux d'octets et les objets System.Drawing.Bitmap avec détection automatique du multiformat. La prise en charge des documents PDF — à la fois la lecture des codes-barres à partir des pages PDF et l'intégration des codes-barres dans les PDF — est incluse sans dépendances externes.
Caractéristiques principales :
- 50+ formats de BarCodes: QR Code, Code 128, EAN-13, UPC-A, DataMatrix, PDF417, Aztec, MaxiCode, et bien d'autres encore à travers un seul paramètre
BarcodeEncoding@ - L'API de lecture intégrée:
BarcodeReader.Readgère les images, les PDF et les flux avec détection automatique du format - aucune autre bibliothèque n'est nécessaire - Personnalisation du code QR: Incorporation de logos, changements de couleurs et contrôle des zones silencieuses par le biais des méthodes
QRCodeWriter - Intégration PDF : Lecture des codes-barres sur les pages PDF et intégration de codes-barres dans les documents PDF existants
- Modèle d'API statique: Aucune instance de générateur n'est requise -
BarcodeWriterest une classe statique Licence commerciale : à partir de 749 $ pour une licence mono-développeur sans restriction de format.
Comparaison des fonctionnalités
Le tableau suivant résume les différences fondamentales entre Codeur QR et IronBarcode:
| Fonction | Codeur QR | Code-barres IronBarcode |
|---|---|---|
| Génération de code QR | Oui, excellent | Oui |
| Génération de codes-barres 1D | Non | Oui (plus de 30 formats) |
| Autres formats 2D | Non | Oui (DataMatrix, PDF417, Aztec, etc.) |
| Lecture de codes-barres | Non | Oui — détection automatique |
| Prise en charge des fichiers PDF | Non | Oui — lire et tamponner |
| Licence | MIT — véritablement gratuit | Commercial (749 $ pour un seul développeur) |
Comparaison détaillée des fonctionnalités
| Fonction | Codeur QR | Code-barres IronBarcode |
|---|---|---|
| Génération | ||
| Code QR | Oui | Oui |
| Micro QR | Oui | Non |
| Code 128 | Non | Oui |
| EAN-13 / UPC-A | Non | Oui |
| Matrice de données | Non | Oui |
| PDF417 | Non | Oui |
| Aztèque | Non | Oui |
| Formats totaux | 1 | 50 ans et plus |
| Fonctionnalités du code QR | ||
| Correction d'erreur (L/M/Q/H) | Oui | Oui |
| Intégration du logo | Oui | Oui |
| Personnalisation des couleurs | Oui | Oui |
| Sortie SVG | Oui | Oui |
| Sortie d'art ASCII | Oui | Non |
| Sortie Base64 | Oui | Non |
| Assistants PayloadGenerator | Oui | Non — construction manuelle des cordes |
| En lisant | ||
| Décoder à partir de l'image | Non | Oui |
| Décoder à partir d'un PDF | Non | Oui |
| Détection automatique du format | Non | Oui |
| Intégration | ||
| Estampillage de codes-barres PDF | Non | Oui |
| Aucune dépendance externe | Oui | Autonome |
| Licence | ||
| Type de licence | MIT | Commercial |
| restrictions de revenus | Aucun | Aucun |
| Tarification par format | Aucun | Aucun |
Génération de code QR
Les deux bibliothèques génèrent des codes QR, mais leurs API reflètent des philosophies de conception différentes quant à la manière dont l'étape de génération et l'étape de rendu sont liées.
Approche QRCoder
QRCoder utilise un modèle en deux phases : QRCodeGenerator.CreateQrCode produit un objet intermédiaire QRCodeData codant les données et le niveau de correction des erreurs, et une classe de rendu distincte convertit cet objet intermédiaire dans le format de sortie souhaité. Le niveau ECC est un paramètre obligatoire sans valeur par défaut ; les développeurs doivent le choisir explicitement :
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
using QRCoder;
using System.IO;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.M
);
var qrCode = new PngByteQRCode(qrCodeData);
byte[] pngBytes = qrCode.GetGraphic(20); // pixels per module
File.WriteAllBytes("qr.png", pngBytes);
Imports QRCoder
Imports System.IO
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.M)
Dim qrCode As New PngByteQRCode(qrCodeData)
Dim pngBytes As Byte() = qrCode.GetGraphic(20) ' pixels per module
File.WriteAllBytes("qr.png", pngBytes)
Ce modèle présente l'avantage de réutiliser l'objet qrCodeData pour plusieurs formats de sortie sans régénérer les données du code. Les classes de rendu comprennent PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, et BitmapByteQRCode, entre autres.
Approche IronBarcode
IronBarcode regroupe la génération et le rendu en une chaîne fluide sur la classe statique BarcodeWriter. Le paramètre BarcodeEncoding.QRCode sélectionne le format, et les méthodes de terminal telles que SaveAsPng ou ToPngBinaryData déterminent la sortie :
using IronBarCode;
// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.SaveAsPng("qr.png");
using IronBarCode;
// Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.ResizeTo(400, 400)
.SaveAsPng("qr.png");
Imports IronBarCode
' Single fluent call — no intermediate objects
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.ResizeTo(400, 400) _
.SaveAsPng("qr.png")
Pour les cas nécessitant un contrôle explicite de la correction des erreurs, la classe QRCodeWriter fournit des options spécifiques au format :
using IronBarCode;
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
using IronBarCode;
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Medium
);
qr.SaveAsPng("qr.png");
Imports IronBarCode
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Medium)
qr.SaveAsPng("qr.png")
Le guide de création de codes-barres 2D IronBarcode couvre tous les formats 2D pris en charge, notamment QR Code, DataMatrix, PDF417et Aztec, par le biais du même BarcodeWriter point d'entrée.
Personnalisation du code QR
Les deux bibliothèques prennent en charge l'intégration de logos et les changements de couleur sur les codes QR, mais l'approche diffère selon les types de systèmes requis.
Approche QRCoder
L'intégration du logo Codeur QR passe par la classe QRCode renderer (distincte de PngByteQRCode), qui expose une surcharge GetGraphic acceptant un System.Drawing.Bitmap. Cela signifie que le code d'appel doit fonctionner avec System.Drawing directement pour charger le fichier du logo :
using QRCoder;
using System.Drawing;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
using QRCoder;
using System.Drawing;
var qrGenerator = new QRCodeGenerator();
var qrCodeData = qrGenerator.CreateQrCode(
"https://example.com",
QRCodeGenerator.ECCLevel.H // High ECC required when logo occludes part of the code
);
var qrCode = new QRCode(qrCodeData);
var logoBitmap = new Bitmap("logo.png");
var qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap);
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png);
Imports QRCoder
Imports System.Drawing
Dim qrGenerator As New QRCodeGenerator()
Dim qrCodeData = qrGenerator.CreateQrCode("https://example.com", QRCodeGenerator.ECCLevel.H) ' High ECC required when logo occludes part of the code
Dim qrCode As New QRCode(qrCodeData)
Dim logoBitmap As New Bitmap("logo.png")
Dim qrBitmap = qrCode.GetGraphic(10, Color.Black, Color.White, logoBitmap)
qrBitmap.Save("qr-logo.png", System.Drawing.Imaging.ImageFormat.Png)
La personnalisation des couleurs suit un schéma similaire grâce aux paramètres GetGraphic de la surcharge darkColor et lightColor.
Approche IronBarcode
IronBarcode expose l'intégration de logo et les changements de couleur en tant que méthodes nommées sur l'objet de résultat QRCodeWriter. La méthode AddBrandLogo accepte un chemin de fichier, et ChangeBarCodeColor accepte une valeur Color :
using IronBarCode;
using System.Drawing;
// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");
// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
using IronBarCode;
using System.Drawing;
// Logo embedding
var qr = QRCodeWriter.CreateQrCode(
"https://example.com",
500,
QRCodeWriter.QrErrorCorrectionLevel.Highest
);
qr.AddBrandLogo("logo.png");
qr.SaveAsPng("qr-logo.png");
// Colour customisation
var coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500);
coloredQr.ChangeBarCodeColor(Color.DarkBlue);
coloredQr.SaveAsPng("colored-qr.png");
Imports IronBarCode
Imports System.Drawing
' Logo embedding
Dim qr = QRCodeWriter.CreateQrCode("https://example.com", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
qr.AddBrandLogo("logo.png")
qr.SaveAsPng("qr-logo.png")
' Colour customisation
Dim coloredQr = QRCodeWriter.CreateQrCode("https://example.com", 500)
coloredQr.ChangeBarCodeColor(Color.DarkBlue)
coloredQr.SaveAsPng("colored-qr.png")
Le guide de personnalisation du style de code QR couvre en détail la taille du logo, les combinaisons de couleurs et le contrôle de la zone silencieuse.
Lecture de codes-barres
La lecture des codes-barres représente la différence de capacité la plus marquée entre les deux bibliothèques.
Approche QRCoder
QRCoder ne possède pas d'API de lecture de codes-barres. La classe QRCodeGenerator et toutes les classes de rendu sont des classes de génération uniquement. Il n'existe aucune méthode pour décoder un code QR à partir d'une image, d'un fichier ou d'un flux. Les applications qui doivent à la fois générer et lire des codes QR doivent ajouter une bibliothèque distincte — généralement ZXing .NET — avec sa propre API, son propre espace de noms et son propre cycle de maintenance :
// Codeur QR has no reading API.
// These methods do not exist:
// qrGenerator.Decode("image.png");
// QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
// Codeur QR has no reading API.
// These methods do not exist:
// qrGenerator.Decode("image.png");
// QRCodeReader.Read("image.png");
//
// A separate library (e.g., ZXing.Net) is required for decoding.
' Codeur QR has no reading API.
' These methods do not exist:
' qrGenerator.Decode("image.png")
' QRCodeReader.Read("image.png")
'
' A separate library (e.g., ZXing.Net) is required for decoding.
Il s'agit d'un choix de conception, et non d'un oubli : Codeur QR est explicitement une bibliothèque de génération.
Approche IronBarcode
IronBarcode inclut une API de lecture dans le même package. BarcodeReader.Read accepte les fichiers images, les fichiers PDF, les flux et les objets System.Drawing.Bitmap. Il détecte automatiquement les formats de codes-barres sans que l'appelant ait besoin de préciser le format à rechercher, et renvoie tous les codes-barres trouvés dans l'image :
using IronBarCode;
// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
Console.WriteLine(result.Text); // decoded value
Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
using IronBarCode;
// Reading a QR code — no separate library required
var results = BarcodeReader.Read("qr.png");
foreach (var result in results)
{
Console.WriteLine(result.Text); // decoded value
Console.WriteLine(result.BarcodeType); // QRCode, Code128, EAN13, etc.
}
Imports IronBarCode
' Reading a QR code — no separate library required
Dim results = BarcodeReader.Read("qr.png")
For Each result In results
Console.WriteLine(result.Text) ' decoded value
Console.WriteLine(result.BarcodeType) ' QRCode, Code128, EAN13, etc.
Next
Le guide de lecture des codes-barres à partir d'images couvre la lecture à partir de fichiers PDF, de documents multipages, de flux et d'images basse résolution ou bruitées via le même point d'entrée.
Format au-delà des QR
Approche QRCoder
QRCoder génère exclusivement des codes QR — c'est voulu. La méthode QRCodeGenerator.CreateQrCode est le seul point d'entrée de génération fourni par la bibliothèque. Les projets qui commencent avec des codes QR et qui nécessitent par la suite des étiquettes d'expédition Code 128, des codes produits EAN-13 ou des codes de conformité pharmaceutique Matrice de données doivent introduire une deuxième bibliothèque pour couvrir chaque format supplémentaire :
using QRCoder;
// Codeur QR is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);
// Code 128requires a different library (e.g., NetBarcode)
// Matrice de données requires yet another library
// Reading any format requires yet another library
using QRCoder;
// Codeur QR is limited to QR — other formats require separate packages
var qrGenerator = new QRCodeGenerator();
var qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M);
// Code 128requires a different library (e.g., NetBarcode)
// Matrice de données requires yet another library
// Reading any format requires yet another library
Imports QRCoder
' Codeur QR is limited to QR — other formats require separate packages
Dim qrGenerator As New QRCodeGenerator()
Dim qr = qrGenerator.CreateQrCode("scan-to-track", QRCodeGenerator.ECCLevel.M)
' Code 128 requires a different library (e.g., NetBarcode)
' Matrice de données requires yet another library
' Reading any format requires yet another library
Approche IronBarcode
IronBarcode couvre toutes les familles de formats à travers le même BarcodeWriter.CreateBarcode point d'entrée. Pour passer du code QR au Code 128à DataMatrix, il suffit de modifier le paramètre BarcodeEncoding - pas de paquets supplémentaires, pas de nouveaux espaces de noms, pas d'API distinctes :
using IronBarCode;
// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
.SaveAsPng("campaign-qr.png");
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-code.png");
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-code.png");
using IronBarCode;
// All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode)
.SaveAsPng("campaign-qr.png");
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128)
.SaveAsPng("shipping-label.png");
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13)
.SaveAsPng("product-code.png");
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix)
.SaveAsPng("pharma-code.png");
Imports IronBarCode
' All formats — one API, one package
BarcodeWriter.CreateBarcode("scan-to-track", BarcodeEncoding.QRCode) _
.SaveAsPng("campaign-qr.png")
BarcodeWriter.CreateBarcode("SHIP-12345", BarcodeEncoding.Code128) _
.SaveAsPng("shipping-label.png")
BarcodeWriter.CreateBarcode("5901234123457", BarcodeEncoding.EAN13) _
.SaveAsPng("product-code.png")
BarcodeWriter.CreateBarcode("LOT-ABC-123", BarcodeEncoding.DataMatrix) _
.SaveAsPng("pharma-code.png")
Référence de mappage d'API
| Codeur QR | Code-barres IronBarcode |
|---|---|
new QRCodeGenerator() |
Classe statique — aucune instance nécessaire |
qrGenerator.CreateQrCode(data, ECCLevel.M) |
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.QRCode) |
new PngByteQRCode(qrCodeData) |
Inutile — le rendu fait partie de la chaîne |
qrCode.GetGraphic(20) |
.ToPngBinaryData() avec .ResizeTo(w, h) |
new SvgQRCode(qrCodeData).GetGraphic(10) |
.SaveAsSvg(path) |
new QRCode(qrCodeData).GetGraphic(...) |
QRCodeWriter.CreateQrCode(data, size, level) |
QRCodeGenerator.ECCLevel.L |
QRCodeWriter.QrErrorCorrectionLevel.Low |
QRCodeGenerator.ECCLevel.M |
QRCodeWriter.QrErrorCorrectionLevel.Medium |
QRCodeGenerator.ECCLevel.Q |
QRCodeWriter.QrErrorCorrectionLevel.Quartile |
QRCodeGenerator.ECCLevel.H |
QRCodeWriter.QrErrorCorrectionLevel.Highest |
PayloadGenerator.WiFi(...).ToString() |
"WIFI:T:WPA;S:{ssid};P:{pass};;" |
| API de lecture indisponible | BarcodeReader.Read(path) |
| Format QR uniquement | plus de 50 formats via BarcodeEncoding.* |
Quand les équipes envisagent de passer de Codeur QR à IronBarcode
Pour les équipes dont les projets sont et resteront exclusivement basés sur les QR codes, Codeur QR est une bibliothèque bien maintenue qui continue de remplir parfaitement son rôle. Les scénarios ci-dessous décrivent les conditions qui amènent les équipes à réévaluer leur position.
Exigences de format : aller au-delà des QR codes
La plupart des exigences en matière de codes-barres commencent par les codes QR, et Codeur QR gère cette première étape de manière fiable. La tension apparaît lorsqu'un deuxième format entre en scène. Les équipes logistiques qui ont besoin d'étiquettes Code 128pour l'expédition, les opérations de vente au détail qui exigent des codes produits EAN-13, les flux de travail pharmaceutiques qui imposent Matrice de données pour la sérialisation — chaque nouveau format pousse une équipe à ajouter une nouvelle dépendance NuGet . Le coût d'intégration de chaque bibliothèque supplémentaire comprend un nouvel espace de noms à apprendre, un nouveau cycle de publication à surveiller et un nouveau point de conflit de versions potentiel lors des mises à niveau .NET .
La lecture des codes-barres devient nécessaire
Une application qui génère des codes QR sortants pour une campagne est un système de génération uniquement. Une application qui traite également les expéditions entrantes, vérifie les codes produits à l'arrivée ou valide les billets lors d'un événement est un système de génération et de lecture. De par sa conception, Codeur QR ne possède aucune capacité de lecture ; cette lacune doit être comblée par une seconde bibliothèque. L'introduction d'une bibliothèque de lecture modifie considérablement l'empreinte d'intégration du sous-système de codes-barres, en particulier si la bibliothèque de lecture impose ses propres exigences de spécification de format ou contraintes de sécurité des threads.
Charge de maintenance de plusieurs bibliothèques
Le schéma d'accumulation naturel d'un projet basé sur Codeur QR suit un chemin prévisible : Codeur QR pour la génération de QR codes, une bibliothèque de codes-barres 1D pour les étiquettes d'expédition, une bibliothèque de lecture pour le décodage. Chaque bibliothèque possède sa propre documentation, son propre rythme de versionnage et son propre historique des changements importants. Une mise à jour mineure de la version .NET pour une bibliothèque peut coïncider avec une modification incompatible dans une autre. Les équipes qui gèrent cette accumulation sur plusieurs années indiquent que le coût caché ne réside pas dans l'intégration initiale, mais dans les frais de maintenance cumulatifs sur plusieurs cycles de mise à niveau.
Prise en charge des documents PDF
Il n'est pas possible avec Codeur QR de générer des codes-barres à intégrer dans des rapports PDF, ni d'extraire des codes-barres de documents PDF entrants dans un pipeline de traitement de documents. La prise en charge des fichiers PDF nécessite soit une bibliothèque PDF complète avec fonctionnalités de codes-barres, soit une combinaison dédiée de bibliothèques. Les équipes qui développent des flux de travail axés sur les documents (traitement des factures, rapports de conformité, génération d'étiquettes à partir de modèles PDF) constatent que le périmètre de Codeur QR recoupe les exigences des PDF dès le début du cycle de vie d'un projet.
Considérations courantes en matière de migration
Format de chaîne PayloadGenerator
Les classes d'aide de Codeur QR PayloadGenerator produisent des chaînes conformes aux normes publiques de charge utile de code QR. Le format WiFi, par exemple, produit WIFI:T:WPA;S:NetworkName;P:Password;;. Ces chaînes de caractères peuvent être construites directement dans Code-barres IronBarcode sans classe d'assistance, car le format est une norme publique documentée par la spécification du code QR. Les équipes qui utilisent beaucoup de PayloadGenerator devraient prévoir d'écrire de petites méthodes d'aide statiques qui reproduisent la construction de la chaîne.
Cartographie des énumérations ECCLevel
QRCoder utilise QRCodeGenerator.ECCLevel avec les valeurs L, M, Q, H. Code-barres IronBarcode utilise QRCodeWriter.QrErrorCorrectionLevel avec les valeurs Low, Medium, Quartile, et Highest. Le mappage est direct, mais les références d'énumération doivent être mises à jour sur tous les sites d'appel. Là où Codeur QR exigeait une sélection ECC explicite sur chaque appel CreateQrCode, Code-barres IronBarcode applique une valeur par défaut judicieuse lorsque le chemin BarcodeWriter.CreateBarcode est utilisé.
Suppression de la classe de rendu
Les classes de rendu de Codeur QR - PngByteQRCode, SvgQRCode, AsciiQRCode, Base64QRCode, QRCode - deviennent inutiles après la migration. Code-barres IronBarcode intègre le rendu dans la chaîne fluide sur GeneratedBarcode, de sorte que le modèle d'objet de rendu intermédiaire n'est pas reporté. Le code qui instancie ces classes de rendu peut être remplacé par des appels de méthodes terminales sur le résultat BarcodeWriter.
Fonctionnalités supplémentaires IronBarcode
Les fonctionnalités suivantes Code-barres IronBarcode n'ont pas été abordées dans les sections comparatives ci-dessus :
- Intégration de codes-barres dans les PDF : Intégrez des codes-barres directement dans des documents PDF existants à des coordonnées de page spécifiées.
- Détection de plusieurs codes-barres : Lecture simultanée de tous les codes-barres présents dans une image, quel que soit leur format.
- Entrée de flux et de tableaux d'octets:
BarcodeReader.Readaccepte les entréesStream,byte[], etSystem.Drawing.Bitmapsans nécessiter d'entrées/sorties de fichiers - Annotations et marges des codes-barres : Ajoutez des annotations textuelles lisibles par l'homme et configurez la largeur des marges sur les codes-barres générés.
- Diversité des formats d'image : Sortie aux formats PNG, JPEG, TIFF, BMP, GIF, HTML et SVG à partir de la même chaîne de génération
- Prétraitement des images bruitées : Prétraitement automatique des images pour améliorer les taux de lecture sur les entrées floues, déformées ou à faible contraste
Compatibilité .NET et préparation à l'avenir
IronBarcode maintient un développement actif avec des mises à jour régulières ciblant les versions .NET actuelles et à venir. La bibliothèque prend en charge .NET 8, .NET 9 et les mises à jour de compatibilité pour .NET 10 (prévues fin 2026) font partie du calendrier de publication continu d'Iron Software. Codeur QR est également activement maintenu et fonctionne sur toutes les cibles .NET actuelles ; Sa conception sans dépendance simplifie la compatibilité ascendante. Ces deux bibliothèques conviennent aux projets .NET à long terme. Pour les équipes qui choisissent IronBarcode, le modèle de support commercial offre un accès direct à l'assistance technique et à la résolution prioritaire des bugs.
Conclusion
QRCoder et Code-barres IronBarcode répondent au même besoin initial — la génération de codes QR — à partir de points de départ architecturaux différents. Codeur QR est une bibliothèque monoformat conçue à cet effet, dont le design s'arrête intentionnellement au format QR. Code-barres IronBarcode est une bibliothèque multiformat qui couvre la génération, la lecture et l'intégration PDF de plus de 50 formats de codes-barres. La comparaison ne porte pas sur une bonne bibliothèque et une meilleure bibliothèque ; Il se situe entre un outil spécialisé et un outil à usage général.
QRCoder est le choix idéal pour les projets où la génération de codes QR est une exigence permanente et définie. Son empreinte zéro dépendance, sa licence MIT sans restriction et ses aides PayloadGenerator en font une excellente sélection pour un flux de travail d'inscription 2FA, un générateur de QR de campagne marketing ou tout contexte où le champ d'application du code-barres est définitivement fixé. La bibliothèque est bien entretenue, largement utilisée et remplit sa fonction de manière fiable. Les équipes présentant ces caractéristiques n'ont rien à gagner à changer de poste.
IronBarcode devient le choix le plus pratique lorsque les exigences d'un projet en matière de codes-barres vont — ou sont susceptibles de aller — au-delà de la génération de QR codes. Les applications qui doivent lire les codes des envois entrants ou des documents numérisés, générer des étiquettes Code 128en parallèle des campagnes QR ou produire des codes-barres intégrés dans des rapports PDF bénéficient d'une API unique et cohérente pour toutes ces tâches. Le guide des alternatives à Codeur QR en C# fournit un contexte supplémentaire sur les limites des bibliothèques dédiées aux QR codes uniquement dans les environnements de production. Le prix de la licence commence à 749 $ et est entièrement détaillé sur la page de licence IronBarcode .
En toute honnêteté, le choix de l'outil approprié dépend entièrement de l'envergure du projet. Pour les besoins permanents liés exclusivement aux QR codes, Codeur QR offre une solution complète et gratuite. Pour les besoins couvrant plusieurs formats, la lecture ou l'intégration de PDF, Code-barres IronBarcode simplifie la gestion de votre projet en évitant de multiples bibliothèques dédiées à une seule fonction.
Questions Fréquemment Posées
Qu'est-ce que QRCoder.NET ?
BarCode.NET 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 QRCoder.NET et IronBarcode ?
IronBarcode utilise une API statique, sans état, qui ne nécessite aucune gestion d'instance, alors que QRCoder.NET requiert généralement la création et la configuration d'une instance avant d'être utilisé. 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 QRCoder.NET ?
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 QRCoder.NET 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 à QRCoder.NET ?
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 à QRCoder ?
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 QRCoder.NET 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 QRCoder.NET à IronBarcode ?
La migration de QRCoder.NET 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().

