Passer au contenu du pied de page
VIDéOS

Comment sortir les formats de données de codes-barres en C# | IronBarcode

Passer de Neodynamic Barcode à IronBarcode

Ce guide fournit un chemin de migration complet de Neodynamic.SDK.Barcode et Neodynamic.SDK.BarcodeReader vers IronBarcode. Il couvre la suppression des deux packages Neodynamic, le remplacement de la configuration à double licence par une clé unique, la traduction des appels API de génération et de lecture, et le processus d'acquisition de la capacité de lecture des codes-barres 2D qui n'était pas possible avec la suite de produits Neodynamic. Ce guide est destiné aux développeurs qui possèdent déjà du code Neodynamic et qui ont besoin d'une approche systématique, fichier par fichier, pour mener à bien la migration.

Pourquoi migrer depuis les codes-barres néodynamiques

2D Reading Gap : le kit de développement logiciel Code-barres néodynamique Professional génère des codes-barres QR Code, DataMatrix, PDF417 et Aztec. Aucun de ces formats ne peut être lu par le kit de développement logiciel (SDK) de lecture de codes-barres associé. Un projet qui génère des codes QR pour les étiquettes de produits, les conteneurs d'expédition ou le suivi de documents ne peut pas relire ces mêmes codes à l'aide du lecteur qu'il a acheté en même temps que le générateur. Code-barres IronBarcode lit et génère les codes QR, DataMatrix, PDF417, Aztec et tous les autres formats 2D pris en charge grâce à la même bibliothèque et à la même licence.

Surcharge en Double Produit : Chaque projet utilisant les SDKs Neodynamic comporte deux entrées PackageReference, deux directives using, deux blocs de licence, et deux cycles de mise à jour distincts. Ces frais généraux se répètent sur chaque machine de développeur, chaque pipeline d'intégration continue et chaque environnement de production. Le résultat mécanique de cette migration est la consolidation de deux progiciels ayant des exigences de maintenance distinctes en une seule dépendance avec une seule licence.

Le problème de la troisième bibliothèque : les équipes qui ont rencontré le manque de lecture 2D et qui ont choisi de le contourner plutôt que de migrer ont généralement ajouté une troisième bibliothèque — ZXing .NET étant le choix le plus courant — spécifiquement pour couvrir la lecture des codes QR. Cette décision troque une limitation contre une complexité différente : trois dépendances liées aux codes-barres, chacune avec ses propres contraintes de version, ses propres notes de version et son propre potentiel de conflit lors de la mise à jour du runtime .NET ou du framework dépendant. Code-barres IronBarcode remplace les trois.

Complexité des prix : Le SDK Code-barres néodynamique Professional est tarifé par développeur (Basic à partir d'environ 352 $, Ultimate à partir d'environ 705 $ via ComponentSource). Le SDK de lecteur de code-barres a un coût distinct. Un projet qui a besoin à la fois de génération et de lecture 1D doit acheter les deux, et le coût combiné évolue avec la taille de l'équipe en plus du tarif du lecteur. Un projet qui a besoin d'une lecture 2D ne peut toujours pas satisfaire cette exigence à n'importe quel prix dans la gamme de produits de Neodynamic. Code-barres IronBarcode Lite couvre la génération et la lecture — 1D et 2D — sous une seule licence. Les prix actuels sont sur la page de licence IronBarcode.

Le problème fondamental

Le problème fondamental de toute base de code utilisant les deux SDK Neodynamic pour un flux de travail complet de codes-barres est que la lecture des codes QR n'a jamais été possible :

// Before: Lecteur de codes-barres néodynamique does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
// Before: Lecteur de codes-barres néodynamique does not support QR codes
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string ReadQrCode(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);

    // Results are always null or empty for 2D barcodes
    if (results == null || !results.Any())
    {
        throw new NotSupportedException(
            "Neodynamic Barcode Reader does not support QR codes");
    }

    return results.First().Value;
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function ReadQrCode(imagePath As String) As String
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)

        ' Results are always null or empty for 2D barcodes
        If results Is Nothing OrElse Not results.Any() Then
            Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
        End If

        Return results.First().Value
    End Using
End Function
$vbLabelText   $csharpLabel

Après la migration vers IronBarcode, la même opération devient un appel de lecture standard sans traitement spécifique au format :

// After: Code-barres IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
// After: Code-barres IronBarcode reads QR codes with the same call used for all formats
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Chaque espace réservé throw new NotSupportedException(...) dans une base de code qui référence la lecture de codes-barres 2D est supprimé lors de cette migration et remplacé par un appel de lecture fonctionnel.

Comparaison des fonctionnalités des codes-barres Code-barres IronBarcode et Neodynamic Barcode

Fonction Code-barres néodynamique Professional Lecteur de codes-barres néodynamique Code-barres IronBarcode
Code 128, EAN-13, UPC-A génération Oui N/A Oui
Génération de codes QR, DataMatrix et PDF417 Oui N/A Oui
Lecture de codes-barres 1D N/A Oui Oui
Lecture de code QR N/A Non Oui
Lecture DataMatrix N/A Non Oui
Lecture PDF417 N/A Non Oui
Lecture native des codes-barres PDF Non Non Oui
Détection automatique du format N/A Non Oui
Packages NuGet requis 1 1 1 (couvre les deux)
Clés de licence requises 1 1 (séparé) 1 (couvre tout)
Dépendance de dessin du système Oui Oui Non
Prise en charge de Linux/Docker Limité Limité Oui
Prise en charge de .NET 8 et .NET 9 Oui Limité Oui
lecture par lots asynchrone Non Non Oui

Démarrage rapide : Migration des codes-barres Neodynamic vers IronBarcode

Étape 1 : Supprimer les deux packages néodynamiques

Les deux paquets doivent être retirés. Ils n'ont aucune dépendance commune qui affecte l'ordre de suppression :

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Vérifiez que les deux entrées ont disparu du fichier .csproj avant de continuer.

Étape 2 : Ajouter un IronBarcode

dotnet add package IronBarcode
dotnet add package IronBarcode
SHELL

Étape 3 : Remplacer la configuration de la double licence

Supprimez les deux blocs de licences Neodynamic et remplacez-les par une seule attribution de clé Code-barres IronBarcode . Cette affectation se fait une fois au démarrage de l'application — dans Program.cs, Startup.cs, ou la racine de composition de l'application :

// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
// Before: two license blocks, two products
using Neodynamic.SDK.Barcode;
using Neodynamic.SDK.BarcodeReader;

BarcodeProfessional.LicenseOwner = "Your Company";
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY";

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company";
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY";
Imports Neodynamic.SDK.Barcode
Imports Neodynamic.SDK.BarcodeReader

BarcodeProfessional.LicenseOwner = "Your Company"
BarcodeProfessional.LicenseKey = "GEN-LICENSE-KEY"

Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner = "Your Company"
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey = "READ-LICENSE-KEY"
$vbLabelText   $csharpLabel
// After: one key covers generation and reading across all formats
using IronBarCode;

IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// After: one key covers generation and reading across all formats
using IronBarCode;

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

' After: one key covers generation and reading across all formats
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Tous les fichiers de configuration, variables d'environnement ou systèmes de stockage de secrets contenant des clés de licence Neodynamic peuvent être désactivés une fois la migration vérifiée.

Exemples de migration de code

Générer un code-barres Code 128

Approche néodynamique :

using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;
using System.Drawing.Imaging;

