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

LEADTOOLS Barcode vs IronBarcode : Comparaison des bibliothèques de codes-barres C#

Pour utiliser LEADTOOLS Code-barres dans Docker, vous devez monter un fichier de licence dans votre conteneur à un emplacement spécifique. Ce fichier doit être inclus dans chaque déploiement. Les variables d'environnement ne suffisent pas. Chaque déploiement de LEADTOOLS pose un problème de gestion de fichiers.

Cela ne remet pas en cause le travail d'ingénierie de LEADTOOLS ; cela reflète une architecture de licences vieille de 30 ans, conçue avant l'existence des conteneurs. Mais en 2026, lorsque votre pipeline CI/CD doit construire et pousser une image de conteneur, vous intégrez un fichier .LIC dans l'image ou vous le montez en tant que volume au moment de l'exécution. Dans les deux cas, votre bibliothèque BarCode nécessite un accès au système de fichiers avant de s'initialiser. C'est le compromis sous-jacent que cette comparaison explore.

Comprendre le code-barres LEADTOOLS

LEADTOOLS Barcode fait partie du kit de développement logiciel (SDK) complet d'imagerie de documents de LEAD Technologies, en développement continu depuis 1990. Le module de code-barres prend en charge plus de 40 symbologies et s'intègre étroitement à l'écosystème LEADTOOLS plus large pour la reconnaissance optique de caractères (OCR), le traitement de formulaires, la manipulation de PDF et la visualisation d'images. Cette intégration de l'écosystème est véritablement précieuse lorsqu'une application requiert l'ensemble de ces fonctionnalités auprès d'un seul fournisseur. Lorsque l'exigence concerne la lecture de codes-barres dans un microservice autonome ou une application dédiée, cette même intégration représente une surcharge dont il faut tenir compte dans chaque déploiement.

L'architecture de la bibliothèque reflète son ancienneté. LEADTOOLS a été conçu à une époque où la gestion des ressources était explicite, la configuration manuelle et les licences basées sur le système de fichiers. Chacune de ces décisions de conception était judicieuse dans son contexte. Dans le développement .NET moderne (charges de travail conteneurisées, pipelines CI/CD, systèmes de gestion des secrets), ces mêmes décisions créent des frictions que les équipes doivent activement contourner.

Le déploiement de LEADTOOLS Code-barres nécessite au minimum cinq packages NuGet . L'extraction de codes-barres PDF en ajoute un sixième. Sous Windows, le runtime MSVC++ 2017 doit être installé sur le système hôte. Le fichier généré par une application de codes-barres LEADTOOLS pèse environ 148 Mo.

Caractéristiques architecturales clés du code-barres LEADTOOLS :

  • Architecture de licence basée sur les fichiers: Requiert un fichier .LIC physiquement présent sur le disque à un chemin d'accès connu, ainsi qu'une chaîne de clé de développeur. Les deux doivent être accessibles lors de l'exécution pour que la bibliothèque puisse s'initialiser.
  • Modèle de licence à deux niveaux : les licences de développement et les licences de déploiement sont facturées et obtenues séparément. Pour obtenir un devis de déploiement en production, veuillez contacter le service commercial de LEADTOOLS.
  • Installation multi-packages: Une installation minimale compatible avec les codes-barres nécessite Leadtools.Barcode, Leadtools, Leadtools.Codecs, Leadtools.Codecs.Png, et Leadtools.Codecs.Jpeg. Chaque format d'image supplémentaire nécessite son propre ensemble de codecs.
  • Dépendance à l'environnement d'exécution natif : les déploiements Windows nécessitent l'environnement d'exécution MSVC++ 2017 en plus de l'environnement d'exécution .NET .
  • Déclaration explicite de la symbologie: La lecture des BarCodes nécessite le passage d'un tableau de valeurs BarcodeSymbology enum spécifiant les formats à scanner. Les formats omis ne seront pas détectés.
  • Séquence d'initialisation en couches: Après avoir chargé le fichier de licence, l'application doit vérifier que la licence n'a pas expiré et que chaque fonctionnalité requise - lecture 1D, lecture 2D, écriture - est déverrouillée individuellement avant de créer un BarcodeEngine.
  • Plus de 40 symbologies prises en charge : couverture étendue des formats de codes-barres 1D et 2D dans le cadre d'une plateforme d'imagerie complète.

L'architecture des licences basées sur les fichiers

L'initialisation de LEADTOOLS nécessite environ 20 lignes de code avant que la première opération de code-barres puisse être exécutée. La séquence couvre la résolution du chemin d'accès aux fichiers, la vérification de l'expiration et la vérification du verrouillage par fonctionnalité :

// LEADTOOLS: Plus de 20 lignes before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: Plus de 20 lignes before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

Ce bloc d'initialisation doit s'exécuter avec succès avant que toute opération de lecture ou d'écriture de code-barres puisse fonctionner. Si le fichier .LIC est absent, si le chemin d'accès est incorrect ou si les autorisations du fichier sont erronées, LEADTOOLS ne s'initialisera pas - pas silencieusement, mais avec une erreur qui interrompt le fonctionnement.

Comprendre IronBarcode

IronBarcode est une bibliothèque de codes-barres .NET spécialisée, conçue spécifiquement pour la lecture et la génération de codes-barres dans les applications .NET . Plutôt que d'être un module au sein d'un kit de développement logiciel d'imagerie plus vaste, Code-barres IronBarcode se concentre sur la fonctionnalité des codes-barres comme objectif principal. La bibliothèque est distribuée sous la forme d'un seul package NuGet qui inclut la prise en charge de tous les formats d'image, l'extraction native des codes-barres PDF et la correction d'erreurs basée sur l'apprentissage automatique, sans nécessiter de packages de codecs supplémentaires ni de dépendances d'exécution natives.

IronBarcode utilise une conception d'API statique. Les opérations de lecture et d'écriture sont disponibles sous forme d'appels de méthodes statiques sur BarcodeReader et BarcodeWriter sans nécessiter la création d'instances ou d'objets d'initialisation. L'activation de la licence consiste en l'attribution d'une seule chaîne de caractères. La bibliothèque détecte automatiquement les formats de codes-barres parmi plus de 50 symbologies prises en charge, éliminant ainsi la nécessité d'énumérer les formats attendus avant chaque opération de lecture.

La bibliothèque cible .NET Standard 2.0et versions ultérieures, assurant la compatibilité avec .NET Framework 4.6.2+, .NET 5, .NET 6, .NET 7, .NET 8 et .NET 9. Aucun environnement d'exécution natif spécifique à la plateforme n'est requis sur les systèmes d'exploitation pris en charge.

Caractéristiques principales d' IronBarcode:

  • Licence par clé de chaîne : l'activation de la licence nécessite l'attribution d'une seule chaîne de caractères. La clé peut provenir d'une variable d'environnement, d'un fichier de configuration, d'un gestionnaire de secrets ou de toute source fournissant une valeur de type chaîne de caractères.
  • Paquet NuGet unique: Toutes les fonctionnalités de prise en charge des formats d'image, d'extraction PDF et de codes-barres sont incluses dans IronBarcode. Aucun pack de codecs supplémentaire n'est requis.
  • Static Fluent API: BarcodeReader.Read() et BarcodeWriter.CreateBarcode() sont des points d'entrée statiques. Aucune instance de moteur ni aucun objet codec ne doivent être créés.
  • Détection automatique du format : Lecture sur plus de 50 symbologies prises en charge sans que l'appelant ait besoin de spécifier les formats attendus.
  • Prise en charge intégrée des fichiers PDF : l'extraction des codes-barres PDF est incluse dans le package de base sans installation supplémentaire.
  • Plus de 50 symbologies prises en charge : couvre tous les principaux formats de codes-barres 1D et 2D, y compris Code 128, Code 39, QR Code, Data Matrix, PDF417, EAN-13 et UPC-A.
  • Correction d'erreurs par apprentissage automatique : La correction d'images basée sur l'apprentissage automatique améliore la précision de lecture des images de codes-barres endommagées ou de faible qualité.

Comparaison des fonctionnalités

Le tableau suivant met en évidence les différences fondamentales entre LEADTOOLS Code-barres et IronBarcode:

Fonction LEADTOOLS Code-barres Code-barres IronBarcode
Modèle de licence Fichier + clé (à deux niveaux) Clé uniquement (niveau unique)
Empreinte du SDK Plus de 5 packages + environnement d'exécution natif 1 paquet
Code d'initialisation Plus de 20 lignes 1 ligne
Déploiement de Docker Montage de fichier requis Variable d'environnement
extraction de codes-barres PDF Emballage séparé Intégré
Détection automatique du format Limité Oui
Symbologie totale 40 ans et plus 50 ans et plus
Correction d'erreur ML Non Oui

Comparaison détaillée des fonctionnalités

Fonction LEADTOOLS Code-barres Code-barres IronBarcode
Licence
Modèle de licence Fichier + clé de développeur Clé de chaîne uniquement
Niveaux de licence Développement + Déploiement (séparés) Licence perpétuelle unique
Tarification du déploiement Contacter le service des ventes Prix publiés
Licence dans variable d'environnement Partiel (clé uniquement, fichier toujours requis) Oui
Gestionnaire de secrets agréé Fichier toujours requis Oui (chaîne de caractères uniquement)
Installation
Packages NuGet requis 5+ 1
Dépendance d'exécution native MSVC++ 2017 (Windows) Aucun
module de prise en charge PDF Séparer (Leadtools.Codecs.Pdf) Inclus dans l'offre
Taille de sortie publiée ~148 Mo ~39 Mo
En lisant
Symbologies 1D 25 ans et plus 30+
Symbologies 2D 15 ans et plus 15 ans et plus
Détection automatique du format Limité Oui
Déclaration explicite de la symbologie requise Oui Non
extraction de codes-barres PDF Oui (emballage séparé) Oui (intégré)
Correction d'erreur ML Non Oui
Détection de plusieurs codes-barres Oui Oui
Génération
Génération du code 128 Oui Oui
génération de code QR Oui Oui
logo de code QR Non Oui
API de génération Fluent Non Oui
Formats de sortie PNG, JPEG, BMP PNG, JPEG, BMP, SVG, HTML, PDF
Conception d'API
style API Graphe d'objets hérité Statique fluide
lignes d'initialisation 20+ 1
couche de chargement d'images Codecs raster (séparés) Automatique
Plateforme
Multiplateforme Partiel (dépendances natives) Complet (.NET Standard)
Prise en charge de Docker/conteneurs Montage de fichier requis Variable d'environnement
.NET Standard 2.0 Oui Oui
.NET 8 / .NET 9 Oui Oui

Architecture des licences

L'architecture des licences est la différence la plus importante entre ces deux bibliothèques pour les équipes déployant sur des infrastructures modernes.

Approche LEADTOOLS

La licence LEADTOOLS nécessite un fichier .LIC physiquement présent sur le système de fichiers à un chemin connu, ainsi qu'une chaîne de clé de développeur transmise à RasterSupport.SetLicense. Après avoir appelé SetLicense, l'application doit vérifier que la licence n'a pas expiré et que chaque fonctionnalité de code-barres est déverrouillée individuellement. Un BarcodeEngine ne peut être créé qu'une fois que toutes les vérifications ont été effectuées :

// LEADTOOLS: Plus de 20 lignes before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
// LEADTOOLS: Plus de 20 lignes before the first barcode operation
using Leadtools;
using Leadtools.Barcode;

RasterSupport.SetLicense(
    @"C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC",
    "your-developer-key-here");

if (RasterSupport.KernelExpired)
    throw new InvalidOperationException("LEADTOOLS license has expired");

if (RasterSupport.IsLocked(RasterSupportType.Barcode1DRead))
    throw new InvalidOperationException("1D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.Barcode2DRead))
    throw new InvalidOperationException("2D barcode reading is locked");

if (RasterSupport.IsLocked(RasterSupportType.BarcodeWrite))
    throw new InvalidOperationException("Barcode writing is locked");

var engine = new BarcodeEngine();
Imports Leadtools
Imports Leadtools.Barcode

RasterSupport.SetLicense("C:\LEADTOOLS23\Support\Common\License\LEADTOOLS.LIC", "your-developer-key-here")

If RasterSupport.KernelExpired Then
    Throw New InvalidOperationException("LEADTOOLS license has expired")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) Then
    Throw New InvalidOperationException("1D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) Then
    Throw New InvalidOperationException("2D barcode reading is locked")
End If

If RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) Then
    Throw New InvalidOperationException("Barcode writing is locked")
End If

Dim engine As New BarcodeEngine()
$vbLabelText   $csharpLabel

Ce modèle basé sur les fichiers est antérieur aux systèmes modernes de gestion des secrets. Le fichier .LIC doit être provisionné dans chaque environnement où l'application fonctionne : machines de développement, agents de construction CI, serveurs de staging et hôtes de production.

Approche IronBarcode

L'initialisation de la licence d'IronBarcode se fait sur une seule ligne :

// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
// IronBarcode: done
IronBarCode.License.LicenseKey = "YOUR-KEY";
$vbLabelText   $csharpLabel

Cette clé peut provenir d'une variable d'environnement, d'un fichier de configuration ou d'un gestionnaire de secrets — de n'importe quel endroit pouvant contenir une chaîne de caractères. Il n'y a aucun fichier à localiser, aucune vérification d'expiration à effectuer et aucun verrouillage de fonctionnalité à vérifier. Pour les options de configuration et de déploiement des licences, la documentation couvre tous les modèles : variables d'environnement, appsettings.json, Azure Key Vault, et plus encore.

Déploiement de Docker et de conteneurs

La différence d'architecture de licence devient concrète lors de la rédaction d'un Dockerfile.

Approche LEADTOOLS

Le déploiement de LEADTOOLS Docker nécessite de copier le fichier .LIC dans l'image du conteneur ou de le monter en tant que volume au moment de l'exécution :

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

