Passer au contenu du pied de page
VIDéOS

Comment lire des codes-barres à partir d'images en C#

Passer de codeur à barres à IronBarcode

Ce guide décrit l'intégralité du processus de migration de codeur à barres vers Code-barres IronBarcode pour les développeurs .NET . La migration consolide deux packages en un, remplace le pipeline encodeur-rendu par un appel de méthode unique et regroupe tous les imports de namespaces spécifiques aux formats — using Barcoder.Code128, using Barcoder.Qr, using Barcoder.DataMatrix — en un seul using IronBarCode;. Le type IBarcode et les types ImageRenderer / ImageRendererOptions sont entièrement supprimés. Si la lecture était une capacité manquante qui vous a poussé à ajouter une deuxième bibliothèque à côté de Barcoder, Code-barres IronBarcode couvre la lecture en natif avec BarcodeReader.Read().

Pourquoi migrer depuis codeur à barres ?

Les équipes migrant depuis codeur à barres signalent les déclencheurs suivants :

Ajout d'une exigence de lecture : codeur à barres est une bibliothèque de génération uniquement, sans capacité de décodage. Lorsqu'une application a besoin de vérifier les codes-barres entrants, de traiter des documents numérisés ou de lire les codes-barres de fichiers PDF téléchargés, codeur à barres ne propose aucune solution. L'ajout d'une deuxième bibliothèque de lecture crée une base de code divisée avec deux dépendances NuGet , deux API à maintenir et deux historiques de versions à suivre. Code-barres IronBarcode gère à la fois la génération et la lecture grâce à un seul et même package.

Compatibilité avec .NET Framework rompue : Barcoder.Renderer.Image a abandonné le support for .NET Framework. Les équipes exécutant des services ou des applications de bureau sur .NET Framework 4.x qui mettent à jour le package de rendu d'images lors de la maintenance de routine des dépendances rencontrent un échec de compilation. Code-barres IronBarcode prend en charge .NET Framework 4.6.2 à .NET 9 sans packaging conditionnel pour différentes cibles.

Dérive de version de package : Barcoder et Barcoder.Renderer.Image sont des packages NuGet versionnés indépendamment. Mettre à jour l'un sans l'autre lors d'une actualisation des dépendances peut introduire des incompatibilités. Dans les dépôts comportant plusieurs projets, garantir des versions cohérentes de chaque moteur de rendu dans tous les projets représente une charge de coordination qui augmente avec la taille de l'équipe.

Ajout de plusieurs formats : Un projet qui commence avec Code128 et ajoute ensuite QR, puis DataMatrix, doit ajouter une nouvelle importation d'espace de noms et apprendre une classe d'encodeur différente avec des paramètres de méthode différents pour chaque format. Code-barres IronBarcode utilise une énumération BarcodeEncoding — ajouter un format est un changement en un mot à un appel existant. Pas de nouvel espace de noms, pas de nouvelle classe, pas de signature de méthode différente.

Exigences de déploiement MAUI et Cloud : codeur à barres ne documente pas la prise en charge des déploiements MAUI, Docker, AWS Lambda ou Azure. Les équipes qui développent des applications mobiles multiplateformes ou des pipelines de traitement de codes-barres sans serveur constatent que les cibles documentées de codeur à barres ne couvrent pas ces scénarios.

Le problème fondamental

Barcoder associe la sélection du format aux importations d'espaces de noms et impose un pipeline de rendu pour chaque opération de sortie. Changer de format ou de type de sortie nécessite des modifications structurelles du code :

// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

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

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

using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
// Barcoder: 3 namespaces, encoder-specific class, renderer pipeline, stream management
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

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

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

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

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

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

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

IronBarcode exprime la même opération qu'un seul appel chaîné :

// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// IronBarcode: 1 namespace, 1 method, 1 output call
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Comparaison des fonctionnalités Code-barres IronBarcode et de Barcoder

