IRONSOFTWAREHOME
VIDÉOS

Passer de Code-barres DevExpress à IronBarcode

Curtis Chau
Curtis Chau
Updated: 20 juin 2026

Si vous utilisez DevExpress pour ses contrôles de grille, de graphique, de planificateur ou de tableau croisé dynamique, conservez-les. Cette migration concerne spécifiquement le remplacement de BarCodeControl par une bibliothèque qui peut également lire des codes-barres, fonctionner sans interface et être déployée en dehors d'un contexte d'interface utilisateur. Les contrôles d'interface utilisateur DevExpress sur lesquels vous vous appuyez pour votre application WinForms ou Blazor ne sont pas concernés par cette migration. Seul le code spécifique au code-barres change.

Le scénario typique qui déclenche cette migration est l'un des trois suivants : un besoin de lecture apparaît et DevExpress ne peut pas le satisfaire ; un nouveau service nécessite la génération de codes-barres dans ASP.NET Core ou une fonction cloud où les assemblys WinForms ne sont pas présents ; ou bien le renouvellement de la Suite arrive et le calcul du coût par fonctionnalité pour l'utilisation d'une boîte à outils d'interface utilisateur complète uniquement pour la sortie de codes-barres cesse d'être pertinent.

Étape 1 : Installer IronBarcode

dotnet add package BarCode

Si vous conservez d'autres contrôles DevExpress dans le même projet, laissez les packages NuGet DevExpress en place. Seul le code relatif aux codes-barres dans vos fichiers sources change. Si la génération de codes-barres était la seule raison de la présence de DevExpress dans un projet particulier et que vous n'utilisez aucun autre contrôle DX dans ce projet, vous pouvez supprimer les packages DevExpress de ce projet après la migration :

# Only remove DevExpress packages if no other DX controls are used in this project
dotnet remove package DevExpress.Win.Navigation
SHELL

Étape 2 : Ajouter l'initialisation de la licence

Ajoutez l'activation de la licence IronBarcode une fois au démarrage de l'application — dans Program.cs, App.xaml.cs, ou votre constructeur d'hôte :

// In Program.cs (ASP.NET Core) or application entry point
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

Aucun appel réseau. Aucun code d'erreur à vérifier. Validation locale.

Étape 3 : Remplacer le code spécifique au code-barres

Recherchez les types de codes-barres DevExpress dans votre code source. Le reste demeure inchangé.

# Find barcode-related DevExpress usage — ignore grid, chart, and other DX components
grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator\|DevExpress.XtraPrinting.BarCode" --include="*.cs" .
grep -r "barCode\.Module\|DrawToBitmap\|BarCode\.Symbology" --include="*.cs" .
SHELL

Les résultats de cette recherche correspondent exactement à ce que vous allez remplacer. Rien d'autre.

Exemples de migration de code

Génération du code 128

Il s'agit de la migration la plus courante. Un BarCodeControl avec une symbologie Code128Generator devient un seul appel BarcodeWriter.CreateBarcode.

Avant — Contrôle DevExpress WinForms :

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new Code128Generator();
    symbology.CharacterSet = Code128CharacterSet.CharsetAuto;
    barCode.Symbology = symbology;
    barCode.Text = data;
    barCode.Module = 0.02f;
    barCode.ShowText = true;

    barCode.Width = 400;
    barCode.Height = 100;
    var bitmap = new Bitmap(barCode.Width, barCode.Height);
    barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
    bitmap.Save(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Après — IronBarcode:

// NuGet: dotnet add package BarCode
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .SaveAsPng(outputPath);
}

La taille basé sur l'unité de document barCode.Module = 0.02f a disparu. .ResizeTo(400, 100) prend directement des pixels. L'allocation manuelle Bitmap et l'appel DrawToBitmap sont remplacés par .SaveAsPng(), qui gère automatiquement le dimensionnement.

Génération de codes QR

Avant — DevExpress QR avec correction d'erreurs :

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;
using System.Drawing;
using System.Drawing.Imaging;

public void GenerateQrCode(string url, string outputPath)
{
    var barCode = new BarCodeControl();
    var symbology = new QRCodeGenerator();
    symbology.ErrorCorrectionLevel = QRCodeErrorCorrectionLevel.H;
    symbology.CompactionMode = QRCodeCompactionMode.AlphaNumeric;
    barCode.Symbology = symbology;
    barCode.Text = url;

    barCode.Width = 500;
    barCode.Height = 500;
    var bitmap = new Bitmap(barCode.Width, barCode.Height);
    barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
    bitmap.Save(outputPath, ImageFormat.Png);
    bitmap.Dispose();
}

