Passer au contenu du pied de page
VIDéOS

Comment personnaliser et ajouter des logos aux QR Codes en C# | IronBarcode

Migrer de Code-barres Syncfusion vers IronBarcode

Ce guide fournit un chemin de migration complet des contrôles de code-barres de Syncfusion — SfBarcode pour WinForms et WPF, SfBarcodeGenerator pour Blazor et MAUI — vers IronBarcode. Il aborde les raisons structurelles qui poussent les équipes à effectuer cette transition, un guide de démarrage rapide étape par étape pour le remplacement des packages NuGet et la configuration des licences, des exemples de code complets avant et après pour chaque scénario courant, et une liste de contrôle de migration pour l'audit d'une base de code existante. Si le projet utilise également d'autres composants Syncfusion (grilles, graphiques, planificateurs), ces packages et leurs enregistrements ne sont pas affectés ; seul le code spécifique au code-barres change.

Pourquoi migrer depuis Syncfusion Barcode

Lacune de lecture : SfBarcode et SfBarcodeGenerator sont des contrôles de génération sans capacité de lecture. Il n'y a pas de méthode .Read() ou .Scan() dans l'une ou l'autre classe. Lorsqu'un projet nécessite la lecture de codes-barres à partir d'images téléchargées, de documents numérisés ou de fichiers PDF, le contrôle des codes-barres Syncfusion n'offre aucune solution. La documentation de Syncfusion oriente les équipes vers Barcode Reader OPX comme solution, un produit commercial distinct qui doit être acheté, sous licence et maintenu indépendamment.

OPX comme surcouche payante d'un logiciel libre : le lecteur de codes-barres OPX utilise en interne ZXing .NET , une bibliothèque de lecture de codes-barres open source publiée sous la licence Apache 2.0. Apache 2.0 est une licence permissive ; Tout développeur .NET peut installer ZXing.Net directement avec dotnet add package ZXing.Net et l'utiliser dans des applications commerciales sans frais. Un flux de travail complet de lecture et de génération Syncfusion nécessite deux produits Syncfusion distincts, deux accords de licence et deux surfaces d'API — alors que la capacité de lecture pourrait avoir été obtenue directement à partir de la bibliothèque gratuite qu'OPX encapsule.

Conditions d'obtention de la licence communautaire : La licence communautaire de Syncfusion exige que quatre conditions soient remplies simultanément et sans interruption : un chiffre d'affaires annuel brut inférieur à 1 000 000 $, cinq développeurs ou moins, dix employés ou moins au total et un total de capitaux externes levés inférieur à 3 000 000 $. Les organismes gouvernementaux ne sont pas admissibles, quelle que soit leur taille. Le non-respect d'une seule de ces conditions entraîne l'obligation immédiate d'obtenir une licence commerciale. Un tour de table de série A permet généralement de lever plus de 3 000 000 $ de capitaux le jour de sa clôture, déclenchant ainsi des frais de licence indépendamment de la taille de l'équipe ou de ses revenus. La transition commerciale passe de 0 $ à un abonnement annuel Essential Studio par développeur — et cet abonnement couvre l'ensemble de la suite, pas seulement le composant de code-barres. Le chemin publié de Syncfusion est un devis personnalisé du service commercial.

Rotation des clés spécifique à la version : les clés de licence Syncfusion sont liées à des plages de versions spécifiques d'Essential Studio. La mise à niveau de la version 24.x à la version 25.x nécessite l'obtention d'une nouvelle clé à partir du portail de compte, la mise à jour de cette clé dans le magasin de secrets de chaque environnement de déploiement et le redéploiement pour empêcher l'apparition de filigranes d'essai dans les sorties de production. Pour les équipes ayant des cadences de publication fréquentes ou plusieurs cibles de déploiement, cette rotation devient une charge opérationnelle récurrente disproportionnée par rapport à l'exigence sous-jacente de génération d'une image de code-barres.

Le problème fondamental

L'architecture de contrôle de Syncfusion rend la génération de fichiers par programmation indirecte. Produire un fichier de code-barres avec SfBarcode nécessite de pré-allouer un Bitmap, d'appeler DrawToBitmap, puis de sauvegarder le bitmap — un motif de rendu WinForms qui entraîne la dépendance du runtime Windows Forms :

// Syncfusion SfBarcode: indirect file output through DrawToBitmap
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "SHIP-2024-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("shipping-label.png", ImageFormat.Png);
// Reading: not possible — requires separate OPX purchase
// Syncfusion SfBarcode: indirect file output through DrawToBitmap
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "SHIP-2024-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("shipping-label.png", ImageFormat.Png);
// Reading: not possible — requires separate OPX purchase
Imports Syncfusion.Licensing
Imports System.Drawing
Imports System.Drawing.Imaging

' Syncfusion SfBarcode: indirect file output through DrawToBitmap
SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")

Dim barcode As New SfBarcode()
barcode.Text = "SHIP-2024-001"
barcode.Symbology = BarcodeSymbolType.Code128A
barcode.Width = 400
barcode.Height = 150

Using bitmap As New Bitmap(barcode.Width, barcode.Height)
    barcode.DrawToBitmap(bitmap, barcode.ClientRectangle)
    bitmap.Save("shipping-label.png", ImageFormat.Png)
End Using
' Reading: not possible — requires separate OPX purchase
$vbLabelText   $csharpLabel

IronBarcode génère directement les fichiers et les lit avec le même package :

// IronBarcode: direct generation and reading in one package
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPng("shipping-label.png");

// Read — same package, no additional product required
var results = BarcodeReader.Read("shipping-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
// IronBarcode: direct generation and reading in one package
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

// Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPng("shipping-label.png");

// Read — same package, no additional product required
var results = BarcodeReader.Read("shipping-label.png");
foreach (var result in results)
    Console.WriteLine($"{result.Format}: {result.Value}");
Imports IronBarCode

' IronBarcode: direct generation and reading in one package
License.LicenseKey = "YOUR-LICENSE-KEY"

' Generate
BarcodeWriter.CreateBarcode("SHIP-2024-001", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .SaveAsPng("shipping-label.png")

' Read — same package, no additional product required
Dim results = BarcodeReader.Read("shipping-label.png")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Comparaison des fonctionnalités des codes-barres Code-barres IronBarcode et Syncfusion

Fonction Code-barres Syncfusion Code-barres IronBarcode
génération de codes-barres Oui — Contrôle d'interface utilisateur (WinForms, WPF, Blazor, MAUI) Oui — API statique, tous environnements
Lecture de codes-barres Non — lecteur de codes-barres OPX séparé requis Oui, même forfait
OPX lit les encapsulations de produit ZXing .NET (Apache 2.0) Oui N/A
Sortie de code-barres PDF Non — nécessite également Syncfusion.PDF Oui — SaveAsPdf() intégré
lecture de codes-barres PDF Non Oui — natif
Génération côté serveur / sans interface graphique Nécessite le runtime WinForms (DrawToBitmap) Natif — aucune dépendance à l'interface utilisateur
Déploiement Docker / Linux Limité Prise en charge complète
API minimale ASP.NET Core Non directement pris en charge Prise en charge complète
Code QR avec logo intégré Non Oui — .AddBrandLogo()
Détection automatique du format à la lecture N/A Oui
Communauté / niveau gratuit Licence communautaire (quatre conditions simultanées) Essai gratuit de 30 jours (filigrane uniquement)
modèle de licence commerciale Abonnement annuel (Essential Studio) Perpétuel (une seule fois, voir ironsoftware.com/csharp/barcode/licensing)
Étendue de la clé de licence Spécifique à une version, change en fonction des mises à jour majeures de NuGet Version stable au sein de la version majeure
Étapes d'inscription à la plateforme 3 à 4 étapes (RegisterLicense + AddSyncfusionBlazor + ConfigureSyncfusionCore + importations Razor ) Une seule ligne, toutes les plateformes
Gamme de formats 1D Code 128, Code 39, EAN, UPC, Codabar et autres Tous les formats Syncfusion, Plus PDF417, Aztec, MaxiCode, GS1, USPS IMb et plus de 50 autres.
Gamme de formats 2D Code QR, DataMatrix Code QR, DataMatrix, PDF417, Micro PDF417, Aztec, MaxiCode

Démarrage rapide

Étape 1 : Remplacer les paquets NuGet

Supprimez le package de codes-barres Syncfusion pour la plateforme utilisée. Si le projet cible plusieurs plateformes, exécutez la suppression pour chacune d'elles :

# Blazor
dotnet remove package Syncfusion.Blazor.BarcodeGenerator

# WinForms
dotnet remove package Syncfusion.SfBarcode.Windows

# WPF
dotnet remove package Syncfusion.SfBarcode.WPF

# MAUI
dotnet remove package Syncfusion.Maui.Barcode
# Blazor
dotnet remove package Syncfusion.Blazor.BarcodeGenerator

# WinForms
dotnet remove package Syncfusion.SfBarcode.Windows

# WPF
dotnet remove package Syncfusion.SfBarcode.WPF

# MAUI
dotnet remove package Syncfusion.Maui.Barcode
SHELL

S'il ne reste aucun autre package Syncfusion dans le projet après la suppression du package de code-barres, supprimez également le package de licence :

dotnet remove package Syncfusion.Licensing
dotnet remove package Syncfusion.Licensing
SHELL

Installez Code-barres IronBarcode — un seul package pour toutes les plateformes :

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Étape 2 : Mise à jour des espaces de noms

Supprimez les espaces de noms de codes-barres Syncfusion et ajoutez l'espace de noms IronBarcode :

// Remove these (barcode-specific; leave others if non-barcode Syncfusion controls remain)
using Syncfusion.Windows.Forms.Barcode;
using Syncfusion.Licensing;
// @using Syncfusion.Blazor.BarcodeGenerator  (in _Imports.razor)

// Add this
using IronBarCode;
// Remove these (barcode-specific; leave others if non-barcode Syncfusion controls remain)
using Syncfusion.Windows.Forms.Barcode;
using Syncfusion.Licensing;
// @using Syncfusion.Blazor.BarcodeGenerator  (in _Imports.razor)

// Add this
using IronBarCode;
Imports IronBarCode
$vbLabelText   $csharpLabel

Étape 3 : initialisation de la licence

Supprimez l'enregistrement de la licence Syncfusion et la configuration de la plateforme du démarrage de l'application. Ajoutez ensuite une seule ligne de licence Code-barres IronBarcode au même emplacement de démarrage :

// Remove from Program.cs / App.xaml.cs / MauiProgram.cs:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");
builder.Services.AddSyncfusionBlazor();         // Blazor only — remove if no other Syncfusion controls
builder.ConfigureSyncfusionCore();              // MAUI only — remove if no other Syncfusion controls

// Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Remove from Program.cs / App.xaml.cs / MauiProgram.cs:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");
builder.Services.AddSyncfusionBlazor();         // Blazor only — remove if no other Syncfusion controls
builder.ConfigureSyncfusionCore();              // MAUI only — remove if no other Syncfusion controls

// Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' Remove from Program.vb / App.xaml.vb / MauiProgram.vb:
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")
builder.Services.AddSyncfusionBlazor()         ' Blazor only — remove if no other Syncfusion controls
builder.ConfigureSyncfusionCore()              ' MAUI only — remove if no other Syncfusion controls

' Add at the same startup point:
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Pour les pipelines CI/CD et les conteneurs Docker, stockez la clé dans une variable d'environnement :

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
Imports System

IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Exemples de migration de code

WinForms SfBarcode vers BarcodeWriter

La migration WinForms élimine l'indirection DrawToBitmap et la remplace par une chaîne de sortie de fichier directe. Le modèle Syncfusion nécessite la pré-allocation d'un Bitmap de dimensions connues ; Code-barres IronBarcode calcule les dimensions dans le cadre de l'appel de génération.

Approche de Syncfusion :

using Syncfusion.Windows.Forms.Barcode;
using System.Drawing;
using System.Drawing.Imaging;

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "ORD-20240315-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.BarHeight = 100;
barcode.NarrowBarWidth = 1;
barcode.ShowText = true;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("order-label.png", ImageFormat.Png);
using Syncfusion.Windows.Forms.Barcode;
using System.Drawing;
using System.Drawing.Imaging;

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY");

var barcode = new SfBarcode();
barcode.Text = "ORD-20240315-001";
barcode.Symbology = BarcodeSymbolType.Code128A;
barcode.BarHeight = 100;
barcode.NarrowBarWidth = 1;
barcode.ShowText = true;
barcode.Width = 400;
barcode.Height = 150;

using var bitmap = new Bitmap(barcode.Width, barcode.Height);
barcode.DrawToBitmap(bitmap, barcode.ClientRectangle);
bitmap.Save("order-label.png", ImageFormat.Png);
Imports Syncfusion.Windows.Forms.Barcode
Imports System.Drawing
Imports System.Drawing.Imaging

Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-VERSION-SPECIFIC-KEY")

Dim barcode As New SfBarcode()
barcode.Text = "ORD-20240315-001"
barcode.Symbology = BarcodeSymbolType.Code128A
barcode.BarHeight = 100
barcode.NarrowBarWidth = 1
barcode.ShowText = True
barcode.Width = 400
barcode.Height = 150

Using bitmap As New Bitmap(barcode.Width, barcode.Height)
    barcode.DrawToBitmap(bitmap, barcode.ClientRectangle)
    bitmap.Save("order-label.png", ImageFormat.Png)
End Using
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .AddBarcodeText()
    .SaveAsPng("order-label.png");
using IronBarCode;

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .AddBarcodeText()
    .SaveAsPng("order-label.png");
Imports IronBarCode

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

BarcodeWriter.CreateBarcode("ORD-20240315-001", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .AddBarcodeText() _
    .SaveAsPng("order-label.png")
$vbLabelText   $csharpLabel

BarcodeSymbolType.Code128A se mappe sur BarcodeEncoding.Code128. La séquence DrawToBitmap + Bitmap.Save s'effondre dans .SaveAsPng(). Si le code-barres doit être affiché à l'intérieur d'un PictureBox WinForms plutôt que sauvegardé sur disque, utilisez .ToPngBinaryData() pour charger l'image dans le contrôle. La gamme complète des formats de codes-barres 1D dans Code-barres IronBarcode s'étend bien au-delà de la liste prise en charge par le contrôle Syncfusion .

Blazor SfBarcodeGenerator vers point de terminaison API minimal

La migration Blazor est un changement structurel plutôt qu'une substitution ligne par ligne. SfBarcodeGenerator est un composant Razor qui se rend dans le navigateur via la couche JavaScript de Syncfusion. Code-barres IronBarcode ne comporte aucun composant Razor ; Il s'agit d'une bibliothèque côté serveur. Le modèle de remplacement est un point de terminaison API minimal sur le serveur qui renvoie des octets de code-barres, référencé dans la page Razor comme source d'image.

Approche de Syncfusion :

@page "/fulfillment"
@using Syncfusion.Blazor.BarcodeGenerator

<SfBarcodeGenerator
    Width="300px"
    Height="150px"
    Type="BarcodeType.Code128"
    Value="@orderNumber">
    <BarcodeGeneratorDisplayText Visibility="true"></BarcodeGeneratorDisplayText>
</SfBarcodeGenerator>

@code {
    private string orderNumber = "ORD-20240315-001";
}

Approche IronBarcode :

Ajoutez un point de terminaison de génération dans Program.cs :

using IronBarCode;

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .AddBarcodeText()
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});
using IronBarCode;

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .AddBarcodeText()
        .ToPngBinaryData();

    return Results.File(bytes, "image/png");
});
Imports IronBarCode

app.MapGet("/barcode/{value}", Function(value As String)
    Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
        .ResizeTo(300, 150) _
        .AddBarcodeText() _
        .ToPngBinaryData()

    Return Results.File(bytes, "image/png")
End Function)
$vbLabelText   $csharpLabel

Référencez le point de terminaison dans le composant Razor :

@page "/fulfillment"

<img src="/barcode/@orderNumber" alt="Order barcode: @orderNumber" />

@code {
    private string orderNumber = "ORD-20240315-001";
}

Ce point de terminaison est testable indépendamment, réutilisable depuis n'importe quel client HTTP et compatible avec Blazor Server, Blazor WebAssembly avec un backend API hébergé et tout autre frontend web.

Génération de codes QR

Le composant QR de Syncfusion est également rendu côté navigateur, sans chemin de sortie côté serveur. Code-barres IronBarcode génère des codes QR côté serveur avec une sortie fichier directe.

Approche de Syncfusion :

@using Syncfusion.Blazor.BarcodeGenerator

<SfQRCodeGenerator
    Width="300px"
    Height="300px"
    Value="https://example.com/product/ABC-123">
    <QRCodeGeneratorDisplayText Visibility="false">
    </QRCodeGeneratorDisplayText>
</SfQRCodeGenerator>

Approche IronBarcode :

using IronBarCode;

// Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300,
    QRCodeWriter.QrErrorCorrectionLevel.High)
    .SaveAsPng("product-qr.png");

// QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("product-qr-branded.png");
using IronBarCode;

// Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300,
    QRCodeWriter.QrErrorCorrectionLevel.High)
    .SaveAsPng("product-qr.png");

// QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500,
    QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("product-qr-branded.png");
Imports IronBarCode

' Standard QR code
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 300, QRCodeWriter.QrErrorCorrectionLevel.High) _
    .SaveAsPng("product-qr.png")

' QR code with embedded brand logo — not available in Syncfusion
QRCodeWriter.CreateQrCode("https://example.com/product/ABC-123", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("company-logo.png") _
    .SaveAsPng("product-qr-branded.png")
$vbLabelText   $csharpLabel

Remplacement de lecture OPX

Si le projet utilisait Barcode Reader OPX — ou reportait une exigence de lecture à un achat OPX ultérieur — Code-barres IronBarcode remplace cette dépendance par le package déjà installé. Pas de produit secondaire, pas de deuxième licence.

Approche Syncfusion (lecteur de codes-barres OPX) :

// Requires separate Code-barres Syncfusion Reader OPX purchase
// OPX wraps ZXing.Net internally (Apache 2.0 — free to use directly)
using Syncfusion.BarcodeReader;

var reader = new BarcodeReader();
var results = reader.ReadBarcodes("warehouse-scan.png");
foreach (var result in results)
    Console.WriteLine($"Value: {result.Value}");
// Requires separate Code-barres Syncfusion Reader OPX purchase
// OPX wraps ZXing.Net internally (Apache 2.0 — free to use directly)
using Syncfusion.BarcodeReader;

var reader = new BarcodeReader();
var results = reader.ReadBarcodes("warehouse-scan.png");
foreach (var result in results)
    Console.WriteLine($"Value: {result.Value}");
Imports Syncfusion.BarcodeReader

Dim reader As New BarcodeReader()
Dim results = reader.ReadBarcodes("warehouse-scan.png")
For Each result In results
    Console.WriteLine($"Value: {result.Value}")
Next
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

// Included in the same NuGet package as generation — no second product required
var results = BarcodeReader.Read("warehouse-scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
}
using IronBarCode;

// Included in the same NuGet package as generation — no second product required
var results = BarcodeReader.Read("warehouse-scan.png");
foreach (var result in results)
{
    Console.WriteLine($"Format: {result.Format}");
    Console.WriteLine($"Value: {result.Value}");
    Console.WriteLine($"Confidence: {result.Confidence}%");
}
Imports IronBarCode

' Included in the same NuGet package as generation — no second product required
Dim results = BarcodeReader.Read("warehouse-scan.png")
For Each result In results
    Console.WriteLine($"Format: {result.Format}")
    Console.WriteLine($"Value: {result.Value}")
    Console.WriteLine($"Confidence: {result.Confidence}%")
Next
$vbLabelText   $csharpLabel

La documentation sur la lecture des codes-barres couvre la lecture à partir de tableaux d'octets pour les gestionnaires de téléchargement, le réglage de la vitesse par rapport à la précision et la détection de plusieurs codes-barres.

Génération de codes-barres PDF

Les contrôles de codes-barres Syncfusion ne disposent pas de chemin de sortie PDF. Code-barres IronBarcode considère le format PDF comme un format de sortie de premier ordre.

Approche de Syncfusion :

// Non direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
// Step 1: Generate to Bitmap via DrawToBitmap
// Step 2: Load Syncfusion PDF document
// Step 3: Insert bitmap as image element
// Two packages, two APIs, two license obligations
// Non direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
// Step 1: Generate to Bitmap via DrawToBitmap
// Step 2: Load Syncfusion PDF document
// Step 3: Insert bitmap as image element
// Two packages, two APIs, two license obligations
' Non direct path — requires combining Syncfusion.Barcode.WinForms and Syncfusion.Pdf
' Step 1: Generate to Bitmap via DrawToBitmap
' Step 2: Load Syncfusion PDF document
' Step 3: Insert bitmap as image element
' Two packages, two APIs, two license obligations
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

// Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPdf("pallet-label.pdf");

// Read barcodes from an existing PDF
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
using IronBarCode;

// Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .SaveAsPdf("pallet-label.pdf");

// Read barcodes from an existing PDF
var pdfResults = BarcodeReader.Read("shipping-manifest.pdf");
foreach (var result in pdfResults)
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}");
Imports IronBarCode