Fonction codeur à barres Code-barres IronBarcode
Packages NuGet requis 2 minimum (BarCode + Barcoder.Renderer.Image) 1 (IronBarcode)
génération de codes-barres Oui Oui
Lecture et décodage de codes-barres Non Oui
Classes d'encodeurs par format Oui — Code128Encoder, QrEncoder, DataMatrixEncoder, etc. Non — énumération BarcodeEncoding
Importations d'espaces de noms par format Oui — Barcoder.Code128, Barcoder.Qr, Barcoder.DataMatrix Non — seulement using IronBarCode
Méthodes de sortie sur l'objet résultat Non — IBarcode n'a pas de méthodes de sauvegarde Oui — GeneratedBarcode a SaveAsPng, ToPngBinaryData, ToStream
Lecture de PDF Non Oui — BarcodeReader.Read(path)
QR avec logo Non Oui — .AddBrandLogo(path)
Prise en charge du .NET Framework Déposé dans le moteur de rendu d'images .NET Framework 4.6.2+
Prise en charge de .NET 9 Activité peu claire / limitée Oui
Assistance MAUI Non Oui — iOS, Android, Windows, macOS
Docker / Azure / AWS Lambda Non documenté Oui
Licence MIT (logiciel libre) Commercial — Lite $999, Plus $1,499, Professional $2,999, Unlimited $5,999
Contrôle de la vitesse de lecture Non Oui — énumération ReadingSpeed
Détection de plusieurs codes-barres Non Oui — option ExpectMultipleBarcodes

Démarrage rapide : Migration de codeur à barres vers IronBarcode

Étape 1 : Remplacer le package NuGet

Supprimez tous les packages codeur à barres de votre projet :

dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
dotnet remove package Barcoder
dotnet remove package Barcoder.Renderer.Image
SHELL

Si vous avez également ajouté le moteur de rendu SVG :

dotnet remove package Barcoder.Renderer.Svg
dotnet remove package Barcoder.Renderer.Svg
SHELL

Installer IronBarcode:

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Étape 2 : Mise à jour des espaces de noms

Supprimer toutes les déclarations using Barcoder.* de chaque fichier du projet :

// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
// Remove all of these
using Barcoder;
using Barcoder.Code128;
using Barcoder.Qr;
using Barcoder.DataMatrix;
using Barcoder.Renderers;
using Barcoder.Ean;
using Barcoder.Pdf417;
// ... and any other Barcoder.* namespaces in your project
$vbLabelText   $csharpLabel

Remplacez-les tous par une seule directive using :

using IronBarCode;
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Étape 3 : initialisation de la licence

Ajouter l'initialisation de la licence au démarrage de l'application — Program.cs, Startup.cs, ou MauiProgram.cs :

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

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

Une clé d'essai gratuite est disponible sur ironsoftware.com .

Exemples de migration de code

Génération Code128

Approche par code-barres :

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

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

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

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

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

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

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

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

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

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

Approche IronBarcode :

// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
// NuGet: dotnet add package IronBarcode
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

Le Code128Encoder, ImageRenderer, ImageRendererOptions, et la gestion des flux sont entièrement supprimés. Le format est spécifié comme BarcodeEncoding.Code128 sur la classe unifiée BarcodeWriter. Les méthodes de sortie résident directement sur l'objet GeneratedBarcode retourné. La documentation Code-barres IronBarcode sur la génération de codes-barres couvre la personnalisation du style, des marges et des couleurs.

Génération de codes QR

Approche par code-barres :

using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

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

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.Qr;
using Barcoder.Renderers;

IBarcode barcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M);

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

using var stream = File.OpenWrite("qr.png");
renderer.Render(barcode, stream);
Imports Barcoder
Imports Barcoder.Qr
Imports Barcoder.Renderers

Dim barcode As IBarcode = QrEncoder.Encode("https://example.com", ErrorCorrectionLevel.M)

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

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