Après — IronBarcode:

using IronBarCode;

public void GenerateQrCode(string url, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .SaveAsPng(outputPath);
}

QRCodeErrorCorrectionLevel.H correspond à QRCodeWriter.QrErrorCorrectionLevel.Highest. Le paramètre CompactionMode.AlphaNumeric est géré automatiquement par IronBarcode en fonction du contenu.

Code QR avec logo de marque (nouvelle fonctionnalité — impossible avec DevExpress) :

using IronBarCode;

public void GenerateBrandedQrCode(string url, string logoPath, string outputPath)
{
    QRCodeWriter.CreateQrCode(url, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .AddBrandLogo(logoPath)
        .SaveAsPng(outputPath);
}

Génération de matrice de données

Avant — DevExpress :

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
var symbology = new DataMatrixGenerator();
symbology.MatrixSize = DataMatrixSize.Matrix26x26;
barCode.Symbology = symbology;
barCode.Text = "PART-7734-X";
// ... DrawToBitmap pattern

Après — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("PART-7734-X", BarcodeEncoding.DataMatrix)
    .ResizeTo(260, 260)
    .SaveAsPng("datamatrix.png");

Génération PDF417

Avant — DevExpress :

using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

var barCode = new BarCodeControl();
barCode.Symbology = new PDF417Generator();
barCode.Text = "SHIPMENT-DATA-2026";
// ... DrawToBitmap pattern

Après — IronBarcode:

using IronBarCode;

BarcodeWriter.CreateBarcode("SHIPMENT-DATA-2026", BarcodeEncoding.PDF417)
    .ResizeTo(400, 150)
    .SaveAsPng("pdf417.png");

Ajout de la lecture (nouvelle fonctionnalité)

DevExpress ne fournit pas d'API de lecture. Si une exigence de lecture se fait jour, c'est là IronBarcode se rentabilise immédiatement :

using IronBarCode;

// Read from an image file
var results = BarcodeReader.Read("uploaded-label.png");
foreach (var result in results)
{
    Console.WriteLine($"Found {result.Format}: {result.Value}");
}

// Read with options for better accuracy on difficult images
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads = 4
};
var detailedResults = BarcodeReader.Read("multi-barcode-sheet.png", options);

Point de terminaison de code-barres ASP.NET Core

Cela n'était pas réalisable avec BarCodeControl sans contournements WinForms. IronBarcode prend en charge cette fonctionnalité nativement :

using IronBarCode;

// In Program.cs or a controller
app.MapGet("/label/{sku}", (string sku) =>
{
    var pngBytes = BarcodeWriter.CreateBarcode(sku, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png", $"{sku}.png");
});

app.MapGet("/qr/{data}", (string data) =>
{
    var pngBytes = QRCodeWriter.CreateQrCode(data, 300, QRCodeWriter.QrErrorCorrectionLevel.Highest)
        .ToPngBinaryData();

    return Results.File(pngBytes, "image/png");
});

Lecture des codes-barres dans les fichiers PDF

IronBarcode lit nativement les fichiers PDF. Pas de PdfiumViewer, pas de boucle de rendu, pas de paquets supplémentaires :

using IronBarCode;

// Read all barcodes from all pages of a PDF
var results = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in results)
{
    Console.WriteLine($"Barcode: {result.Value} | Format: {result.Format}");
}

Problèmes de migration courants

Le module barCode utilise les unités du document, et non les pixels.

barCode.Module contrôle la largeur de la barre la plus étroite en unités de document (dépendant du contexte DPI de rendu). Il ne s'agit pas d'un nombre de pixels. Lors de la migration, n'essayez pas de convertir la valeur du module en pixels — à la place, décidez des dimensions en pixels souhaitées et utilisez .ResizeTo(width, height) directement.

// Before: barCode.Module = 0.02f  — document units, indirect sizing
// After:
.ResizeTo(400, 100)  // explicit pixel dimensions

DrawToBitmap nécessite une image bitmap pré-allouée

L'ancien schéma allouait un Bitmap d'une taille spécifique, puis appelait DrawToBitmap pour le rendre. Le .SaveAsPng() d'IronBarcode gère tout cela en interne. Vous ne pré-allouez rien.