' Generate directly to PDF — no secondary library required
BarcodeWriter.CreateBarcode("PALLET-2024-0891", BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .SaveAsPdf("pallet-label.pdf")

' Read barcodes from an existing PDF
Dim pdfResults = BarcodeReader.Read("shipping-manifest.pdf")
For Each result In pdfResults
    Console.WriteLine($"Page {result.PageNumber}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Le guide de génération de PDF avec codes-barres couvre les sorties PDF multipages et l'intégration de codes-barres au sein d'autres contenus de documents.

Référence de mappage de l'API de codes-barres Syncfusion vers IronBarcode

Syncfusion Code-barres IronBarcode
SyncfusionLicenseProvider.RegisterLicense("KEY") IronBarCode.License.LicenseKey = "key"
builder.Services.AddSyncfusionBlazor() Non requis
builder.ConfigureSyncfusionCore() Non requis
new SfBarcode() BarcodeWriter.CreateBarcode() (statique)
barcode.Text = "value" Premier paramètre de CreateBarcode()
barcode.Symbology = BarcodeSymbolType.Code128A BarcodeEncoding.Code128
barcode.Symbology = BarcodeSymbolType.QRBarcode QRCodeWriter.CreateQrCode()
barcode.BarHeight = 100 .ResizeTo(width, 100)
barcode.ShowText = true .AddBarcodeText()
barcode.DrawToBitmap(bitmap, rect) .SaveAsPng(path)
Manuel BitmapMemoryStream .ToPngBinaryData()
<SfBarcodeGenerator Type="BarcodeType.Code128" Value="..."> BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) dans le point de terminaison de l'API
<SfQRCodeGenerator Value="..."> QRCodeWriter.CreateQrCode(value, size) dans le point de terminaison de l'API
BarcodeType.Code128 (énum Blazor) BarcodeEncoding.Code128
Lecteur de codes-barres OPX (produit séparé, encapsule ZXing .NET) BarcodeReader.Read(path) — natif, même paquet
Aucune API de lecture en contrôle BarcodeReader.Read(path)
Aucune sortie PDF dans le contrôle .SaveAsPdf(path)
Lecture de PDF impossible BarcodeReader.Read("document.pdf")

Problèmes de migration courants et solutions

Problème n° 1 : Filigranes d'essai après la mise à jour de NuGet

Syncfusion: La mise à niveau d'Essential Studio 24.x vers la version 25.x invalide la clé de licence existante. Toute sortie générée avant la mise à jour du magasin de secrets affichera un filigrane d'essai. Il s'agit d'une défaillance silencieuse : l'application continue de fonctionner, mais produit une sortie non conforme.

Solution : Après la mise à jour du package NuGet Code-barres IronBarcode , la clé de licence ne change pas au sein d'une même version majeure. Aucune mise à jour ou redéploiement de secrets n'est nécessaire pour les versions mineures ou les correctifs. Lors de la mise à niveau vers une nouvelle version majeure, mettez à jour la clé une seule fois au point d'entrée de l'application :

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

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

Problème n° 2 : La fonction DrawToBitmap ne fonctionne pas dans les environnements sans interface graphique.

Syncfusion : SfBarcode.DrawToBitmap dépend du pipeline de rendu Windows Forms. Dans un processus ASP.NET Core, une fonction Azure ou un conteneur Docker Linux, appeler DrawToBitmap renverra InvalidOperationException ou produira un bitmap vide car aucune boucle de messages Windows Forms n'est présente.

Solution: Replace with BarcodeWriter.CreateBarcode(). Code-barres IronBarcode effectue la génération en code managé sans aucune dépendance à l'environnement d'exécution de l'interface utilisateur :

// Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .ToPngBinaryData();
// Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
    .ResizeTo(400, 150)
    .ToPngBinaryData();
' Works in ASP.NET Core, Azure Functions, Docker on Linux, console apps
Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
    .ResizeTo(400, 150) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Problème 3 : SfBarcodeGenerator ne génère aucune sortie côté serveur

Syncfusion : SfBarcodeGenerator est un composant Razor sans surface d'API côté serveur. Toute tentative d'utilisation dans une action de contrôleur ou un service en arrière-plan ne trouvera aucune méthode applicable pour générer des octets de code-barres.

Solution : Créer un point de terminaison API minimal qui génère le code-barres côté serveur et le renvoie sous forme de réponse HTTP. Référencez le point de terminaison depuis le composant Razor via un tag <img src="..."> :

app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .ToPngBinaryData();
    return Results.File(bytes, "image/png");
});
app.MapGet("/barcode/{value}", (string value) =>
{
    var bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128)
        .ResizeTo(300, 150)
        .ToPngBinaryData();
    return Results.File(bytes, "image/png");
});
Imports Microsoft.AspNetCore.Builder
Imports Microsoft.AspNetCore.Http

