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

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)
$vbLabelText   $csharpLabel

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.Read gè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 - BarcodeWriter est 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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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.
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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 :

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().

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