Approche IronBarcode :

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .SaveAsPng("qr.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .SaveAsPng("qr.png")
$vbLabelText   $csharpLabel

Le deuxième paramètre pour CreateQrCode est la dimension de sortie en pixels. Le niveau de correction d'erreur est défini par défaut sur une valeur raisonnable et peut être configuré si nécessaire. Code-barres IronBarcode prend également en charge une opération impossible dans Barcoder : l'intégration d'un logo de marque au centre du code QR :

using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
using IronBarCode;

QRCodeWriter.CreateQrCode("https://example.com", 500)
    .AddBrandLogo("logo.png")
    .SaveAsPng("qr-branded.png");
Imports IronBarCode

QRCodeWriter.CreateQrCode("https://example.com", 500) _
    .AddBrandLogo("logo.png") _
    .SaveAsPng("qr-branded.png")
$vbLabelText   $csharpLabel

Génération de DataMatrix

Approche par code-barres :

using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

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

using var stream = File.OpenWrite("datamatrix.png");
renderer.Render(barcode, stream);
using Barcoder;
using Barcoder.DataMatrix;
using Barcoder.Renderers;

IBarcode barcode = DataMatrixEncoder.Encode("ITEM-XYZ-001");

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

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

Dim barcode As IBarcode = DataMatrixEncoder.Encode("ITEM-XYZ-001")

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

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

Approche IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix)
    .SaveAsPng("datamatrix.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("ITEM-XYZ-001", BarcodeEncoding.DataMatrix) _
    .SaveAsPng("datamatrix.png")
$vbLabelText   $csharpLabel

Le motif est identique à Code128 — seule la valeur BarcodeEncoding change. Aucun nouvel espace de noms importé, aucune classe différente, aucune signature de méthode différente.

Contrôler la taille de la sortie

Barcoder utilise PixelSize comme multiplicateur d'échelle sur la taille du module de code-barres et BarHeightFor1DBarcode pour la hauteur 1D — il n'y a pas d'API de largeur/hauteur directe.

Approche par code-barres :

var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
var renderer = new ImageRenderer(new ImageRendererOptions
{
    ImageFormat = ImageFormat.Png,
    PixelSize = 3,
    BarHeightFor1DBarcode = 80
});
using var stream = File.OpenWrite("barcode.png");
renderer.Render(barcode, stream);
Imports System.IO

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

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

Approche IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
using IronBarCode;

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("barcode.png");
Imports IronBarCode

BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("barcode.png")
$vbLabelText   $csharpLabel

.ResizeTo(width, height) prend des dimensions de pixels explicites. Il se chaîne avec d'autres méthodes de sortie sur le même objet GeneratedBarcode.

Récupération de données binaires au lieu d'un fichier

Approche par code-barres :

using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

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

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

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
using Barcoder;
using Barcoder.Code128;
using Barcoder.Renderers;

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

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

using var ms = new MemoryStream();
renderer.Render(barcode, ms);
byte[] pngBytes = ms.ToArray();
Imports Barcoder
Imports Barcoder.Code128
Imports Barcoder.Renderers
Imports System.IO

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

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

Using ms As New MemoryStream()
    renderer.Render(barcode, ms)
    Dim pngBytes As Byte() = ms.ToArray()
End Using
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
using IronBarCode;

byte[] pngBytes = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128)
    .ToPngBinaryData();
Imports IronBarCode

Dim pngBytes As Byte() = BarcodeWriter.CreateBarcode("PRODUCT-12345", BarcodeEncoding.Code128).ToPngBinaryData()
$vbLabelText   $csharpLabel

Le modèle MemoryStream et ToArray() est remplacé par un appel de méthode unique enchaîné sur GeneratedBarcode.

Lecture des codes-barres (nouvelle fonctionnalité)

Barcoder ne possède pas d'API de lecture. Si vous avez précédemment ajouté une deuxième bibliothèque de lecture, celle-ci peut être supprimée. Code-barres IronBarcode lit les fichiers, les tableaux d'octets, les flux et les PDF avec le même package que celui utilisé pour la génération.

Approche IronBarcode :

using IronBarCode;

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

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
using IronBarCode;

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

// Read from PDF natively — no image extraction step, no extra dependency
var pdfResults = BarcodeReader.Read("invoice.pdf");

// Read multiple barcodes from one image
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true
};
var multiResults = BarcodeReader.Read("warehouse-sheet.png", options);
foreach (var result in multiResults)
    Console.WriteLine(result.Value);

// Read from a stream directly
using var fileStream = File.OpenRead("barcode.png");
var streamResults = BarcodeReader.Read(fileStream);
Imports IronBarCode

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

' Read from PDF natively — no image extraction step, no extra dependency
Dim pdfResults = BarcodeReader.Read("invoice.pdf")

' Read multiple barcodes from one image
Dim options As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("warehouse-sheet.png", options)
For Each result In multiResults
    Console.WriteLine(result.Value)
Next

' Read from a stream directly
Using fileStream = File.OpenRead("barcode.png")
    Dim streamResults = BarcodeReader.Read(fileStream)
End Using
$vbLabelText   $csharpLabel

La documentation relative à la lecture des codes-barres IronBarcode couvre les PDF multipages, la lecture de zones d'intérêt et les options d'optimisation des performances.

Sortie SVG

Approche par code-barres :

using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
using Barcoder.Renderers;
var svgRenderer = new SvgRenderer();
using var stream = File.OpenWrite("barcode.svg");
svgRenderer.Render(barcode, stream);
Imports Barcoder.Renderers

Dim svgRenderer = New SvgRenderer()
Using stream = File.OpenWrite("barcode.svg")
    svgRenderer.Render(barcode, stream)
End Using
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
using IronBarCode;

BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
    .SaveAsSvg("barcode.svg");
Imports IronBarCode

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

Le package Barcoder.Renderer.Svg peut être supprimé une fois que tous les sites de rendu SVG ont été migrés.

Référence de correspondance entre l'API codeur à barres et IronBarcode

codeur à barres Code-barres IronBarcode
Code128Encoder.Encode("data", false) BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
QrEncoder.Encode("data", ErrorCorrectionLevel.M) QRCodeWriter.CreateQrCode("data", 500)
DataMatrixEncoder.Encode("data") BarcodeWriter.CreateBarcode("data", BarcodeEncoding.DataMatrix)
new ImageRenderer(new ImageRendererOptions { ... }) Pas nécessaire
renderer.Render(barcode, fileStream) .SaveAsPng(path)
renderer.Render(barcode, memoryStream) + ms.ToArray() .ToPngBinaryData()
IBarcode GeneratedBarcode
PixelSize = 2, BarHeightFor1DBarcode = 50 .ResizeTo(width, height)
SvgRenderer + renderer.Render(barcode, stream) .SaveAsSvg(path)
API de lecture indisponible BarcodeReader.Read(path / stream / bytes / pdf)
2 packages — Barcoder + Barcoder.Renderer.Image 1 package — IronBarcode
Namespace par format pour chaque encodeur (Barcoder.Code128, Barcoder.Qr, etc.) Énumération BarcodeEncoding, namespace unique

Problèmes de migration courants et solutions

Problème 1 : IBarcode ne possède pas de méthodes d'enregistrement

Barcoder : Un code qui stocke une variable IBarcode et la passe à un moteur de rendu plus tard suit un motif de rendu différé. Toute méthode d'assistance qui accepte IBarcode et appelle renderer.Render() doit être refactorisée.

Solution : Changer les références de type IBarcode en GeneratedBarcode. L'objet GeneratedBarcode porte ses méthodes de sortie avec lui — passez-le à toute méthode qui nécessite de sauvegarder ou de sérialiser le résultat :

// Code-barres IronBarcode — GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
// Code-barres IronBarcode — GeneratedBarcode carries output methods
using IronBarCode;

var barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128);
SaveBarcodeToFile(barcode, "output.png");

static void SaveBarcodeToFile(GeneratedBarcode barcode, string path)
{
    barcode.SaveAsPng(path);
}
Imports IronBarCode

Dim barcode = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
SaveBarcodeToFile(barcode, "output.png")

Private Sub SaveBarcodeToFile(barcode As GeneratedBarcode, path As String)
    barcode.SaveAsPng(path)