// Before: must know size upfront, allocate, draw, save, dispose
barCode.Width = 400;
barCode.Height = 100;
var bitmap = new Bitmap(barCode.Width, barCode.Height);
barCode.DrawToBitmap(bitmap, new Rectangle(0, 0, barCode.Width, barCode.Height));
bitmap.Save(path, ImageFormat.Png);
bitmap.Dispose();

// After: size specified once, everything else handled
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(path);

Liaison de données WinForms

Si BarCodeControl était lié à une source de données dans un concepteur WinForms, l'équivalent IronBarcode est de lire explicitement la valeur de votre modèle et de la passer à BarcodeWriter.CreateBarcode. IronBarcode ne participe pas à la liaison de données WinForms — il s'agit d'une API de programmation, et non d'un contrôle d'interface utilisateur. Si vous devez afficher le code-barres généré sur un formulaire, générez les octets de l'image et définissez-les sur un PictureBox :

using IronBarCode;

// Generate and display in a WinForms PictureBox
private void UpdateBarcodeDisplay(string value)
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(400, 100)
        .ToPngBinaryData();

    using var ms = new System.IO.MemoryStream(bytes);
    pictureBox1.Image = System.Drawing.Image.FromStream(ms);
}

Remplacement d'espace de noms

Anciennes importations à supprimer :

// Remove these
using DevExpress.XtraEditors;
using DevExpress.XtraPrinting.BarCode;

Nouvelle importation à ajouter :

// Add this
using IronBarCode;

Référence de mappage d'API

Code-barres DevExpressÉquivalent IronBarcode
new BarCodeControl()Statique — aucune instance
new Code128Generator() + barCode.Symbology = symbologyBarcodeEncoding.Code128 paramètre
new QRCodeGenerator() + QRCodeErrorCorrectionLevel.HQRCodeWriter.CreateQrCode(data, size, QRCodeWriter.QrErrorCorrectionLevel.Highest)
new DataMatrixGenerator() + DataMatrixSize.Matrix26x26BarcodeWriter.CreateBarcode(data, BarcodeEncoding.DataMatrix)
new PDF417Generator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.PDF417)
new AztecCodeGenerator()BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Aztec)
barCode.Text = valuePremier argument à CreateBarcode ou CreateQrCode
barCode.Module = 0.02f.ResizeTo(width, height) en pixels
barCode.ShowText = true.AddBarcodeText()
DrawToBitmap(bitmap, rect).SaveAsPng(path)
new Bitmap(w, h) + élimination manuellePas nécessaire
Bitmap → MemoryStream → HTTP.ToPngBinaryData()
API de lecture indisponibleBarcodeReader.Read(path)
using DevExpress.XtraEditors + using DevExpress.XtraPrinting.BarCodeusing IronBarCode

Liste de contrôle de la migration

Utilisez ce modèle grep pour trouver tous les fichiers nécessitant une mise à jour :

grep -r "BarCodeControl\|Code128Generator\|QRCodeGenerator\|DataMatrixGenerator\|PDF417Generator\|AztecCodeGenerator" --include="*.cs" .
grep -r "barCode\.Module\|barCode\.Symbology\|DrawToBitmap\|DevExpress\.XtraPrinting\.BarCode" --include="*.cs" .
SHELL

Analysez chaque match :

  • Remplacez using DevExpress.XtraEditors; et using DevExpress.XtraPrinting.BarCode; par using IronBarCode;
  • Remplacez new BarCodeControl() + configuration de symbologie avec BarcodeWriter.CreateBarcode(data, BarcodeEncoding.X)
  • Remplacez new QRCodeGenerator() + configuration de symbologie avec QRCodeWriter.CreateQrCode(data, size, errorLevel)
  • Remplacez barCode.Module = X avec .ResizeTo(width, height)
  • Remplacez DrawToBitmap + modèle bitmap.Save avec .SaveAsPng(path)
  • Remplacez les modèles Bitmap-vers-MemoryStream avec .ToPngBinaryData()
  • Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" au démarrage de l'application
  • Ajoutez des appels BarcodeReader.Read() partout où une capacité de lecture est nécessaire

Si un projet utilise DevExpress uniquement pour les contrôles de codes-barres et aucun autre composant DX, supprimez les packages NuGet DevExpress une fois toutes les références aux codes-barres remplacées. Si le projet utilise la grille, le graphique ou d'autres contrôles d'interface utilisateur DevExpress, laissez ces packages en place ; cette migration ne concerne que le code-barres.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise