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

Barkoder SDK vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#

Dynamsoft Barcode Reader excelle véritablement dans sa fonction première : la lecture des codes-barres à partir d'un flux vidéo en direct à 30 images par seconde. Les algorithmes sont rapides, la prise en charge des symboles est étendue et le SDK mobile qui l'encapsule sur iOS et Android est l'un des meilleurs choix dans ce domaine. Si votre produit est une application de numérisation d'entrepôt où un employé pointe son téléphone vers une étiquette de palette et s'attend à une reconnaissance en moins de 100 ms, Dynamsoft est une option crédible.

Si vos codes-barres sont dans des fichiers PDF sur un serveur qui ne peut pas atteindre internet, la bibliothèque n'est pas adaptée au cas d'utilisation — et l'activation de la licence vous le rappellera la première fois que vous déployez. LicenseManager.InitLicense effectue une poignée de main en ligne avec le serveur de licence de Dynamsoft lors de la première activation et revalide périodiquement. Dans un datacenter isolé, un VPC isolé ou tout environnement où l'accès à Internet sortant est restreint, cette première activation nécessite une alternative. La voie hors ligne — obtenir un blob de contenu de licence de Dynamsoft et le rejouer via InitLicenseFromLicenseContent — fonctionne, mais ajoute une surcharge opérationnelle que la plupart des flux de traitement de documents n'ont pas prévue.

Cette comparaison porte sur l'adéquation aux cas d'utilisation, et non sur la qualité de la bibliothèque. Dynamsoft a créé une bibliothèque axée sur la caméra et l'a bien conçue. La question est de savoir si les hypothèses privilégiant la caméra se traduisent par un flux de travail de traitement de documents côté serveur.

Comprendre le lecteur de codes-barres Dynamsoft

L'architecture de Dynamsoft reflète son origine dans le domaine des appareils photo. La séquence de démarrage nécessite une activation de licence en ligne, le modèle de paramètres inclut des valeurs de délai d'attente appropriées pour le traitement de trame en temps réel, et l'API expose des paramètres ajustés pour les conditions de mise au point variable et de flou de mouvement d'une caméra portative :

// Dynamsoft: license activation required at startup
using Dynamsoft.CVR;
using Dynamsoft.DBR;
using Dynamsoft.License;
using Dynamsoft.Core;

// LicenseManager.InitLicense performs an online activation on first run
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
    throw new InvalidOperationException($"License activation failed: {errorMsg}");

using var router = new CaptureVisionRouter();

// Settings tuned for camera frame processing
SimplifiedCaptureVisionSettings settings = router.GetSimplifiedSettings(
    PresetTemplate.PT_READ_BARCODES);
settings.BarcodeSettings.ExpectedBarcodesCount = 1; // single barcode per frame
settings.Timeout = 100;                              // 100ms suits a 30fps pipeline
router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings);
// Dynamsoft: license activation required at startup
using Dynamsoft.CVR;
using Dynamsoft.DBR;
using Dynamsoft.License;
using Dynamsoft.Core;

// LicenseManager.InitLicense performs an online activation on first run
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
    throw new InvalidOperationException($"License activation failed: {errorMsg}");

using var router = new CaptureVisionRouter();

// Settings tuned for camera frame processing
SimplifiedCaptureVisionSettings settings = router.GetSimplifiedSettings(
    PresetTemplate.PT_READ_BARCODES);
settings.BarcodeSettings.ExpectedBarcodesCount = 1; // single barcode per frame
settings.Timeout = 100;                              // 100ms suits a 30fps pipeline
router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings);
Imports Dynamsoft.CVR
Imports Dynamsoft.DBR
Imports Dynamsoft.License
Imports Dynamsoft.Core

' Dynamsoft: license activation required at startup

' LicenseManager.InitLicense performs an online activation on first run
Dim errorCode As Integer = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
    Throw New InvalidOperationException($"License activation failed: {errorMsg}")
End If

Using router As New CaptureVisionRouter()

    ' Settings tuned for camera frame processing
    Dim settings As SimplifiedCaptureVisionSettings = router.GetSimplifiedSettings(PresetTemplate.PT_READ_BARCODES)
    settings.BarcodeSettings.ExpectedBarcodesCount = 1 ' single barcode per frame
    settings.Timeout = 100                              ' 100ms suits a 30fps pipeline
    router.UpdateSettings(PresetTemplate.PT_READ_BARCODES, settings)
End Using
$vbLabelText   $csharpLabel

Il s'agit d'une API bien conçue pour son usage. Le paramètre Timeout = 100 est logique lorsque vous traitez 30 images par seconde d'une caméra et que vous ne pouvez pas vous permettre de passer 500 ms sur une seule image. Pour un serveur traitant un PDF téléchargé, un délai d'attente de 100 ms ne sert à rien et peut provoquer un échec de lecture sur des codes-barres plus denses.

Le design routeur-et-session — new CaptureVisionRouter(), router.Dispose() — suit les sémantiques de session de caméra : vous ouvrez un routeur, traitez des images, jetez. Pour le traitement des fichiers, ce cycle de vie ajoute du code répétitif sans avantage.

Le problème du PDF

Dynamsoft Barcode Reader peut accepter directement certains entrées PDF sur les versions Windows, mais pour les déploiements multiplateformes, de nombreuses équipes pré-rendent encore chaque page PDF en une image avant de la passer à CaptureVisionRouter.Capture. Cela implique généralement l'inclusion d'une bibliothèque de rendu PDF distincte — PdfiumViewer est couramment utilisé — ce qui ajoute une dépendance NuGet, une dépendance binaire native (pdfium.dll sous Windows ou libpdfium sous Linux), et une boucle de rendu autour de chaque opération PDF :

// Dynamsoft PDF processing — typical cross-platform pattern with PdfiumViewer
// dotnet add package PdfiumViewer
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.CVR;
using Dynamsoft.DBR;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var results = new List<string>();

    using (var pdfDoc = PdfDocument.Load(pdfPath))
    using (var router = new CaptureVisionRouter())
    {
        for (int page = 0; page < pdfDoc.PageCount; page++)
        {
            // Render each page at 300 DPI
            using var image = pdfDoc.Render(page, 300, 300, true);
            using var ms = new MemoryStream();
            image.Save(ms, ImageFormat.Png);
            byte[] imageBytes = ms.ToArray();

            // Now pass rendered image bytes to the Capture Vision Router
            CapturedResult result = router.Capture(imageBytes,
                PresetTemplate.PT_READ_BARCODES);
            foreach (var item in result.GetDecodedBarcodesResult().GetItems())
                results.Add(item.GetText());
        }
    }

    return results;
}
// Dynamsoft PDF processing — typical cross-platform pattern with PdfiumViewer
// dotnet add package PdfiumViewer
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.CVR;
using Dynamsoft.DBR;

public List<string> ReadBarcodesFromPdf(string pdfPath)
{
    var results = new List<string>();

    using (var pdfDoc = PdfDocument.Load(pdfPath))
    using (var router = new CaptureVisionRouter())
    {
        for (int page = 0; page < pdfDoc.PageCount; page++)
        {
            // Render each page at 300 DPI
            using var image = pdfDoc.Render(page, 300, 300, true);
            using var ms = new MemoryStream();
            image.Save(ms, ImageFormat.Png);
            byte[] imageBytes = ms.ToArray();

            // Now pass rendered image bytes to the Capture Vision Router
            CapturedResult result = router.Capture(imageBytes,
                PresetTemplate.PT_READ_BARCODES);
            foreach (var item in result.GetDecodedBarcodesResult().GetItems())
                results.Add(item.GetText());
        }
    }

    return results;
}
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports Dynamsoft.CVR
Imports Dynamsoft.DBR
Imports System.IO

Public Function ReadBarcodesFromPdf(pdfPath As String) As List(Of String)
    Dim results As New List(Of String)()

    Using pdfDoc = PdfDocument.Load(pdfPath)
        Using router = New CaptureVisionRouter()
            For page As Integer = 0 To pdfDoc.PageCount - 1
                ' Render each page at 300 DPI
                Using image = pdfDoc.Render(page, 300, 300, True)
                    Using ms As New MemoryStream()
                        image.Save(ms, ImageFormat.Png)
                        Dim imageBytes As Byte() = ms.ToArray()

                        ' Now pass rendered image bytes to the Capture Vision Router
                        Dim result As CapturedResult = router.Capture(imageBytes, PresetTemplate.PT_READ_BARCODES)
                        For Each item In result.GetDecodedBarcodesResult().GetItems()
                            results.Add(item.GetText())
                        Next
                    End Using
                End Using
            Next
        End Using
    End Using

    Return results
End Function
$vbLabelText   $csharpLabel

Cela représente trois dépendances (Dynamsoft, PdfiumViewer, et un binaire natif spécifique à la plateforme), une boucle de rendu par page, et une surcharge de mémoire qui évolue avec le nombre de pages.

IronBarcode lit directement à partir d'un fichier PDF :

// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package BarCode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package BarCode
var results = BarcodeReader.Read("invoice.pdf");
foreach (var result in results)
{
    Console.WriteLine($"{result.Format}: {result.Value}");
}
Imports IronBarCode

' IronBarcode: PDF is native — no extra library, no render loop
' NuGet: dotnet add package BarCode
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Un seul appel. Aucun lecteur PDF. Pas de boucle par page. Pas de binaire natif spécifique à la plateforme pour la prise en charge des fichiers PDF.

Complexité de la licence

L'activation de licence en ligne est simple lorsque le serveur a accès à Internet. Lorsque ce n'est pas le cas — ou lorsque les politiques réseau exigent l'autorisation explicite des hôtes sortants — la surface d'échec de la validation augmente :

// Dynamsoft: error code pattern required
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
{
    // Possible causes: network timeout, license server unreachable,
    // invalid key, expired key, activation quota exceeded, etc.
    throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
// Dynamsoft: error code pattern required
int errorCode = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
{
    // Possible causes: network timeout, license server unreachable,
    // invalid key, expired key, activation quota exceeded, etc.
    throw new InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}");
}
Imports System

' Dynamsoft: error code pattern required
Dim errorCode As Integer = LicenseManager.InitLicense("YOUR-DYNAMSOFT-LICENSE-KEY", errorMsg)
Dim errorMsg As String
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
    ' Possible causes: network timeout, license server unreachable,
    ' invalid key, expired key, activation quota exceeded, etc.
    Throw New InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}")
End If
$vbLabelText   $csharpLabel

La gestion des licences hors ligne avec Dynamsoft est un flux de travail distinct. Sur une machine connectée, vous effectuez une activation en ligne initiale pour récupérer un bundle de licence, le conserver, puis activez la machine hors ligne en rejouant ce bundle via InitLicenseFromLicenseContent :

// Dynamsoft offline license — replay a pre-fetched license bundle
int errorCode = LicenseManager.InitLicenseFromLicenseContent(
    licenseContent, out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
    throw new InvalidOperationException($"Offline activation failed: {errorMsg}");
// Dynamsoft offline license — replay a pre-fetched license bundle
int errorCode = LicenseManager.InitLicenseFromLicenseContent(
    licenseContent, out string errorMsg);
if (errorCode != (int)EnumErrorCode.EC_OK)
    throw new InvalidOperationException($"Offline activation failed: {errorMsg}");
Imports System

' Dynamsoft offline license — replay a pre-fetched license bundle
Dim errorCode As Integer = LicenseManager.InitLicenseFromLicenseContent(licenseContent, errorMsg)
Dim errorMsg As String = Nothing
If errorCode <> CType(EnumErrorCode.EC_OK, Integer) Then
    Throw New InvalidOperationException($"Offline activation failed: {errorMsg}")
End If
$vbLabelText   $csharpLabel

Les lots de licences obtenus de cette manière ont une fenêtre d'expiration (généralement de quelques jours à un an) et doivent être rafraîchis avant qu'ils ne deviennent obsolètes, ce qui signifie qu'une machine connectée doit participer au flux de travail de manière récurrente.

L'activation de la licence Code-barres IronBarcode est une tâche unique évaluée localement :

// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
' IronBarCode: local validation, no network required
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Aucun code d'erreur à vérifier. Aucune dépendance au réseau. Pas de cycle de rafraîchissement du lot de licences. La même ligne fonctionne sur une machine de développement, dans un pipeline CI/CD, dans un conteneur Docker, et sur un serveur isolé.

Cas d'utilisation de l'appareil photo et des fichiers

Dynamsoft et Code-barres IronBarcode sont optimisés pour différents scénarios principaux. Le tableau ci-dessous décrit cela plutôt que de déclarer une bibliothèque universellement meilleure :

Scénario Lecteur de codes-barres Dynamsoft Code-barres IronBarcode
Flux vidéo en direct (30 images/seconde) Optimisé pour le temps réel Ce n'est pas le cas d'utilisation principal
Kit de développement logiciel mobile (iOS/Android) Kit de développement logiciel complet disponible .NET uniquement
Traitement des fichiers côté serveur Pris en charge via CaptureVisionRouter Cas d'utilisation principal
lecture de codes-barres PDF Directement sous Windows ; render loop common cross-platform Support natif
Déploiement isolé Nécessite un flux de travail de lot de licences hors ligne Fonctionne dès le départ
Docker / conteneurs éphémères Rafraîchissement du lot de licences par environnement Variable d'environnement unique
Licence hors ligne Contenu de licence issu d'une activation en ligne antérieure Clé de licence standard
API ASP.NET Core Pris en charge (licence supplémentaire obligatoire) Prise en charge
Azure Functions Réseau sortant pour la première activation Aucune exigence de réseau
génération de codes-barres Lecture uniquement dans le lot de Barcode Reader Oui — génération et lecture
génération de code QR Pas dans le lot de Barcode Reader Oui — QRCodeWriter

Comprendre IronBarcode

IronBarcode est une bibliothèque .NET permettant à la fois de générer et de lire des codes-barres. L'API est statique — pas d'instances, pas d'appels de suppression, pas de cycle de vie de session. L'activation de la licence est locale. La prise en charge des fichiers PDF est intégrée :

// NuGet: dotnet add package BarCode
using IronBarCode;

// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

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

// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");

// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads= 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
// NuGet: dotnet add package BarCode
using IronBarCode;

// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

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

// Read from a PDF — native, no extra library
var pdfResults = BarcodeReader.Read("manifest.pdf");

// Read with options for high-accuracy or high-throughput scenarios
var options = new BarcodeReaderOptions
{
    Speed = ReadingSpeed.Balanced,
    ExpectMultipleBarcodes = true,
    MaxParallelThreads= 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
Imports IronBarCode

' License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"

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

' Read from a PDF — native, no extra library
Dim pdfResults = BarcodeReader.Read("manifest.pdf")

' Read with options for high-accuracy or high-throughput scenarios
Dim options = New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}
Dim multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options)
$vbLabelText   $csharpLabel

La génération est tout aussi simple :

// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");

// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("tracking-qr.png");

// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .ToPngBinaryData();
// Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .SaveAsPng("shipping-label.png");

// Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest)
    .AddBrandLogo("company-logo.png")
    .SaveAsPng("tracking-qr.png");

// Get bytes for HTTP response
byte[] bytes = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128)
    .ResizeTo(400, 100)
    .ToPngBinaryData();
Imports System

' Generate Code 128
BarcodeWriter.CreateBarcode("SHIP-7734-X", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .SaveAsPng("shipping-label.png")

' Generate QR with error correction and embedded logo
QRCodeWriter.CreateQrCode("https://track.example.com/7734", 500, QRCodeWriter.QrErrorCorrectionLevel.Highest) _
    .AddBrandLogo("company-logo.png") _
    .SaveAsPng("tracking-qr.png")

' Get bytes for HTTP response
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("ITEM-001", BarcodeEncoding.Code128) _
    .ResizeTo(400, 100) _
    .ToPngBinaryData()
$vbLabelText   $csharpLabel

Comparaison des fonctionnalités

Fonction Lecteur de codes-barres Dynamsoft Code-barres IronBarcode
Lecture de codes-barres Oui — optimisé pour la caméra Oui — optimisé pour les fichiers et les documents
génération de codes-barres Non Oui
génération de code QR Non Oui — QRCodeWriter
Prise en charge native des fichiers PDF Directement sous Windows ; render loop common cross-platform Oui — BarcodeReader.Read(pdf)
validation de licence Activation en ligne + vérification périodique Localement
Isolation physique / hors ligne Flux de travail de contenu de licence Clé standard, fonctionne hors ligne
Docker / conteneur Flux de travail de lot de licences par environnement Variable d'environnement unique
Azure Functions Réseau sortant pour la première activation Aucune exigence de réseau
AWS Lambda Réseau sortant pour la première activation Aucune exigence de réseau
Kit de développement logiciel mobile iOS et Android disponibles .NET uniquement
Caméra en temps réel (30 images/seconde) Objectif de conception principal Non conçu pour cela
Code 128 Oui Oui
Code QR Oui (lecture) Oui (lecture et génération)
Matrice de données Oui Oui
PDF417 Oui Oui
Aztèque Oui Oui
EAN / UPC Oui Oui
Gestion des instances new CaptureVisionRouter() + Dispose() Statique — aucune instance
Lecture de plusieurs codes-barres ExpectedBarcodesCount on BarcodeSettings ExpectMultipleBarcodes = true
Contrôle de la vitesse de lecture Temporisation + ajustement de modèle énumération ReadingSpeed
Lecture parallèle Enfilage manuel MaxParallelThreads
Modèle de tarification Abonnement annuel / perpétuel négocié Perpétuel à partir de 749
Prise en charge .NET .NET 6.0+ and .NET Framework 3.5+ .NET 4.6.2 à .NET 9
Plateformes Windows (x86/x64), Linux (x64) Windows, Linux, macOS, Docker, Azure, AWS Lambda

Référence de mappage d'API

Pour les équipes qui utilisent du code Dynamsoft et qui ont besoin de comprendre comment les concepts se traduisent :

Lecteur de codes-barres Dynamsoft Code-barres IronBarcode
LicenseManager.InitLicense(key, out errorMsg) IronBarCode.License.LicenseKey = "key"
errorCode != (int)EnumErrorCode.EC_OK vérification Pas nécessaire
LicenseManager.InitLicenseFromLicenseContent(content, out msg) Pas nécessaire
new CaptureVisionRouter() Statique — aucune instance
router.Dispose() Pas nécessaire
router.Capture(imagePath, PresetTemplate.PT_READ_BARCODES) BarcodeReader.Read(imagePath)
router.Capture(imageBytes, PresetTemplate.PT_READ_BARCODES) BarcodeReader.Read(imageBytes)
BarcodeResultItem.GetText() result.Value
BarcodeResultItem.GetFormatString() result.Format
SimplifiedCaptureVisionSettings via GetSimplifiedSettings() nouvelles options de lecture de code-barres { ... }
settings.Timeout = 100 Speed = ReadingSpeed.Balanced
settings.BarcodeSettings.ExpectedBarcodesCount = 1 ExpectMultipleBarcodes = false (par défaut)
router.UpdateSettings(template, settings) Passé en paramètre à Read()
Bibliothèque PDF externe + boucle de rendu de page BarcodeReader.Read("doc.pdf")

Quand les équipes changent

Traitement de documents côté serveur, pas de numérisation par caméra. Le scénario de migration le plus courant est une équipe qui a choisi Dynamsoft basé sur sa réputation, l'a intégré, puis a découvert que l'API centrée sur la caméra et l'étape de rendu PDF rendaient les flux de travail de traitement de documents peu commodes. Lire les codes-barres des PDF téléchargés dans une application web est un cas d'utilisation principal qui nécessite un travail supplémentaire dans Dynamsoft, mais qu'une seule requête dans IronBarcode.

Environnements réseau isolés ou restreints. Les institutions financières, les systèmes de santé et les déploiements gouvernementaux interdisent souvent les connexions Internet sortantes depuis les serveurs d'applications. L'activation en ligne de Dynamsoft ne fonctionne pas dans ces environnements sans le flux de travail de lot de licences hors ligne, ce qui ajoute des étapes opérationnelles. Dans ces environnements, les équipes migrent souvent vers Code-barres IronBarcode précisément parce que la validation des licences ne comporte aucun composant réseau.

Conteneurs éphémères Docker et Kubernetes. Les déploiements par conteneur, où les instances augmentent et diminuent fréquemment, rendent le rafraîchissement récurrent des lots de licences malaisé à gérer. La clé de licence d'IronBarcode fonctionne comme une variable d'environnement standard, sans enregistrement par instance.

Besoin de génération ainsi que de lecture. Le lot Lecteur de codes-barres Dynamsoft est en lecture seule. Les applications qui doivent générer des étiquettes de code-barres, imprimer des codes QR pour les produits ou créer des manifestes d'expédition avec des codes-barres intégrés nécessitent une deuxième bibliothèque. Dans ce genre de situation, les équipes optent souvent pour Code-barres IronBarcode afin d'éviter de gérer deux dépendances de codes-barres distinctes.

Empreinte opérationnelle simplifiée. Retirer le serveur de licences Dynamsoft de la liste des dépendances externes à atteindre, supprimer la bibliothèque de rendu PDF, et remplacer la gestion du cycle de vie du routeur par des appels statiques réduit le nombre de choses qui peuvent mal tourner en production.

Conclusion

Dynamsoft Barcode Reader est une bibliothèque de haute qualité qui convient bien à son cas d'utilisation prévu : la numérisation de codes-barres en temps réel basée sur la caméra, spécialement dans les applications mobiles. Les algorithmes sont parfaitement adaptés aux conditions de la numérisation manuelle : éclairage variable, flou de mouvement, occlusion partielle. Si tel est votre cas d'utilisation, Dynamsoft est un concurrent sérieux.

Pour le traitement de documents côté serveur — lecture de codes-barres dans des PDF, génération d'étiquettes de codes-barres, exécution dans des environnements isolés ou déploiement dans des conteneurs Docker éphémères —, l'architecture de la bibliothèque demande plus d'installation à chaque étape. L'activation de licence en ligne, le modèle de rendu PDF multiplateforme, les paramètres de temporisation optimisés pour la caméra et le flux de travail de lot de licences hors ligne sont les conséquences de la construction pour l'utilisation par caméra mobile. Ce ne sont pas des insectes ; Ce sont des choix de conception délibérés pour un contexte différent.

IronBarcode est conçu pour le contexte côté document et côté serveur. La validation des licences locales, la lecture native des PDF, l'API statique et la prise en charge de la génération sont autant de fonctionnalités de premier ordre et non des solutions de contournement. La décision dépend de quel environnement vos codes-barres vivent réellement.

Questions Fréquemment Posées

Qu'est-ce que le lecteur de codes-barres Dynamsoft ?

Dynamsoft Barcode Reader 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 le lecteur de codes-barres Dynamsoft et IronBarcode ?

IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que Dynamsoft Barcode Reader nécessite généralement la création et la configuration d'une instance avant d'être utilisé. 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 Dynamsoft Barcode Reader ?

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 Dynamsoft Barcode Reader 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 à Dynamsoft Barcode Reader ?

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 Package Manager, 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 à Dynamsoft ?

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 le lecteur de codes-barres Dynamsoft 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 du lecteur de codes-barres Dynamsoft vers IronBarcode ?

La migration du lecteur de codes-barres Dynamsoft vers IronBarcode implique principalement de remplacer les appels d'API basés sur des instances par les méthodes statiques d'IronBarcode, de supprimer les chaudières de licence et de mettre à jour les 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().

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