# The license file must be physically present in the container
COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC

ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
ENV LEADTOOLS_DEVELOPER_KEY=your-developer-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

Cette approche entraîne des complications ultérieures. La rotation ou la révocation d'une clé de licence nécessite la reconstruction de l'image ou le remontage du volume. Le pipeline CI/CD doit soit vérifier le fichier .LIC, soit le décoder à partir d'un secret encodé en base64 au moment de la construction. Les secrets Kubernetes conçus pour les paires clé-valeur-chaîne doivent désormais stocker le contenu des fichiers. Les équipes utilisant des conteneurs éphémères doivent résoudre le problème de l'approvisionnement en fichiers sur chaque nouveau nœud.

Approche IronBarcode

IronBarcode ne nécessite aucun fichier dans le conteneur :

FROM mcr.microsoft.com/dotnet/aspnet:8.0

WORKDIR /app
COPY publish/ .

ENV IRONBARCODE_LICENSE=your-license-key

ENTRYPOINT ["dotnet", "YourApp.dll"]

Le modèle de variable d'environnement fonctionne nativement avec les secrets Docker, les secrets Kubernetes, AWS Secrets Manager, Azure Key Vault et HashiCorp Vault — tout système capable d'injecter une chaîne de caractères dans l'environnement d'un conteneur. Il existe un guide complet de déploiement Docker et Linux couvrant les images de base Alpine et Debian.

Lecture de codes-barres

Approche LEADTOOLS

La lecture de LEADTOOLS nécessite la création d'une instance RasterCodecs pour charger l'image, d'une instance BarcodeEngine pour la numériser et d'un tableau explicite de valeurs BarcodeSymbology spécifiant les formats à rechercher. Omettre une symbologie du tableau signifie que LEADTOOLS ne détectera pas les codes-barres de ce type :

// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
// LEADTOOLS: codec, engine, explicit symbology list
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

using var codecs = new RasterCodecs();
using var image = codecs.Load(imagePath);
var engine = new BarcodeEngine();

var symbologies = new[]
{
    BarcodeSymbology.Code128,
    BarcodeSymbology.QR,
    BarcodeSymbology.DataMatrix,
    BarcodeSymbology.EAN13,
    BarcodeSymbology.UPCA
};

var barcodes = engine.Reader.ReadBarcodes(
    image,
    LogicalRectangle.Empty,
    0,
    symbologies);

return barcodes.Select(b => b.Value).ToArray();
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim barcodes As IEnumerable(Of BarcodeData)
Using codecs As New RasterCodecs()
    Using image As RasterImage = codecs.Load(imagePath)
        Dim engine As New BarcodeEngine()

        Dim symbologies As BarcodeSymbology() = {
            BarcodeSymbology.Code128,
            BarcodeSymbology.QR,
            BarcodeSymbology.DataMatrix,
            BarcodeSymbology.EAN13,
            BarcodeSymbology.UPCA
        }

        barcodes = engine.Reader.ReadBarcodes(
            image,
            LogicalRectangle.Empty,
            0,
            symbologies)
    End Using
End Using

Return barcodes.Select(Function(b) b.Value).ToArray()
$vbLabelText   $csharpLabel

Approche IronBarcode

IronBarcode détecte automatiquement les formats parmi plus de 50 symbologies prises en charge. Le chemin du fichier est transmis directement ; Aucune couche de chargement d'images ni aucun tableau de symbologie n'est requis :

// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
// IronBarcode: auto-detect, no object setup
using IronBarCode;

var results = BarcodeReader.Read(imagePath);
return results.Select(r => r.Value).ToArray();
Imports IronBarCode

Dim results = BarcodeReader.Read(imagePath)
Return results.Select(Function(r) r.Value).ToArray()
$vbLabelText   $csharpLabel

Pour plus de détails sur les options de lecture, le réglage de la vitesse par rapport à la précision et la gestion des images difficiles, le guide de lecture des codes-barres à partir d'images couvre l'intégralité de l'API.

Génération de Codes-barres

Approche LEADTOOLS

La génération de codes-barres LEADTOOLS nécessite la création d'un objet BarcodeData avec symbologie, valeur et limites - puis la création d'un RasterImage vierge avec des dimensions de pixels explicites, une profondeur de bits, un ordre d'octets et une perspective de vue - puis le remplissage avec un fond blanc en utilisant FillCommand - puis l'appel de engine.Writer.WriteBarcode() - puis l'enregistrement avec RasterCodecs@. Cela représente cinq opérations distinctes sur plusieurs types d'objets :

// LEADTOOLS: 5 operations, 25 ans et plus lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
// LEADTOOLS: 5 operations, 25 ans et plus lines
using Leadtools;
using Leadtools.Barcode;
using Leadtools.Codecs;

var engine = new BarcodeEngine();

var barcodeData = new BarcodeData(BarcodeSymbology.Code128)
{
    Value = data,
    Bounds = new LeadRect(0, 0, 400, 100)
};

using var image = new RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    null, IntPtr.Zero, 0);

new FillCommand(RasterColor.White).Run(image);
engine.Writer.WriteBarcode(image, barcodeData, null);

using var codecs = new RasterCodecs();
codecs.Save(image, outputPath, RasterImageFormat.Png, 0);
Imports Leadtools
Imports Leadtools.Barcode
Imports Leadtools.Codecs

Dim engine As New BarcodeEngine()

Dim barcodeData As New BarcodeData(BarcodeSymbology.Code128) With {
    .Value = data,
    .Bounds = New LeadRect(0, 0, 400, 100)
}

Using image As New RasterImage(
    RasterMemoryFlags.Conventional,
    400, 100, 24,
    RasterByteOrder.Bgr,
    RasterViewPerspective.TopLeft,
    Nothing, IntPtr.Zero, 0)

    Dim fillCommand As New FillCommand(RasterColor.White)
    fillCommand.Run(image)
    engine.Writer.WriteBarcode(image, barcodeData, Nothing)

    Using codecs As New RasterCodecs()
        codecs.Save(image, outputPath, RasterImageFormat.Png, 0)
    End Using
End Using
$vbLabelText   $csharpLabel

Approche IronBarcode

IronBarcode gère en interne la création d'images, le remplissage de l'arrière-plan et l'encodage :

// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
// IronBarcode: one method chain
BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng(outputPath);
Imports IronBarcode

BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng(outputPath)
$vbLabelText   $csharpLabel

Pour la création d'images de codes-barres , l'API Code-barres IronBarcode expose le style, les marges, la rotation et la conversion de format via une chaîne fluide plutôt qu'une série d'objets de configuration impératifs.

Référence de mappage d'API

LEADTOOLS Code-barres Code-barres IronBarcode Notes
RasterSupport.SetLicense(path, key) IronBarCode.License.LicenseKey = "key" Clé uniquement — aucun fichier
RasterSupport.KernelExpired (removed) Aucune vérification de date d'expiration nécessaire
RasterSupport.IsLocked(RasterSupportType.Barcode1DRead) (removed) Toutes les fonctionnalités sont incluses
RasterSupport.IsLocked(RasterSupportType.Barcode2DRead) (removed) Toutes les fonctionnalités sont incluses
RasterSupport.IsLocked(RasterSupportType.BarcodeWrite) (removed) Toutes les fonctionnalités sont incluses
new BarcodeEngine() Statique — aucune instance BarcodeReader, BarcodeWriter sont statiques
new RasterCodecs() (removed) Transmettez directement le chemin du fichier
codecs.Load(imagePath) (removed) Transmettez directement le chemin du fichier
engine.Reader.ReadBarcodes(image, rect, 0, symbologies) BarcodeReader.Read(imagePath) Détection automatique des symbologies
BarcodeData.Value result.Value Même nom de propriété
BarcodeData.Symbology result.Format Propriété renommée
new BarcodeData(BarcodeSymbology.Code128) BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) Création fluide
BarcodeSymbology.Code128 BarcodeEncoding.Code128 modification de l'espace de noms
BarcodeSymbology.QR BarcodeEncoding.QRCode changement de nom
BarcodeSymbology.DataMatrix BarcodeEncoding.DataMatrix Même nom
BarcodeSymbology.PDF417 BarcodeEncoding.PDF417 Même nom
BarcodeSymbology.EAN13 BarcodeEncoding.EAN13 Même nom
BarcodeSymbology.UPCA BarcodeEncoding.UPCA Même nom
engine.Writer.WriteBarcode(image, data, null) + codecs.Save(...) .SaveAsPng(path) Une chaîne de méthodes
new RasterImage(...) + new FillCommand(RasterColor.White).Run(image) (removed) Interne à Code-barres IronBarcode

Lorsque les équipes envisagent de passer de LEADTOOLS Code-barres à IronBarcode

Déploiement de conteneurs et de cloud

Les équipes qui migrent leurs charges de travail vers des environnements Docker, Kubernetes ou sans serveur rencontrent le modèle de licence basé sur les fichiers comme un problème opérationnel concret. Chaque nouvelle instance de conteneur, chaque nouvelle région cloud et chaque nouvel environnement doit avoir le fichier .LIC provisionné et accessible avant que l'application ne démarre. Les systèmes de gestion des secrets conçus pour les secrets de type chaîne de caractères ne prennent pas correctement en charge les artefacts basés sur des fichiers. Les équipes qui ont standardisé l'injection de variables d'environnement pour la configuration constatent que LEADTOOLS nécessite une étape de provisionnement distincte qui existe en dehors de leur flux de travail habituel de gestion des secrets. Lorsque le volume des déploiements augmente (mise à l'échelle automatique, déploiement bleu-vert, réplication multirégionale), le coût opérationnel de l'approvisionnement en fichiers évolue en conséquence.

Gestion de l'empreinte et des dépendances du SDK

Lorsque la lecture ou la génération de codes-barres est l'exigence principale ou unique d'un service, l'installation des cinq packages LEADTOOLS et la dépendance à l'environnement d'exécution MSVC++ 2017 représentent une surcharge qui affecte la taille de l'image du conteneur, la latence de démarrage à froid dans les fonctions sans serveur et les temps de compilation dans les pipelines CI/CD. Les équipes qui développent des microservices légers ou des fonctions de type Lambda constatent que l'intégration d'un SDK d'imagerie complet pour répondre à un besoin spécifique en matière de codes-barres crée une surface de dépendance difficile à justifier lors des revues de code et des revues architecturales. Lorsqu'une future mise à niveau de la plateforme nécessitera de tester une modification de dépendance d'exécution native, ce travail incombera à l'équipe assurant la maintenance du service.

Transparence des prix

Les équipes de développement qui doivent établir le budget d'un projet avant de commencer le développement ne peuvent pas obtenir une image complète des coûts à partir des prix publiés par LEADTOOLS. Les licences de développement sont proposées à un prix de 1 295 $ à 1 469 $ par développeur et par an, mais les licences de déploiement en production pour les applications serveur font l'objet d'un devis séparé auprès du service commercial. Une équipe de cinq développeurs déployant leurs solutions sur trois serveurs de production doit obtenir un devis personnalisé avant de pouvoir confirmer que LEADTOOLS correspond à son budget. Les équipes qui préfèrent prendre leurs décisions d'achat en se basant sur les prix publiés — en comparant les options, en obtenant une approbation interne ou en planifiant des budgets pluriannuels — constatent que ce modèle nécessite une discussion commerciale avant que l'évaluation ne soit terminée.

Exigences relatives aux codes-barres uniquement

Les applications qui ont besoin de lire ou de générer des codes-barres sans nécessiter de reconnaissance optique de caractères (OCR), d'imagerie DICOM, d'annotation de documents ou d'autres fonctionnalités de la Suite LEADTOOLS paient pour une plateforme plus large que ce que leurs besoins exigent. La valeur d'intégration de LEADTOOLS — la possibilité de transférer des données entre ses modules OCR, de codes-barres et de traitement de documents — est réelle, mais elle ne s'applique que lorsque plusieurs fonctionnalités de cette Suite sont utilisées activement. Lorsque le besoin se limite à la lecture de codes-barres dans une API Web ou à leur génération dans un pipeline de traitement de documents, une bibliothèque de codes-barres ciblée répond directement à ce besoin sans nécessiter une plateforme d'imagerie complète.

Considérations courantes en matière de migration

Remplacement de l'initialisation de la licence