public void GenerateCode128(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.Code128;
    barcode.BarcodeUnit = BarcodeUnit.Pixel;

    System.Drawing.Image image = barcode.GetBarcodeImage();
    image.Save(outputPath, ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateCode128(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.Code128
    barcode.BarcodeUnit = BarcodeUnit.Pixel

    Dim image As System.Drawing.Image = barcode.GetBarcodeImage()
    image.Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
using IronBarCode;

public void GenerateCode128(string data, string outputPath)
{
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128)
        .SaveAsPng(outputPath);
}
Imports IronBarCode

Public Sub GenerateCode128(data As String, outputPath As String)
    BarcodeWriter.CreateBarcode(data, BarcodeEncoding.Code128) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

L'importation System.Drawing.Imaging n'est plus nécessaire. L'instance BarcodeInfo et ses affectations de propriétés se résument à un seul appel de méthode. Pour connaître les options de dimensionnement, d'annotation et de format de sortie, consultez le guide de création de codes-barres 1D .

Générer un code QR

Approche néodynamique :

using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
using Neodynamic.SDK.Barcode;

public void GenerateQrCode(string data, string outputPath)
{
    var barcode = new BarcodeProfessional();
    barcode.Code = data;
    barcode.Symbology = Symbology.QRCode;
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H;

    barcode.GetBarcodeImage().Save(outputPath, System.Drawing.Imaging.ImageFormat.Png);
}
Imports Neodynamic.SDK.Barcode
Imports System.Drawing.Imaging

Public Sub GenerateQrCode(data As String, outputPath As String)
    Dim barcode As New BarcodeProfessional()
    barcode.Code = data
    barcode.Symbology = Symbology.QRCode
    barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H

    barcode.GetBarcodeImage().Save(outputPath, ImageFormat.Png)
End Sub
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

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

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

Public Sub GenerateQrCode(data As String, outputPath As String)
    QRCodeWriter.CreateQrCode(data, 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
        .SaveAsPng(outputPath)
End Sub
$vbLabelText   $csharpLabel

La traduction de génération ne modifie que l'interface de l'API. La principale différence introduite par cette migration est que la même application peut désormais lire les codes QR qu'elle génère, grâce à la même bibliothèque Code-barres IronBarcode et à la même licence. Pour un traitement complet de la création de codes-barres 2D, consultez le guide de création de codes-barres 2D .

Lecture des codes-barres 1D

Approche néodynamique :

using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
using Neodynamic.SDK.BarcodeReader;
using System.Drawing;

public string[] Read1DBarcodes(string imagePath)
{
    using var bitmap = new Bitmap(imagePath);
    var reader = new BarcodeReader();
    var results = reader.Read(bitmap);
    return results?.Select(r => r.Value).ToArray() ?? Array.Empty<string>();
}
Imports Neodynamic.SDK.BarcodeReader
Imports System.Drawing

Public Function Read1DBarcodes(imagePath As String) As String()
    Using bitmap As New Bitmap(imagePath)
        Dim reader As New BarcodeReader()
        Dim results = reader.Read(bitmap)
        Return If(results?.Select(Function(r) r.Value).ToArray(), Array.Empty(Of String)())
    End Using
End Function
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
using IronBarCode;

public string[] Read1DBarcodes(string imagePath)
{
    var results = BarcodeReader.Read(imagePath);
    return results.Select(r => r.Value).ToArray();
}
Imports IronBarCode

Public Function Read1DBarcodes(imagePath As String) As String()
    Dim results = BarcodeReader.Read(imagePath)
    Return results.Select(Function(r) r.Value).ToArray()
End Function
$vbLabelText   $csharpLabel

La construction Bitmap et l'importation System.Drawing sont supprimées. Code-barres IronBarcode accepte directement le chemin du fichier. Le nom de propriété result.Value est le même dans les deux API, donc le code en aval qui traite les valeurs retournées ne change pas. Pour les options de lecture et de prétraitement d'images de codes-barres multiples, consultez le guide de lecture des codes-barres à partir d'images .

Lecture des codes QR (auparavant impossible)

Approche néodynamique :

// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
// This method could not be implemented with Neodynamic Barcode Reader
public string ReadQrCode(string imagePath)
{
    throw new NotSupportedException(
        "Neodynamic Barcode Reader does not support QR codes");
}
' This method could not be implemented with Neodynamic Barcode Reader
Public Function ReadQrCode(imagePath As String) As String
    Throw New NotSupportedException("Neodynamic Barcode Reader does not support QR codes")
End Function
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
using IronBarCode;

public string ReadQrCode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value;
}
Imports IronBarCode

Public Function ReadQrCode(imagePath As String) As String
    Dim result = BarcodeReader.Read(imagePath).FirstOrDefault()
    Return If(result?.Value, Nothing)
End Function
$vbLabelText   $csharpLabel

Chaque espace réservé throw new NotSupportedException(...) qui référence la lecture de codes-barres 2D devient un appel de lecture standard. Le corps de la méthode passe d'une exception levée à une implémentation fonctionnelle. Aucune manipulation particulière n'est requise pour les codes QR ; Code-barres IronBarcode identifie automatiquement le format.

Lecture des codes-barres dans les documents PDF (Nouvelle fonctionnalité)

Approche néodynamique :

// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// Non direct equivalent exists
// Neodynamic Reader cannot read barcodes from PDF files directly
// An image extraction step using a separate library was required before reading
// Non direct equivalent exists
' Neodynamic Reader cannot read barcodes from PDF files directly
' An image extraction step using a separate library was required before reading
' Non direct equivalent exists
$vbLabelText   $csharpLabel

Approche IronBarcode :

using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
using IronBarCode;

public void ReadBarcodesFromPdf(string pdfPath)
{
    var results = BarcodeReader.Read(pdfPath);

    foreach (var result in results)
    {
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}");
    }
}
Imports IronBarCode

Public Sub ReadBarcodesFromPdf(pdfPath As String)
    Dim results = BarcodeReader.Read(pdfPath)

    For Each result In results
        Console.WriteLine($"Value: {result.Value} | Format: {result.Format} | Page: {result.PageNumber}")
    Next
End Sub
$vbLabelText   $csharpLabel

IronBarcode lit les codes-barres directement sur les documents PDF, sur toutes les pages. Le numéro de page sur lequel chaque code-barres a été trouvé est indiqué dans le résultat. Cette fonctionnalité ne nécessite aucune bibliothèque supplémentaire ni étape intermédiaire d'extraction d'image.

Référence de correspondance entre l'API Neodynamic Barcode et IronBarcode

API néodynamique Équivalent Code-barres IronBarcode Notes
BarcodeInfo.LicenseOwner = "..." IronBarCode.License.LicenseKey = "key" Fusionné en une seule clé
BarcodeInfo.LicenseKey = "..." (part of single key above) Aucun champ propriétaire séparé
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseOwner (removed) Non requis
Neodynamic.SDK.BarcodeReader.BarcodeReader.LicenseKey (removed) Non requis
new BarcodeInfo() BarcodeWriter.CreateBarcode(data, encoding) Statique, aucune instance
barcode.Value = data Premier paramètre de CreateBarcode Adopté lors de la construction
barcode.Symbology = Symbology.Code128 BarcodeEncoding.Code128 Deuxième paramètre
barcode.Symbology = Symbology.QRCode BarcodeEncoding.QRCode L'aller-retour complet est désormais pris en charge.
barcode.QRCodeECL = QRCodeErrorCorrectionLevel.H QRCodeWriter.QrErrorCorrectionLevel.Highest Point d'entrée de classe différent
barcode.GetImage().Save(path, ImageFormat.Png) .SaveAsPng(path) Fluent, sans énumération ImageFormat
BarcodeReader.Read(bitmap) BarcodeReader.Read(imagePath) Le chemin du fichier remplace l'image bitmap.
result.Value result.Value Même nom de propriété
Symbology.DataMatrix BarcodeEncoding.DataMatrix Génération seulement → génération et lecture
throw new NotSupportedException(...) pour la lecture 2D BarcodeReader.Read(imagePath) Remplacer par une implémentation fonctionnelle

Problèmes de migration courants et solutions

Problème 1 : Commande de retrait de deux colis

Problème : Le fait pour les développeurs de supprimer un seul package Neodynamic tout en laissant l'autre provoque des erreurs de compilation car les deux SDK ne partagent aucun type, mais certains fichiers sources peuvent importer les deux espaces de noms dans le même fichier.

Solution : Supprimez les deux packages avant d'apporter des modifications au code source. Après les avoir tous deux supprimés, recherchez toutes les directives using Neodynamic.SDK.Barcode et using Neodynamic.SDK.BarcodeReader et éliminez-les ensemble :

dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
dotnet remove package Neodynamic.SDK.Barcode
dotnet remove package Neodynamic.SDK.BarcodeReader
SHELL

Ensuite, effectuez un audit avec :

grep -r "Neodynamic.SDK" --include="*.cs" .
grep -r "Neodynamic.SDK" --include="*.cs" .
SHELL

Problème 2 : Nettoyage de la configuration des licences doubles

Problème : Les deux blocs de licence Neodynamic apparaissent souvent dans des emplacements différents — un dans la classe de démarrage de l'application et un dans un initialiseur de service. Si un seul bloc est supprimé, le code restant fait référence à un espace de noms qui n'existe plus et ne peut pas être compilé.

Solution : Recherchez les quatre affectations de propriétés de licence Neodynamic et supprimez-les ensemble avant d'ajouter la clé IronBarcode :

grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
grep -r "LicenseOwner\|LicenseKey" --include="*.cs" .
SHELL

Remplacez les quatre lignes par une seule affectation :

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

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

Problème 3 : Suppression de NotSupportedException des blocs catch

Problème : Certaines bases de code qui utilisaient le Reader Neodynamic ont ajouté des blocs catch (NotSupportedException) spécifiquement pour gérer l'échec silencieux des lectures de codes-barres 2D. Ces blocs de réception doivent être supprimés en même temps que le code de lancement ; sinon, la clause catch réfère un chemin de code qui ne peut plus se produire.

Solution : Recherchez NotSupportedException dans les fichiers liés aux codes-barres et examinez chaque occurrence. Si l'exception a été levée en réponse à une tentative de lecture au format 2D, supprimez à la fois le bloc throw et le bloc catch :

grep -r "NotSupportedException" --include="*.cs" .
grep -r "NotSupportedException" --include="*.cs" .
SHELL

Remplacez le corps de méthode lancée par BarcodeReader.Read(imagePath) et supprimez le bloc catch correspondant chez tout appelant.

Liste de contrôle de migration des codes-barres néodynamiques

Pré-migration

  • Recherchez toutes les références de package Neodynamic : grep -r "Neodynamic.SDK" --include="*.csproj" .
  • Recherchez toutes les directives using Neodynamic : grep -r "using Neodynamic" --include="*.cs" .
  • Rechercher les emplacements de configuration des licences : grep -r &quot;LicenseOwner\|LicenseKey&quot; --include=&quot;*.cs&quot; .
  • Recherchez tous les sites d'instanciation BarcodeInfo : grep -r "new BarcodeInfo\(\)" --include="*.cs" .
  • Recherchez tous les appels de lecture Neodynamic : grep -r "BarcodeReader.Read" --include="*.cs" .
  • Recherchez toutes les utilisations NotSupportedException dans les chemins de codes-barres : grep -r "NotSupportedException" --include="*.cs" .
  • Identifiez toute bibliothèque tierce (ZXing .NET ou similaire) ajoutée spécifiquement pour pallier le manque de prise en charge de la lecture 2D ; celle-ci pourra être supprimée après la migration.
  • Enregistrez toutes les clés de licence Neodynamic afin qu'elles puissent être désactivées dans les systèmes de sécurité après vérification.

Tâches de mise à jour du code

  1. Exécutez dotnet remove package Neodynamic.SDK.Barcode
  2. Exécutez dotnet remove package Neodynamic.SDK.BarcodeReader
  3. Exécutez dotnet add package IronBarcode
  4. Supprimez toutes les directives using Neodynamic.SDK.Barcode et using Neodynamic.SDK.BarcodeReader
  5. Ajoutez using IronBarCode dans tous les fichiers effectuant des opérations sur les codes-barres
  6. Supprimez les deux blocs de configuration de licence Neodynamic
  7. Ajoutez IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY" une fois lors du démarrage de l'application
  8. Remplacez new BarcodeInfo() + les affectations de propriétés + barcode.GetImage().Save(...) par BarcodeWriter.CreateBarcode(data, encoding).SaveAsPng(path)
  9. Remplacez les motifs QRCodeWriter en conséquence en utilisant QRCodeWriter.CreateQrCode()
  10. Remplacez les appels BarcodeReader.Read(bitmap) en supprimant la construction new Bitmap(imagePath) et en passant le chemin du fichier directement à BarcodeReader.Read(imagePath)
  11. Retirez tous les espaces réservés throw new NotSupportedException(...) pour la lecture 2D et remplacez-les par BarcodeReader.Read(imagePath)
  12. Supprimez les blocs catch (NotSupportedException) correspondants chez les appelants
  13. Supprimez toute bibliothèque tierce ajoutée uniquement pour combler le manque de lecture Neodynamic 2D.

Test de post-migration

  • Vérifiez que la génération du code-barres Code 128 produit un résultat correspondant aux dimensions et aux paramètres DPI précédents.
  • Vérifier que la génération du code QR produit une sortie scannable
  • Vérifier que la lecture des codes-barres 1D renvoie les mêmes valeurs que l'implémentation précédente du lecteur néodynamique
  • Vérifiez que la lecture du QR Code réussit sur les images qui jetaient auparavant NotSupportedException
  • Vérifiez que la lecture des fichiers DataMatrix et PDF417 réussit si ces formats apparaissent dans les données d'entrée de l'application.
  • Tester la lecture des codes-barres PDF si l'application traite les documents PDF
  • Vérifiez que toutes les références à la clé de licence Neodynamic ont été supprimées des fichiers de configuration et des variables d'environnement.
  • Vérifiez que la bibliothèque 2D tierce (le cas échéant) a été entièrement supprimée et qu'aucune importation restante ne la référence.

Principaux avantages de la migration vers IronBarcode

Capacité de lecture-écriture unifiée : après la migration, chaque symbologie générée par Code-barres IronBarcode peut également être relue via la même bibliothèque. L'asymétrie entre le générateur et le lecteur de Neodynamic — où les codes QR, DataMatrix, PDF417 et Aztec pouvaient être produits mais pas utilisés — est éliminée. Les applications qui nécessitaient auparavant une solution de contournement ou une troisième bibliothèque pour la lecture 2D bénéficient désormais de cette fonctionnalité sans aucun travail d'intégration supplémentaire.

Administration de licence unique : un package NuGet , une clé de licence et un bloc de configuration remplacent deux abonnements produits distincts. Le renouvellement, la rotation des clés et la gestion des variables d'environnement deviennent deux fois moins complexes. La réduction des frais administratifs est continue et non un gain ponctuel.

Lecture native des codes-barres PDF : Code-barres IronBarcode lit directement les codes-barres des documents PDF et renvoie les métadonnées relatives au numéro de page ainsi que les valeurs des codes-barres. Les applications qui traitent les manifestes d'expédition, les documents de facturation ou les dossiers médicaux contenant des codes-barres intégrés ne nécessitent plus d'étape intermédiaire d'extraction d'image ni de bibliothèque PDF supplémentaire pour prendre en charge la lecture des codes-barres. Consultez la liste complète des formats de codes-barres pris en charge pour connaître l'ensemble des symbologies et des types de saisie couverts.

Élimination de la Dépendance de System.Drawing : Les SDKs Neodynamic dépendent de System.Drawing, ce qui nécessite une configuration de bibliothèque native supplémentaire sur Linux et dans les conteneurs Docker. Code-barres IronBarcode n'a pas de dépendance System.Drawing, ce qui signifie que la même base de code s'exécute sur Windows, Linux et dans les environnements cloud conteneurisés sans changements de configuration spécifiques à la plateforme.

Coût de licence simplifié pour une fonctionnalité complète : un projet qui nécessitait les deux SDK Neodynamic Plus qu'une troisième bibliothèque pour la lecture 2D payait pour trois dépendances afin d'accomplir ce Code-barres IronBarcode fournit sous une seule licence. Pour les projets nécessitant une génération et une lecture 2D, la migration permet de regrouper l'empreinte technique et le coût des licences en un seul produit commercial. Les informations tarifaires actuelles sont disponibles sur la page de licences IronBarcode .

Veuillez noterNeodynamic et ZXing.NET sont des marques déposées de leurs propriétaires respectifs. Ce site n'est ni affilié à, ni approuvé par, ni sponsorisé par Neodynamic 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 Neodynamic Barcode Professional 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 à l'API Neodynamic 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 Neodynamic Barcode Professional 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 garder les deux logiciels Neodynamic Barcode Professional 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 à Neodynamic Barcode Professional ?

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

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 Neodynamic Barcode Professional 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