End Sub
$vbLabelText   $csharpLabel

Une recherche pour renderer.Render( à travers la solution localisera tous les sites de rendu différé.

Problème n° 2 : PixelSize n'a pas d'équivalent direct

Barcoder : PixelSize est un multiplicateur d'échelle sur la taille naturelle du module du code-barres. Les dimensions de sortie dépendent de la longueur du contenu, du format et du multiplicateur combiné. BarHeightFor1DBarcode contrôle la hauteur 1D indépendamment. Il n'existe pas de spécifications directes concernant la largeur et la hauteur.

Solution : Mesurer la sortie en pixels réels que le code existant codeur à barres produit et passer ces valeurs à .ResizeTo(width, height) :

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

Problème 3 : Accumulation des importations d'espace de noms de format

Barcoder : Chaque format de code-barres utilisé dans un projet ajoute une directive using Barcoder.[Format] à chaque fichier qui l'utilise. Un projet utilisant Code128, QR et DataMatrix a typiquement trois imports spécifiques au format par fichier plus using Barcoder et using Barcoder.Renderers.

Solution : Lancer une recherche pour toutes les déclarations using Barcoder et les remplacer toutes par using IronBarCode; :

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
SHELL

Chaque résultat est une ligne à supprimer, remplacée par la seule directive using IronBarCode; une fois par fichier.

Problème 4 : Erreurs de synchronisation des versions de packages

Barcoder : Construire après avoir mis à jour seulement Barcoder ou Barcoder.Renderer.Image peut produire des erreurs de résolution de type parce que les deux packages peuvent ne pas être compatibles à différentes combinaisons de versions.

Solution : Après avoir supprimé les deux paquets codeur à barres et installé IronBarcode, il y a un seul package et une seule version. Les conflits de verrouillage de paquets de cette catégorie sont éliminés. Vérifiez que le fichier .csproj contient seulement la référence IronBarcode unique et aucune référence Barcoder.* restante avant de construire.

Liste de contrôle pour la migration des codes-barres

Tâches préalables à la migration

Avant d'apporter des modifications, effectuez un audit de votre code source afin d'identifier toutes les utilisations de Barcoder :

grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
grep -rn "using Barcoder" --include="*.cs" .
grep -rn "Code128Encoder\.Encode" --include="*.cs" .
grep -rn "QrEncoder\.Encode" --include="*.cs" .
grep -rn "DataMatrixEncoder\.Encode" --include="*.cs" .
grep -rn "ImageRenderer\|ImageRendererOptions" --include="*.cs" .
grep -rn "SvgRenderer" --include="*.cs" .
grep -rn "renderer\.Render(" --include="*.cs" .
grep -rn "IBarcode" --include="*.cs" .
grep -rn "ErrorCorrectionLevel" --include="*.cs" .
SHELL

Documentez tous les emplacements où IBarcode est stocké comme type de variable ou passé comme paramètre de méthode — ce sont les sites de rendu différé qui nécessitent le plus d'attention. Notez toutes les valeurs PixelSize et BarHeightFor1DBarcode et mesurez les dimensions de sortie correspondantes.

Tâches de mise à jour du code

  1. Supprimez le paquet NuGet Barcoder de tous les projets
  2. Supprimez le paquet NuGet Barcoder.Renderer.Image de tous les projets
  3. Supprimez le paquet NuGet Barcoder.Renderer.Svg s'il est présent
  4. Installez le paquet NuGet IronBarcode
  5. Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; au démarrage de l'application
  6. Remplacez toutes les déclarations using Barcoder.* par using IronBarCode;
  7. Remplacez Code128Encoder.Encode(...) par BarcodeWriter.CreateBarcode(..., BarcodeEncoding.Code128)
  8. Remplacez QrEncoder.Encode(...) par QRCodeWriter.CreateQrCode(..., size)
  9. Remplacez DataMatrixEncoder.Encode(...) par BarcodeWriter.CreateBarcode(..., BarcodeEncoding.DataMatrix)
  10. Supprimez toutes les constructions new ImageRenderer(new ImageRendererOptions {...})
  11. Remplacez renderer.Render(barcode, fileStream) par .SaveAsPng(path) sur GeneratedBarcode
  12. Remplacezrenderer.Render(barcode, memoryStream) + ms.ToArray()par .ToPngBinaryData()
  13. Remplacez l'utilisation de SvgRenderer par .SaveAsSvg(path)
  14. Changez les références de type IBarcode en GeneratedBarcode
  15. Remplacez les options PixelSize / BarHeightFor1DBarcode par .ResizeTo(width, height)

Test de post-migration

  • Vérifiez que chaque format de code-barres généré est correctement scanné avec un scanner standard ou le lecteur IronBarcode.
  • Comparez les dimensions de la sortie visuelle avec la sortie avant la migration — confirmez que les valeurs .ResizeTo() produisent des tailles équivalentes
  • Tester le rendu du code QR avec un scanner de téléphone pour confirmer que le niveau de correction d'erreur est adéquat.
  • Vérifiez que le rendu SVG s'affiche correctement dans le navigateur et à l'impression si votre projet utilise ce format.
  • Si vous avez supprimé une deuxième bibliothèque de lecture, vérifiez que BarcodeReader.Read() produit des valeurs décodées équivalentes pour les mêmes entrées
  • Testez la lecture des PDF si votre projet traite des documents PDF — assurez-vous que les PDF multipages lisent correctement toutes les pages.
  • Effectuez une compilation sans référence restante à Barcoder.* — les erreurs de compilation indiquent des sites de migration manqués

Principaux avantages de la migration vers IronBarcode

Dépendance unifiée des packages : un package NuGet en remplace deux (ou trois, si le moteur de rendu SVG a également été utilisé). Une seule version à suivre, un seul journal des modifications à surveiller et aucun problème de compatibilité entre les paquets lors des mises à jour des dépendances. La complexité .csproj et packages.lock.json diminue immédiatement.

Capacité de lecture native : les applications qui nécessitaient auparavant une deuxième bibliothèque pour la lecture des codes-barres peuvent désormais être regroupées sur IronBarcode. BarcodeReader.Read() accepte les fichiers image, les tableaux d'octets, les flux et les PDF via la même API, avec une détection multi-code-barres et un ajustement de la vitesse de lecture intégrés.

Sélection de format en tant que configuration : Ajouter un nouveau format de code-barres à un projet existant est un changement en un mot à la valeur de l'énum BarcodeEncoding dans un appel CreateBarcode existant. Aucun nouvel espace de noms importé, aucune nouvelle classe d'encodeur et aucun nouveau package. Cela permet une extension de format sans friction à mesure que les exigences du produit évoluent.

Dimensions de sortie explicites : .ResizeTo(width, height) remplace l'ancien système de multiplicateur PixelSize par une spécification de pixels explicite. La relation entre le code et la sortie est directe et prévisible, indépendamment de la longueur du contenu du code-barres ou du dimensionnement spécifique du module au format.

Couverture étendue des plateformes : Code-barres IronBarcode prend en charge .NET Framework 4.6.2 à .NET 9, les déploiements MAUI sur iOS, Android, Windows et macOS, ainsi que le déploiement documenté sur Docker, AWS Lambda et Azure Functions. Les équipes dont les exigences de plateforme s'étendent au-delà de .NET Core ne rencontreront pas le fossé de support de framework qui affecte Barcoder.Renderer.Image.

Maintenance active et compatibilité future : Code-barres IronBarcode publie des mises à jour régulières avec des échéanciers de compatibilité .NET documentés. La cadence de sortie active garde la bibliothèque alignée avec les versions .NET actuelles, ce qui n'est pas assuré à partir d'une bibliothèque avec une activité de sortie récente limitée.

Questions Fréquemment Posées

Pourquoi devrais-je migrer de Barcoder à IronBarcode ?

Les raisons les plus courantes sont la simplification des licences (suppression de la complexité du SDK + de la clé d'exécution), l'élimination des limites de débit, la prise en charge native des PDF, l'amélioration du déploiement Docker/CI/CD et la réduction de l'API boilerplate dans le code de production.

Comment remplacer les appels API de BarCode par IronBarcode ?

Remplacer la création d'instance et le modèle de licence par IronBarCode.License.LicenseKey = "key". Remplacer les appels au lecteur par BarcodeReader.Read(path) et les appels à l'écrivain par BarcodeWriter.CreateBarcode(data, encoding). Les méthodes statiques ne nécessitent aucune gestion d'instance.

Quelle quantité de code change lors de la migration de Barcoder à IronBarcode ?

La plupart des migrations permettent de réduire le nombre de lignes de code. Les modèles de licence, les constructeurs d'instances et la configuration explicite des formats sont supprimés. Les principales opérations de lecture/écriture sont converties en équivalents plus courts d'IronBarcode avec des objets de résultat plus propres.

Dois-je conserver les deux logiciels BarCode et IronBarcode installés pendant la migration ?

Non. La plupart des migrations sont des remplacements directs plutôt que des opérations parallèles. Migrez une classe de service à la fois, remplacez la référence NuGet et mettez à jour les modèles d'instanciation et d'appel d'API avant de passer à la classe suivante.

Quel est le nom du package NuGet pour IronBarcode ?

Le paquet est "IronBarcode" (avec un B et un C majuscules). Installez-le avec "Install-Package IronBarCode" ou "dotnet add package IronBarCode". La directive using dans le code est "using IronBarCode ;".

Comment IronBarcode simplifie-t-il le déploiement de Docker par rapport à Barcoder ?

IronBarcode est un package NuGet sans fichiers SDK externes ni configuration de licence montée. Dans Docker, définissez la variable d'environnement IRONBARCODE_LICENSE_KEY et le paquetage gère la validation de la licence au démarrage.

IronBarcode détecte-t-il automatiquement tous les formats de codes-barres après avoir migré depuis Barcoder ?

Oui. IronBarcode détecte automatiquement la symbologie dans tous les formats pris en charge. L'énumération explicite des BarcodeTypes n'est pas nécessaire. Si le format est déjà connu et que la performance est importante, BarcodeReaderOptions permet de restreindre l'espace de recherche en tant qu'optimisation.

IronBarcode peut-il lire des codes-barres à partir de PDF sans bibliothèque séparée ?

Oui, BarcodeReader.Read("document.pdf") traite les fichiers PDF de manière native. Les résultats incluent le numéro de page, le format, la valeur et la confiance pour chaque code-barres trouvé. Aucune étape de rendu PDF externe n'est requise.

Comment IronBarcode gère-t-il le traitement parallèle des codes-barres ?

Les méthodes statiques d'IronBarcode sont sans état et à l'abri des threads. Utilisez Parallel.ForEach directement sur les listes de fichiers sans gestion d'instance par thread. BarcodeReaderOptions.MaxParallelThreads contrôle le budget interne des threads.

Quelles propriétés de résultat changent lors de la migration de Barcoder à IronBarcode ?

Renommages courants : BarcodeValue devient Value, BarcodeType devient Format. Les résultats d'IronBarcode ajoutent également Confidence et PageNumber. Une recherche et un remplacement à l'échelle de la solution gèrent les renommages dans le code existant de traitement des résultats.

Comment configurer l'octroi de licences IronBarcode dans un pipeline CI/CD ?

Stockez IRONBARCODE_LICENSE_KEY en tant que secret de pipeline et attribuez IronBarCode.License.LicenseKey dans le code de démarrage de l'application. Un seul secret couvre tous les environnements, y compris le développement, les tests, la mise en scène et la production.

IronBarcode prend-il en charge la génération de codes QR avec un style personnalisé ?

Oui. QRCodeWriter.CreateQrCode() prend en charge les couleurs personnalisées via ChangeBarCodeColor(), l'intégration de logos via AddBrandLogo(), les niveaux de correction d'erreur configurables et plusieurs formats de sortie, notamment PNG, JPG, PDF et stream.

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

Lire la suite

Équipe de soutien Iron

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