Barcoder vs IronBarcode : Comparaison de la bibliothèque de codes-barres C#
API de code-barres Cloudmersivevs IronBarcode: Cloud REST vs Local .NET
À 10 000 codes-barres par jour — un nombre réaliste pour le traitement des factures, la validation des étiquettes d'expédition, ou l'entrée des documents — API de code-barres Cloudmersivenécessite un niveau d'abonnement supérieur, et chaque code-barres ajoute 150–400ms de temps de trajet rond-trip réseau. Chaque document, chaque image, chaque morceau de données de code-barres quitte votre réseau et se rend sur les serveurs de Cloudmersive.
Voilà, en termes simples, le modèle Cloudmersive. Pour les équipes qui découvrent ce problème en cours de projet — après la mise en place de l'intégration et la configuration de la clé API —, ces trois éléments constituent souvent une mauvaise surprise. Cette comparaison vise à les clarifier avant même la mise en place de l'intégration.
Comprendre l'API de code-barres Cloudmersive
Cloudmersive propose une collection d'API REST couvrant la conversion de documents, la reconnaissance optique de caractères (OCR), le traitement d'images et les opérations sur les codes-barres. La fonctionnalité de code-barres ne représente qu'une partie d'un portefeuille d'API plus vaste. Pour les développeurs .NET , Cloudmersivefournit un package client NuGet qui encapsule leurs points de terminaison REST :
// NuGet: dotnet add package Cloudmersive.APIClient.NET.Barcode
using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();
// Each call issues an HTTPS request to Cloudmersive's servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
// NuGet: dotnet add package Cloudmersive.APIClient.NET.Barcode
using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();
// Each call issues an HTTPS request to Cloudmersive's servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
Imports Cloudmersive.APIClient.NET.Barcode.Api
Imports Cloudmersive.APIClient.NET.Barcode.Client
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY")
Dim apiInstance As New GenerateBarcodeApi()
' Each call issues an HTTPS request to Cloudmersive's servers
Dim result As Byte() = apiInstance.GenerateBarcodeQRCode("https://example.com")
L'important à comprendre concernant ce code, c'est ce qu'il fait réellement : il envoie une requête HTTPS à l'infrastructure de Cloudmersive, attend une réponse et renvoie le résultat. Chaque ligne de traitement des codes-barres dans une intégration Cloudmersivesuit ce modèle. Il n'y a pas de traitement local. Il n'existe pas de voie hors ligne. Chaque opération nécessite une connexion internet active et un serveur Cloudmersivedisponible.
Modèle de client HTTP
Le kit de développement logiciel (SDK) .NET de Cloudmersiveest un client API généré. En dessous, c'est un HttpClient effectuant des appels REST. Les conséquences découlent de ce fait :
- La latence réseau est inévitable et non négligeable (150–400ms par appel) Vos données transitent entre vos serveurs externes et le serveur lors de chaque opération.
- Les limites de débit sont appliquées au niveau de l'API.
- Les clés API expirent et doivent être renouvelées.
- Les pannes de Cloudmersiveinterrompent complètement le traitement de vos codes-barres.
- La robustesse de la production nécessite une logique de nouvelle tentative, une gestion des délais d'attente et des disjoncteurs.
Pour la lecture de codes-barres dans une chaîne de traitement de documents — où l'on peut traiter des centaines de documents par heure —, il ne s'agit pas de préoccupations théoriques.
Coût à l'échelle
Cloudmersive utilise une tarification par requête. Le coût exact par requête dépend de votre niveau d'abonnement, mais le modèle de base reste le même à tous les niveaux : chaque opération de code-barres consomme une requête de votre quota mensuel.
Les calculs aux volumes de production courants, mappés sur les niveaux publiés de Cloudmersive:
| Volumequotidien | Volumemensuel | Niveau Cloudmersive | Coût Annuel | Code-barres IronBarcode |
|---|---|---|---|---|
| 100/jour | ~3 000/mois | Basic (19,99 $/mois) | environ 240 $ par an | 749 $ (une seule fois) |
| 1 000/jour | ~30 000/mois | Business (49,99 $/mois) | ~600$/an | 749 $ (une seule fois) |
| 10 000/jour | ~300 000/mois | Medium Business (499,99 $/mois) | ~6 000 $/an | 749 $ (une seule fois) |
| 50 000/jour | ~1 500 000/mois | Enterprise (sur mesure) | Sur mesure | 749 $ (une seule fois) |
| 100 000/jour | ~3 000 000/mois | Enterprise (sur mesure) | Sur mesure | 749 $ (une seule fois) |
La licence perpétuelle Code-barres IronBarcode à 749 $ (Lite, développeur unique) couvre un nombre illimité d'opérations de codes-barres. Il n'y a pas de frais par requête, quel que soit le volume. Une équipe traitant 10 000 codes-barres par jour s'équilibre sur le coût de la licence dans les six premières semaines de ce qu'elle paierait Cloudmersiveannuellement.
Pour une équipe de 3 développeurs, la licence Plus à 1 499 $ en une seule fois se compare à environ 6 000 $ par an à 10 000 codes-barres par jour. La licence Code-barres IronBarcode s'amortit en trois mois d'économies Cloudmersive.
La falaise de l'escalade
La tarification à la demande pose un problème spécifique lorsque l'utilisation augmente : le coût est proportionnel au volume. Si votre flux de traitement de documents passe de 2 000 à 20 000 documents par mois, votre facture Cloudmersiveest multipliée par dix. Vos coûts d'ingénierie n'augmentent pas — le même code traite davantage de documents — mais votre facture API, elle, augmente.
IronBarcode ne possède pas cette propriété. Le traitement de dix fois plus de codes-barres ne coûte rien de plus.
Impact de la latence
Chaque opération de lecture de code-barres Cloudmersiveimplique :
- Sérialisation de la requête (octets d'image ou données de code-barres)
- Établir ou réutiliser une connexion HTTPS
- Transmission des données aux serveurs Cloudmersive
- Attente du traitement côté serveur
- Réception de la réponse
- Désérialisation du résultat
Les directives publiées par Cloudmersiveet les rapports des clients placent la latence par appel à environ 150–400ms, selon la charge du serveur, la proximité géographique, et la taille de l'image. À 250ms par appel :
| Volume | Frais généraux totaux du réseau |
|---|---|
| 10 codes-barres | 2,5 secondes |
| 100 codes-barres | 25 secondes |
| 1 000 codes-barres | 4,2 minutes |
| 10 000 codes-barres | 41,7 minutes |
| 100 000 codes-barres | ~7 heures |
Pour les points de terminaison destinés aux utilisateurs — un formulaire Web où un utilisateur télécharge une image et attend un résultat — une latence de 250 ms sur une seule lecture de code-barres peut être acceptable. Pour les tâches de traitement de documents en arrière-plan, la latence accumulée devient le coût dominant du flux de travail.
Le traitement local d'IronBarcode s'effectue en 10 à 50 ms par code-barres sur un matériel standard. Avec 10 000 codes-barres, cela représente environ 8 minutes au total, contre 41 minutes de surcharge réseau uniquement dans le modèle Cloudmersive.
Latence dans ASP.NET Core
Pour les points de terminaison d'API Web qui doivent respecter les SLA de temps de réponse, la latence de Cloudmersiveconstitue un seuil minimal fixe. Un point de terminaison qui lit un code-barres et renvoie la valeur ne peut pas répondre plus rapidement que 100 ms, quel que soit le matériel du serveur, car le temps d'aller-retour minimal vers une API externe est dicté par la physique du réseau.
IronBarcode traite les données localement. Le seuil de latence est déterminé par votre matériel et la complexité de l'image.
Souveraineté des données
Chaque opération de lecture de code-barres Cloudmersivetransmet des données aux serveurs de Cloudmersive. Pour la lecture des codes-barres, cela signifie que vos images — pouvant contenir des identifiants de patients, des numéros de comptes financiers, des adresses de livraison, des identifiants d'employés ou des données d'inventaire confidentielles — quittent votre réseau.
Les implications en matière de conformité dépendent de votre environnement réglementaire :
| Règlement | Modèle Cloudmersive | Code-barres IronBarcode |
|---|---|---|
| HIPAA | Les données de santé protégées (PHI) contenues dans les images de codes-barres nécessitent l'utilisation de BAA avec Cloudmersive ; les données quittent le réseau | Traitement entièrement local – aucun accord de partenariat commercial (BAA) requis |
| RGPD | Données personnelles transmises à des serveurs américains ; évaluation de l'adéquation requise | Aucune transmission de données — RGPD simplifié |
| ITAR | Les données techniques relatives à la défense ne peuvent pas être transmises à des services externes | Entièrement local — conforme à la réglementation ITAR dès sa conception |
| CMMC | Les informations non classifiées contrôlées ne peuvent pas transiter par des réseaux externes. | Aucun appel réseau externe |
| FedRAMP | Les données du gouvernement américain nécessitent des services cloud autorisés par FedRAMP | Non applicable — traitement local |
| PCI DSS | Les données des titulaires de cartes contenues dans les codes-barres nécessitent un traitement spécifique pour la transmission externe | Les données ne quittent jamais votre environnement |
| Réseaux isolés | Impossible — nécessite une connexion internet | Assistance complète — fonctionne sans accès réseau |
| Politique interne en matière de données | De nombreuses organisations interdisent l'envoi de données opérationnelles à des API tierces. | Aucune transmission par un tiers |
Pour les charges de travail liées à la santé, la défense, les services financiers ou le gouvernement, le modèle cloud de Cloudmersiveest souvent un obstacle majeur avant même toute évaluation des fonctionnalités ou du coût. Le fait que les données quittent votre réseau est rédhibitoire.
IronBarcode traite tout en local. Les images des codes-barres ne quittent jamais la machine hôte. Aucune donnée n'est transmise.
Fiabilité
Cloudmersive est une dépendance externe. La fiabilité du traitement des codes-barres de votre application est limitée par la disponibilité de Cloudmersive.
Que se passe-t-il lors d'une panne ?
En cas d'interruption de service chez Cloudmersive :
- Les opérations de lecture de codes-barres échouent ou expirent.
- Les requêtes de génération de codes-barres renvoient des erreurs
- Les chaînes de traitement de documents s'arrêtent Toute logique de nouvelle tentative que vous avez implémentée commence à consommer des ressources de calcul en attendant la récupération.
Si le traitement de vos codes-barres fait partie du chemin critique (système de prise de commandes, flux de travail de réception, formulaire d'inscription des patients), une panne de Cloudmersiveentraîne une panne de votre application.
limitation de débit
Cloudmersive applique des limites de débit à chaque niveau de tarification. Dans le niveau gratuit, la limite de débit publiée est d'un appel par seconde, ce qui sérialise effectivement le traitement des documents en parallèle. Dépasser votre quota mensuel entraîne une défaillance ou une mise en file d'attente des opérations.
Le code de production utilisant Cloudmersivedoit gérer :
using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;
using System;
using System.Threading;
using System.Threading.Tasks;
public class CloudmersiveBarcodeService
{
private readonly BarcodeScanApi _scanApi;
private static int _requestCount = 0;
public CloudmersiveBarcodeService()
{
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
_scanApi = new BarcodeScanApi();
}
public async Task<string> ScanWithRetry(byte[] imageBytes, int maxRetries = 3)
{
for (int attempt = 1; attempt <= maxRetries; attempt++)
{
try
{
Interlocked.Increment(ref _requestCount);
using var stream = new System.IO.MemoryStream(imageBytes);
var result = await _scanApi.BarcodeScanImageAsync(stream);
if (result.Successful == true)
return result.RawText;
throw new InvalidOperationException("Scan unsuccessful");
}
catch (ApiException ex) when (ex.ErrorCode == 429)
{
if (attempt < maxRetries)
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
else
throw;
}
catch (Exception) when (attempt < maxRetries)
{
await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
}
}
throw new InvalidOperationException("All retry attempts failed");
}
}
using Cloudmersive.APIClient.NET.Barcode.Api;
using Cloudmersive.APIClient.NET.Barcode.Client;
using System;
using System.Threading;
using System.Threading.Tasks;
public class CloudmersiveBarcodeService
{
private readonly BarcodeScanApi _scanApi;
private static int _requestCount = 0;
public CloudmersiveBarcodeService()
{
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
_scanApi = new BarcodeScanApi();
}
public async Task<string> ScanWithRetry(byte[] imageBytes, int maxRetries = 3)
{
for (int attempt = 1; attempt <= maxRetries; attempt++)
{
try
{
Interlocked.Increment(ref _requestCount);
using var stream = new System.IO.MemoryStream(imageBytes);
var result = await _scanApi.BarcodeScanImageAsync(stream);
if (result.Successful == true)
return result.RawText;
throw new InvalidOperationException("Scan unsuccessful");
}
catch (ApiException ex) when (ex.ErrorCode == 429)
{
if (attempt < maxRetries)
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
else
throw;
}
catch (Exception) when (attempt < maxRetries)
{
await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
}
}
throw new InvalidOperationException("All retry attempts failed");
}
}
Imports Cloudmersive.APIClient.NET.Barcode.Api
Imports Cloudmersive.APIClient.NET.Barcode.Client
Imports System
Imports System.Threading
Imports System.Threading.Tasks
Public Class CloudmersiveBarcodeService
Private ReadOnly _scanApi As BarcodeScanApi
Private Shared _requestCount As Integer = 0
Public Sub New()
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY")
_scanApi = New BarcodeScanApi()
End Sub
Public Async Function ScanWithRetry(imageBytes As Byte(), Optional maxRetries As Integer = 3) As Task(Of String)
For attempt As Integer = 1 To maxRetries
Try
Interlocked.Increment(_requestCount)
Using stream As New System.IO.MemoryStream(imageBytes)
Dim result = Await _scanApi.BarcodeScanImageAsync(stream)
If result.Successful = True Then
Return result.RawText
End If
Throw New InvalidOperationException("Scan unsuccessful")
End Using
Catch ex As ApiException When ex.ErrorCode = 429
If attempt < maxRetries Then
Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
Else
Throw
End If
Catch ex As Exception When attempt < maxRetries
Await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt))
End Try
Next
Throw New InvalidOperationException("All retry attempts failed")
End Function
End Class
IronBarcode n'exige rien de tout cela. Il n'y a pas de limites de débit, pas de clés API, pas d'infrastructure de nouvelle tentative, pas de suivi des quotas :
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate locally
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Read locally
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// Generate locally
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Read locally
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' Generate locally
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
' Read locally
Dim result = BarcodeReader.Read("barcode.png").First()
Console.WriteLine(result.Value)
Aucune logique de nouvelle tentative. Aucune gestion des limites de débit. Aucune gestion des exceptions HTTP. Pas de gestion des quotas.
Comprendre IronBarcode
IronBarcode est une bibliothèque .NET native qui traite les codes-barres entièrement sur la machine hôte. Elle prend en charge la lecture et la génération de plus de 50 formats de codes-barres, traite nativement les fichiers PDF et fonctionne sur toutes les plateformes .NET , de .NET Framework 4.6.2 à .NET 9.
Caractéristiques principales :
- Traitement entièrement local : aucun appel réseau lors de l'opération de lecture de codes-barres
- Aucun coût par requête : une seule licence couvre un nombre illimité d'opérations de codes-barres
- Aucune limite de débit : Traitez autant de codes-barres que votre matériel le permet.
- Aucune dépendance externe à l'exécution : aucune connexion Internet requise
- Prise en charge native des PDF : lecture des codes-barres directement dans les PDF, sans extraction préalable des images.
- Lecture et écriture complètes : Générez des codes-barres dans tous les principaux formats, lisez des images, des PDF et des flux de données.
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("branded-qr.png");
// Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Get bytes for embedding in document or API response
byte[] bytes = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ToPngBinaryData();
// Read from image
var results = BarcodeReader.Read("barcode.png");
foreach (var r in results)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read from PDF — native, no image extraction step
var pdfResults = BarcodeReader.Read("invoices.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
// Multi-barcode detection
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var multiResults = BarcodeReader.Read("manifest.png", options);
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
// QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500)
.SaveAsPng("qr.png");
// QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500)
.AddBrandLogo("logo.png")
.SaveAsPng("branded-qr.png");
// Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128)
.SaveAsPng("barcode.png");
// Get bytes for embedding in document or API response
byte[] bytes = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128)
.ToPngBinaryData();
// Read from image
var results = BarcodeReader.Read("barcode.png");
foreach (var r in results)
{
Console.WriteLine($"{r.Format}: {r.Value}");
}
// Read from PDF — native, no image extraction step
var pdfResults = BarcodeReader.Read("invoices.pdf");
foreach (var r in pdfResults)
{
Console.WriteLine($"Page {r.PageNumber}: {r.Value}");
}
// Multi-barcode detection
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
var multiResults = BarcodeReader.Read("manifest.png", options);
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
' QR code generation
QRCodeWriter.CreateQrCode("https://example.com", 500).SaveAsPng("qr.png")
' QR code with brand logo
QRCodeWriter.CreateQrCode("https://example.com", 500) _
.AddBrandLogo("logo.png") _
.SaveAsPng("branded-qr.png")
' Code128 generation
BarcodeWriter.CreateBarcode("SHIP-2024031500428", BarcodeEncoding.Code128) _
.SaveAsPng("barcode.png")
' Get bytes for embedding in document or API response
Dim bytes As Byte() = BarcodeWriter.CreateBarcode("data", BarcodeEncoding.Code128) _
.ToPngBinaryData()
' Read from image
Dim results = BarcodeReader.Read("barcode.png")
For Each r In results
Console.WriteLine($"{r.Format}: {r.Value}")
Next
' Read from PDF — native, no image extraction step
Dim pdfResults = BarcodeReader.Read("invoices.pdf")
For Each r In pdfResults
Console.WriteLine($"Page {r.PageNumber}: {r.Value}")
Next
' Multi-barcode detection
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim multiResults = BarcodeReader.Read("manifest.png", options)
Comparaison des fonctionnalités
| Fonction | API de code-barres Cloudmersive | Code-barres IronBarcode |
|---|---|---|
| Lieu de traitement | Serveurs Cloudmersive | Local — uniquement sur votre machine |
| Internet requis | Oui — chaque opération | Non |
| Transmission de données | Toutes les images/données sont envoyées à Cloudmersive | None |
| Latence par opération | 150–400ms (réseau) | 10–50 ms (local) |
| Modèle de coût | Quota mensuel par demande | Licence perpétuelle à usage unique |
| Coût de 10 000 codes-barres par jour | ~$6,000/an (niveau Moyen Entreprise) | 749 $ une fois |
| Limites de tarifs | Oui — simultané et mensuel | None |
| Hors ligne / Isolation physique | Pas possible | Prise en charge complète |
| HIPAA | Nécessite un accord de partenariat commercial (BAA) ; données laisse réseau | Réservé aux résidents locaux – aucune BAA requise |
| RGPD | Données transférées vers des serveurs américains | Aucun transfert de données |
| ITAR / CMMC | Transmission externe interdite | Conforme dès sa conception |
| Impact de la panne | Votre traitement s'arrête | Aucune dépendance externe |
| Génération de codes-barres | Oui | Oui |
| Lecture de codes-barres | Oui | Oui |
| Prise en charge native des fichiers PDF | Non — extraire les images séparément | Oui — lecture directe de PDF |
| Détection de plusieurs codes-barres | Résultat unique BarcodeScanResult par appel |
Oui — ExpectMultipleBarcodes = true |
| Récupération de codes-barres endommagés | Décodeur coté serveur | Alimenté par ML, ReadingSpeed.ExtremeDetail |
| Formats pris en charge | Six formats 1D/2D pour la génération ; couverture de lecture plus large | Plus de 50 formats |
| Gestion des nouvelles tentatives/erreurs | Requis dans le code de production | Pas nécessaire |
| Prise en charge du .NET Framework | .NET Framework et .NET Core (via client REST) | .NET Framework 4.6.2+ à .NET 9 |
| Docker / Linux | via client HTTP | Natif |
| Azure Functions | via client HTTP | Natif |
Référence de mappage d'API
| Cloudmersive | Code-barres IronBarcode |
|---|---|
Configuration.Default.ApiKey.Add("Apikey", "key") |
IronBarCode.License.LicenseKey = "key" |
new GenerateBarcodeApi() |
Statique — aucune instance nécessaire |
new BarcodeScanApi() |
Statique — aucune instance nécessaire |
apiInstance.GenerateBarcodeQRCode(value) |
BarcodeWriter.CreateBarcode(value, BarcodeEncoding.QRCode).ToPngBinaryData() |
apiInstance.GenerateBarcodeCode128(value) |
BarcodeWriter.CreateBarcode(value, BarcodeEncoding.Code128).ToPngBinaryData() |
apiInstance.GenerateBarcodeEAN13(value) |
BarcodeWriter.CreateBarcode(value, BarcodeEncoding.EAN13).ToPngBinaryData() |
scanApi.BarcodeScanImage(imageFile) |
BarcodeReader.Read(imageBytes) |
result.RawText |
result.Value |
result.BarcodeType |
result.Format |
result.Successful == true |
La collection de résultats n'est pas vide. |
| HTTPS vers les serveurs Cloudmersive | Traitement local — sans réseau |
| 150–400ms de latence | 10–50 ms local |
| Consommation mensuelle de quotas | Illimité — sans quota |
| Rotation de la clé API requise | Clé de licence unique |
| Logique de nouvelle tentative requise | Pas nécessaire |
Quand les équipes changent
Le déclencheur du passage de Cloudmersiveà Code-barres IronBarcode est presque toujours l'une des quatre situations suivantes :
Exigence de conformité : Un examen de sécurité, un contrat client ou un audit réglementaire révèle que des images de codes-barres contenant des données sensibles quittent le réseau. La conformité aux normes HIPAA, RGPD ou ITAR exige un traitement local. L'intégration Cloudmersivedoit être remplacée, quels que soient son coût ou sa praticité.
Coûts imprévus à grande échelle : le projet démarre avec un faible volume d'utilisation couvert par les offres gratuites ou à faible coût de Cloudmersive. À mesure que l'application gagne des utilisateurs ou que le flux de traitement des documents s'accroît, la facture mensuelle augmente proportionnellement. À un certain moment (généralement entre 100 et 200 dollars par mois), l'équipe effectue le calcul du seuil de rentabilité par rapport à la licence perpétuelle d'IronBarcode et décide de migrer.
Environnement isolé : L'application doit fonctionner dans un environnement sans accès à Internet — une usine, une installation gouvernementale, un établissement de santé avec des restrictions de réseau. Cloudmersiveest impossible dans ces environnements. Code-barres IronBarcode fonctionne sans aucune connexion réseau.
Latence dans un SLA : Un accord de niveau de service exige des temps de réponse que la surcharge réseau de Cloudmersiverend impossible à garantir. Le traitement local avec Code-barres IronBarcode permet de réaliser les opérations de codes-barres dans les limites du SLA.
Exemple de pipeline de traitement de documents
Scénario réaliste Enterprise : une équipe de comptabilité fournisseurs traite 2 000 factures par jour. Chaque facture est un PDF comportant un ou plusieurs codes-barres pour le numéro de commande, le code fournisseur et les références des lignes de commande.
Approche immersive dans le cloud :
- 2 000 factures × 3 codes-barres en moyenne = 6 000 appels API par jour
- À 250 ms par appel : 25 minutes de temps d'attente réseau par jour
- Mensuel : environ 180 000 requêtes → niveau d'abonnement important
- Coût annuel : environ 2 000 $ à 4 000 $
- Risque : Le traitement s'interrompt si Cloudmersiveest indisponible
- Conformité : Les factures fournisseurs peuvent contenir des numéros de compte transmis à l'extérieur
Approche IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
string[] invoicePaths = Directory.GetFiles("invoices", "*.pdf");
foreach (var invoicePath in invoicePaths)
{
// One call per invoice processes all pages and all barcodes
var barcodes = BarcodeReader.Read(invoicePath, options);
foreach (var barcode in barcodes)
{
Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}");
}
}
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";
var options = new BarcodeReaderOptions
{
Speed = ReadingSpeed.Balanced,
ExpectMultipleBarcodes = true,
};
string[] invoicePaths = Directory.GetFiles("invoices", "*.pdf");
foreach (var invoicePath in invoicePaths)
{
// One call per invoice processes all pages and all barcodes
var barcodes = BarcodeReader.Read(invoicePath, options);
foreach (var barcode in barcodes)
{
Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}");
}
}
Imports IronBarCode
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim invoicePaths As String() = Directory.GetFiles("invoices", "*.pdf")
For Each invoicePath In invoicePaths
' One call per invoice processes all pages and all barcodes
Dim barcodes = BarcodeReader.Read(invoicePath, options)
For Each barcode In barcodes
Console.WriteLine($"Invoice: {invoicePath} | Page: {barcode.PageNumber} | {barcode.Format}: {barcode.Value}")
Next
Next
- 2 000 factures traitées localement en quelques minutes, et non 25 minutes de latence réseau.
- Coût annuel : 749 $ (un seul développeur)
- Risque : Aucune dépendance externe
- Conformité : Les données de facturation ne quittent jamais le réseau
Conclusion
L'API CloudmersiveBarcode est un service REST cloud. Son prix est proportionnel à votre utilisation. Sa latence est déterminée par Internet. Sa disponibilité dépend de l'infrastructure de Cloudmersive. Vos données sont transmises à des serveurs externes à chaque opération de lecture de code-barres.
Ce sont des propriétés structurelles du modèle d'API cloud, et non des critiques spécifiques à Cloudmersive. Ce modèle convient parfaitement au prototypage en petite série ou aux applications où aucune de ces propriétés n'a d'importance. Cela devient coûteux, lent et potentiellement non conforme à mesure que le volume augmente et que les exigences se durcissent.
La licence unique d'IronBarcode à 749 $ couvre un nombre illimité d'opérations de codes-barres, fonctionne localement sans transmission de données, traite les PDF nativement et ne nécessite aucune infrastructure de nouvelle tentative comme le requièrent les intégrations Cloudmersiveen production. À 10 000 codes-barres par jour, les mathématiques se résolvent en faveur d'IronBarcode dans les deux premiers mois.
Questions Fréquemment Posées
Qu'est-ce que l'API BarCode de Cloudmersive ?
Cloudmersive Barcode API 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 Cloudmersive Barcode API et IronBarcode ?
IronBarcode utilise une API statique, sans état, ne nécessitant aucune gestion d'instance, tandis que l'API BarCode de Cloudmersive nécessite généralement la création et la configuration d'une instance avant utilisation. IronBarcode offre également une prise en charge native des PDF, une détection automatique des formats et une licence à clé unique dans tous les environnements.
IronBarcode est-il plus facile à licencier que Cloudmersive Barcode API ?
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 Cloudmersive Barcode API 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 à l'API de codes-barres de Cloudmersive ?
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 à Cloudmersive ?
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 Cloudmersive Barcode API 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 l'API BarCode de Cloudmersive vers IronBarcode ?
La migration de Cloudmersive Barcode API 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().