app.MapGet("/barcode/{value}", Function(value As String)
                                   Dim bytes = BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128) _
                                       .ResizeTo(300, 150) _
                                       .ToPngBinaryData()
                                   Return Results.File(bytes, "image/png")
                               End Function)
$vbLabelText   $csharpLabel

Problème n° 4 : Capacité de lecture manquante (OPX non acheté)

Syncfusion: Les projets qui ont reporté la lecture des codes-barres parce qu'OPX n'avait pas encore été acheté n'ont pas de code de lecture à migrer. L'ajout d'une fonctionnalité de lecture à partir de zéro nécessite l'acquisition d'un produit OPX, son intégration et un nouvel accord de licence.

Solution : La lecture des Code-barres IronBarcode est incluse dans le même package. Aucune procédure d'acquisition ni deuxième licence n'est nécessaire. Ajoutez BarcodeReader.Read(path) partout où la lecture est requise :

var results = BarcodeReader.Read("incoming-scan.png");
var results = BarcodeReader.Read("incoming-scan.png");
Dim results = BarcodeReader.Read("incoming-scan.png")
$vbLabelText   $csharpLabel

Problème n° 5 : Expiration de la licence communautaire pendant la migration

Syncfusion: Une équipe utilisant la licence communautaire qui franchit un seuil d'éligibilité quelconque pendant la période de migration (y compris la clôture d'un cycle de financement) peut constater que les contrôles Syncfusion cessent de produire une sortie valide avant la fin de la migration.