L'intégralité du bloc d'initialisation de LEADTOOLS (chemin du fichier, vérification de l'expiration et vérification du verrouillage par fonctionnalité) est remplacée par une seule ligne. La clé de licence Code-barres IronBarcode peut être stockée dans n'importe quel système de gestion de secrets prenant en charge les chaînes de caractères.

// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
// Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE");
' Replace the entire LEADTOOLS initialization block with:
IronBarCode.License.LicenseKey = Environment.GetEnvironmentVariable("IRONBARCODE_LICENSE")
$vbLabelText   $csharpLabel

Modèle de variable d'environnement Docker

La ligne COPY LEADTOOLS.LIC dans un fichier Docker est entièrement supprimée. La licence est fournie via une variable d'environnement lors de l'exécution, qui fonctionne avec tous les mécanismes d'injection de secrets standard :

# Remove: COPY LEADTOOLS.LIC /app/license/LEADTOOLS.LIC
# Remove: ENV LEADTOOLS_LICENSE_PATH=/app/license/LEADTOOLS.LIC
# Add:
ENV IRONBARCODE_LICENSE=your-license-key

Retrait de colis

Les cinq modules LEADTOOLS — et le codec PDF optionnel — sont supprimés et remplacés par un seul module :

dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
dotnet remove package Leadtools.Barcode
dotnet remove package Leadtools
dotnet remove package Leadtools.Codecs
dotnet remove package Leadtools.Codecs.Png
dotnet remove package Leadtools.Codecs.Jpeg
# If added:
dotnet remove package Leadtools.Codecs.Pdf

dotnet add package IronBarcode
SHELL

Fonctionnalités supplémentaires IronBarcode

Outre les fonctionnalités décrites dans les sections précédentes, Code-barres IronBarcode offre les caractéristiques suivantes, pertinentes pour les scénarios courants de codes-barres .NET :

  • PDF Barcode Extraction:Lisez les codes-barres à partir de documents PDF multipages avec itération automatique des pages et PageNumber rapport sur chaque résultat - aucune boucle de page n'est nécessaire.
  • Correction d'erreurs basée sur l'apprentissage automatique : le prétraitement d'images par apprentissage automatique améliore la précision de lecture des images de codes-barres endommagées, à faible contraste ou pivotées sans configuration supplémentaire.
  • Traitement par lots asynchrone: BarcodeReader.ReadAsync() prend en charge la lecture asynchrone, ce qui permet un traitement par lots à haut débit sans blocage des threads.
  • Marquage du logo du code QR: QRCodeWriter prend en charge l'intégration d'une image de logo au centre d'un code QR avec un seul appel de méthode, en utilisant la correction d'erreur intégrée pour maintenir la scannabilité.
  • Sortie SVG et HTML: BarcodeWriter peut sortir les codes-barres générés sous forme de fichiers SVG évolutifs ou d'éléments HTML en ligne, en plus des formats d'images matricielles.
  • Réglage des options de lecture de codes-barres : la vitesse de lecture, les indications de symbologie attendues, la détection de plusieurs codes-barres et le prétraitement de l'image sont configurables pour chaque lecture sans affecter l'état global.

Compatibilité .NET et préparation à l'avenir

IronBarcode cible .NET Standard 2.0, assurant la compatibilité avec .NET Framework 4.6.2 et versions ultérieures, .NET 5, .NET 6, .NET 7, .NET 8 et .NET 9. La bibliothèque ne nécessite aucun environnement d'exécution natif spécifique à la plateforme, permettant un déploiement sur Windows, Linux et macOS sans étapes de configuration supplémentaires. À mesure que l'adoption de .NET 10 progresse jusqu'en 2026, le rythme de publication régulier d'IronBarcode garantit la compatibilité avec les versions actuelles et futures de .NET . La conception statique de l'API et le modèle de distribution à package unique restent stables d'une version à l'autre, de sorte que les mises à niveau de version ne nécessitent aucune modification du code d'initialisation de l'application ni de la configuration de déploiement.

Conclusion

LEADTOOLS Barcode et Code-barres IronBarcode représentent différents points de convergence dans l'espace de conception des bibliothèques de codes-barres .NET . LEADTOOLS est un module d'un kit de développement logiciel (SDK) d'imagerie complet vieux de 30 ans, doté d'une architecture de licence basée sur des fichiers, d'une installation multi-packages et d'une conception d'API héritée qui reflète les normes d'ingénierie de l'époque où il a été construit. Code-barres IronBarcode est une bibliothèque de codes-barres spécialement conçue pour les .NET modernes, avec une installation en un seul package, une licence par clé de chaîne et une API statique qui ne nécessite aucun objet d'initialisation.

LEADTOOLS Barcode est le choix approprié lorsqu'une application utilise déjà LEADTOOLS pour d'autres fonctionnalités : OCR, imagerie DICOM, annotation de documents ou reconnaissance de formulaires. Dans ces contextes, l'ajout de la fonctionnalité de lecture de codes-barres via le même SDK permet de valoriser un investissement existant sans avoir recours à un nouveau fournisseur ni à un nouveau contrat de licence. Les Enterprise disposant déjà d'un contrat LEADTOOLS peuvent bénéficier de fonctionnalités de lecture de codes-barres à un coût marginal faible. Pour les applications qui nécessitent pleinement l'étendue de la plateforme d'imagerie LEADTOOLS, l'intégration entre les modules offre une réelle valeur ajoutée.

IronBarcode est le choix approprié lorsque la lecture ou la génération de codes-barres est l'exigence principale ou unique d'un service, lorsque l'application est déployée sur des conteneurs ou une infrastructure native du cloud, ou lorsque l'équipe a besoin d'une tarification prévisible avant de commencer le développement. L'installation en package unique et le modèle de licence par variable d'environnement correspondent à la manière dont les services .NET modernes sont configurés, déployés et mis à l'échelle. L'API statique fluide réduit le code d'initialisation et de fonctionnement requis par la fonctionnalité de code-barres.

La différence pratique entre les deux bibliothèques apparaît le plus clairement dans les scénarios de déploiement. Lorsqu'une équipe ajoute un nouvel environnement, passe à une nouvelle région cloud ou renouvelle une licence, Code-barres IronBarcode exige la mise à jour d'une chaîne de caractères dans un gestionnaire de secrets. LEADTOOLS nécessite la configuration d'un fichier. Cette précision ne constitue pas une critique de l'ingénierie de LEADTOOLS ; elle décrit simplement les exigences de chaque architecture. Les équipes qui procèdent à une évaluation honnête devraient appliquer directement cette description à leur modèle de déploiement et décider lequel convient le mieux.

Questions Fréquemment Posées

Qu'est-ce que LEADTOOLS BarCode ?

LEADTOOLS BarCode est une bibliothèque de codes-barres .NET permettant de générer et de lire des codes-barres dans des applications C#. C'est l'une des nombreuses alternatives que les développeurs évaluent lorsqu'ils choisissent une solution de code-barres pour les projets .NET.

Quelles sont les principales différences entre LEADTOOLS Barcode et IronBarcode ?

IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, alors que LEADTOOLS Barcode nécessite généralement la création et la configuration d'une instance avant utilisation. IronBarcode offre également une prise en charge native du format PDF, une détection automatique du format et une licence à clé unique pour tous les environnements.

IronBarcode est-il plus facile à licencier que LEADTOOLS Barcode ?

IronBarcode utilise une clé de licence unique couvrant à la fois les déploiements de développement et de production. Cela simplifie les pipelines CI/CD et les configurations Docker par rapport aux systèmes de licence qui séparent les clés SDK des clés d'exécution.

IronBarcode prend-il en charge tous les formats de codes-barres que LEADTOOLS Barcode prend en charge ?

IronBarcode prend en charge plus de 30 symbologies de codes-barres, notamment QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1, et bien d'autres encore. L'auto-détection du format signifie qu'aucune énumération explicite du format n'est nécessaire.

IronBarcode prend-il en charge la lecture de codes-barres PDF en mode natif ?

Oui. IronBarcode lit les codes-barres directement à partir de fichiers PDF en utilisant BarcodeReader.Read("document.pdf") sans nécessiter de bibliothèque de rendu PDF séparée. Les résultats par page comprennent le numéro de page, le format du code-barres, la valeur et le score de confiance.

Comment IronBarcode gère-t-il le traitement par lots par rapport à LEADTOOLS Barcode ?

Les méthodes statiques d'IronBarcode sont sans état et naturellement à l'abri des threads, ce qui permet d'utiliser directement Parallel.ForEach sans gestion d'instance par thread. Il n'y a pas de plafond de débit, quel que soit le niveau de prix.

Quelles versions de .NET sont prises en charge par IronBarcode ?

IronBarcode prend en charge .NET Framework 4.6.2+, .NET Core 3.1 et .NET 5, 6, 7, 8 et 9 dans un seul package NuGet. Les plates-formes visées sont Windows x64/x86, Linux x64 et macOS x64/ARM.

Comment installer IronBarcode for .NET dans un projet .NET ?

Installez IronBarcode via NuGet : exécutez "Install-Package IronBarCode" dans la console du gestionnaire de paquets, ou "dotnet add package IronBarCode" dans le CLI. Aucun installateur SDK ou fichier d'exécution supplémentaire n'est nécessaire.

Puis-je évaluer IronBarcode avant de l'acheter, contrairement à LEADTOOLS ?

Oui. Le mode d'essai d'IronBarcode renvoie des valeurs de code-barres décodées complètes - seules les images de sortie générées reçoivent un filigrane. Vous pouvez comparer la précision de lecture sur vos propres documents avant de vous engager dans un achat.

Quelle est la différence de prix entre LEADTOOLS BarCode et IronBarcode ?

IronBarcode est proposé à partir de 749 dollars pour une licence perpétuelle pour un seul développeur couvrant le développement et la production. Les détails des prix et les options de volume sont disponibles sur la page de licence d'IronBarcode. Il n'est pas nécessaire de disposer d'une licence d'exécution distincte.

Est-il simple de migrer de LEADTOOLS Barcode vers IronBarcode ?

La migration de LEADTOOLS Barcode vers IronBarcode implique principalement le remplacement des appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, la suppression du boilerplate de licence et la mise à jour des noms des propriétés des résultats. La plupart des migrations impliquent une réduction du code plutôt qu'un ajout.

IronBarcode génère-t-il des codes QR avec des logos ?

Oui. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incorpore une image de marque dans un code QR de manière native avec une correction d'erreur configurable. Les codes QR colorés sont également pris en charge via ChangeBarCodeColor().

Jordi Bardia
Ingénieur logiciel
Jordi est le plus compétent en Python, C# et C++, et lorsqu'il ne met pas à profit ses compétences chez Iron Software, il programme des jeux. Partageant les responsabilités des tests de produit, du développement de produit et de la recherche, Jordi apporte une immense valeur à l'amé...
Lire la suite

Équipe de soutien Iron

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