Solution : L'essai gratuit de 30 jours d'IronBarcode permet une évaluation complète sans aucune condition de chiffre d'affaires, d'effectif ou de capital. Le filigrane d'essai apparaît sur le document généré ; L'activation d'une clé de licence achetée la supprime. Le modèle de licence Code-barres IronBarcode ne comporte aucun seuil de taille d'organisation.

Liste de contrôle de migration des codes-barres Syncfusion

Tâches préalables à la migration

Analysez le code source pour localiser tous les fichiers qui font référence au code-barres Syncfusion :

grep -r "SyncfusionLicenseProvider.RegisterLicense\|AddSyncfusionBlazor\|ConfigureSyncfusionCore" --include="*.cs" .
grep -r "new SfBarcode\(\)\|SfBarcodeGenerator\|SfQRCodeGenerator" --include="*.cs" --include="*.razor" .
grep -r "BarcodeSymbolType\.\|BarcodeType\." --include="*.cs" --include="*.razor" .
grep -r "DrawToBitmap\|barcode\.Text\s*=" --include="*.cs" .
grep -r "Syncfusion\.Barcode\|Syncfusion\.Blazor\.BarcodeGenerator" --include="*.csproj" .
grep -r "SyncfusionLicenseProvider.RegisterLicense\|AddSyncfusionBlazor\|ConfigureSyncfusionCore" --include="*.cs" .
grep -r "new SfBarcode\(\)\|SfBarcodeGenerator\|SfQRCodeGenerator" --include="*.cs" --include="*.razor" .
grep -r "BarcodeSymbolType\.\|BarcodeType\." --include="*.cs" --include="*.razor" .
grep -r "DrawToBitmap\|barcode\.Text\s*=" --include="*.cs" .
grep -r "Syncfusion\.Barcode\|Syncfusion\.Blazor\.BarcodeGenerator" --include="*.csproj" .
SHELL

Documentez les éléments suivants avant d'écrire tout code de migration :

  • Listez chaque fichier qui appelle SyncfusionLicenseProvider.RegisterLicense
  • Listez chaque instanciation de SfBarcode et ses affectations de propriétés
  • Listez chaque utilisation de composant Razor <SfBarcodeGenerator> et <SfQRCodeGenerator>
  • Listez chaque appel de DrawToBitmap et le chemin de sauvegarde ou d'affichage en aval
  • Vérifiez si le lecteur de codes-barres OPX est installé ; Si oui, veuillez énumérer chaque appel de lecture

Tâches de mise à jour du code

  1. Supprimez les packages NuGet de code-barres Syncfusion pour chaque plateforme du projet.
  2. Retirez le paquet NuGet Syncfusion.Licensing si aucun autre contrôle Syncfusion ne reste
  3. Installez le paquet NuGet IronBarcode
  4. Remplacez SyncfusionLicenseProvider.RegisterLicense("KEY") par IronBarCode.License.LicenseKey = "KEY" au point d'entrée de l'application
  5. Retirez builder.Services.AddSyncfusionBlazor() si aucun autre contrôle Syncfusion ne reste
  6. Retirez builder.ConfigureSyncfusionCore() si aucun autre contrôle Syncfusion ne reste
  7. Retirez @using Syncfusion.Blazor et @using Syncfusion.Blazor.BarcodeGenerator de _Imports.razor si applicable
  8. Remplacez using Syncfusion.Windows.Forms.Barcode et using Syncfusion.Licensing par using IronBarCode
  9. Remplacez chaque bloc new SfBarcode() + affectations de propriétés + DrawToBitmap par BarcodeWriter.CreateBarcode(value, BarcodeEncoding.X).ResizeTo(w, h).SaveAsPng(path)
  10. Remplacez BarcodeSymbolType.Code128A (et équivalent) par BarcodeEncoding.Code128
  11. Remplacez BarcodeType.Code128 (enum Blazor) par BarcodeEncoding.Code128
  12. Remplacez chaque composant Razor <SfBarcodeGenerator> par un point de terminaison d'API minimal et une référence <img src="..."> dans le composant
  13. Remplacez chaque composant Razor <SfQRCodeGenerator> par un point de terminaison QRCodeWriter.CreateQrCode() et une référence <img src="...">
  14. Remplacez tous les appels de lecture Barcode Reader OPX par BarcodeReader.Read(path)
  15. Ajoutez BarcodeReader.Read(path) partout où la capacité de lecture était précédemment absente à cause du non-acquisition d'OPX

Test de post-migration

  • Vérifiez que les images de codes-barres générées sont valides pour la lecture à l'aide d'un lecteur matériel ou d'une application de lecture de référence.
  • Vérifiez qu'aucun filigrane d'essai n'apparaît sur les fichiers générés après l'activation de la clé de licence.
  • Confirmez que BarcodeReader.Read() renvoie la valeur et le format attendus pour chaque type de code-barres utilisé
  • Testez la sortie PDF avec .SaveAsPdf() pour confirmer que les dimensions des pages et des codes-barres correspondent aux exigences de conception
  • Testez directement le point de terminaison de l'API minimale Blazor (via un navigateur ou un client HTTP) avant de le tester dans le composant Razor.
  • Vérifier que le déploiement de Docker et Linux produit un résultat identique à celui des machines de développement Windows.
  • Effectuez une vérification finale grep pour confirmer qu'il n'y a pas de références restantes à SfBarcode, SfBarcodeGenerator, DrawToBitmap, BarcodeSymbolType, ou SyncfusionLicenseProvider

Principaux avantages de la migration vers IronBarcode

Génération et lecture unifiées : après la migration, la génération et la lecture fonctionnent toutes deux via un seul package NuGet sous une seule licence. Il n'y a pas de produit secondaire à acheter, pas de deuxième interface API à apprendre, et aucune dépendance à un wrapper ZXing .NET consommant un budget de licence qui pourrait être alloué directement à la bibliothèque open source.

Suppression de la rotation des clés spécifique à la version : les clés de licence Code-barres IronBarcode restent valides pour les mises à jour mineures et les correctifs au sein d'une version majeure. Les frais généraux liés à l'obtention d'une nouvelle clé, à la mise à jour des secrets dans chaque environnement de déploiement et au redéploiement pour effacer les filigranes d'essai à chaque mise à jour majeure de la version NuGet sont entièrement éliminés.

Déploiement indépendant de la plateforme : le même package Code-barres IronBarcode et la même API de génération fonctionnent sur les applications de bureau WinForms, les services ASP.NET Core , les Azure Functions, les applications console et les conteneurs Docker Linux. La dépendance du runtime Windows Forms introduite par DrawToBitmap est supprimée, et les déploiements Blazor passent de composants rendus par le navigateur à des points de terminaison d'API côté serveur qui sont testables indépendamment et agnostiques du client.

Prise en charge native du format PDF : La génération et la lecture s'étendent toutes deux nativement au format PDF. La production d'un PDF de code-barres ne nécessite plus la coordination de deux produits Syncfusion ; La lecture des codes-barres à partir des manifestes PDF et des documents d'expédition ne nécessite plus d'étape d'extraction PDF distincte.

Économie des licences prévisible : le modèle de licence perpétuelle d'IronBarcode n'impose aucun seuil de revenus, d'effectifs, de nombre d'employés ou de capital. Les équipes qui ont dépassé les conditions d'éligibilité à la licence communautaire Syncfusion — ou qui prévoient de le faire — passent à un modèle de licence où la croissance organisationnelle ne crée pas d'événement de conformité.

Veuillez noter Syncfusion et ZXing.NET sont des marques déposées de leurs propriétaires respectifs. Ce site n'est pas affilié ni approuvé par Syncfusion ou ZXing.NET. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.

Questions Fréquemment Posées

Pourquoi devrais-je migrer de Syncfusion BarCode vers 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 Syncfusion 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 Syncfusion Barcode vers 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 à la fois Syncfusion 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 à Syncfusion Barcode ?

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 Syncfusion ?

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 Syncfusion Barcode vers 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