API de código de barras de Cloudmersive frente a IronBarcode: Comparación de bibliotecas de códigos de barras C#
Con 10.000 códigos de barras al día —una cifra realista para el procesamiento de facturas, la validación de etiquetas de envío o la recepción de documentos—, la API de códigos de barras de Inmersivo en las nubes cuesta aproximadamente 3.650 dólares al año. Con ese mismo volumen, cada código de barras añade entre 100 y 500 ms al tiempo de ida y vuelta de la red. Y cada documento, cada imagen, cada dato del código de barras sale de su red y viaja a los servidores de Cloudmersive.
Ese es el modelo de Inmersivo en las nubes explicado claramente. Para los equipos que se topan con este problema a mitad de un proyecto —después de que la integración esté lista y la clave API configurada—, estos tres hechos suelen presentarse juntos como una sorpresa desagradable. Esta comparación tiene como objetivo aclararlos antes de que se complete la integración.
Comprensión de la API de códigos de barras de Cloudmersive
Cloudmersive ofrece una colección de API REST que abarcan la conversión de documentos, el reconocimiento óptico de caracteres (OCR), el procesamiento de imágenes y las operaciones con códigos de barras. La funcionalidad de código de barras es solo una parte de una cartera de API más amplia. Para los desarrolladores .NET , Inmersivo en las nubes proporciona un paquete cliente NuGet que encapsula sus puntos finales REST:
// Cloudmersive: HTTP client, per-request billing, data leaves your network
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();
// Each call = HTTPS request to Inmersivo en las nubes servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
// Cloudmersive: HTTP client, per-request billing, data leaves your network
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.Barcode.Client;
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY");
var apiInstance = new GenerateBarcodeApi();
// Each call = HTTPS request to Inmersivo en las nubes servers
byte[] result = apiInstance.GenerateBarcodeQRCode("https://example.com");
Imports Cloudmersive.APIClient.NETCore.Barcode.Api
Imports Cloudmersive.APIClient.NETCore.Barcode.Client
Configuration.Default.ApiKey.Add("Apikey", "YOUR-CLOUDMERSIVE-API-KEY")
Dim apiInstance As New GenerateBarcodeApi()
' Each call = HTTPS request to Inmersivo en las nubes servers
Dim result As Byte() = apiInstance.GenerateBarcodeQRCode("https://example.com")
Lo importante que hay que entender de este código es lo que hace realmente: envía una solicitud HTTPS a la infraestructura de Cloudmersive, espera una respuesta y devuelve el resultado. Cada línea de trabajo de códigos de barras en una integración de Inmersivo en las nubes sigue este patrón. No hay procesamiento local. No existe una ruta sin conexión. Cada operación depende de una conexión a internet activa y de un servidor Inmersivo en las nubes disponible.
El patrón de cliente HTTP
El SDK .NET de Inmersivo en las nubes es un cliente API generado automáticamente. Debajo, es un HttpClient haciendo llamadas REST. Las implicaciones se derivan en cascada de ese hecho:
- La latencia de la red es inevitable y no trivial (100–500 ms por llamada).
- Tus datos viajan hacia y desde servidores externos en cada operación.
- Los límites de velocidad se aplican en el nivel de API.
- Las claves API caducan y deben rotarse.
- Las interrupciones de Inmersivo en las nubes detienen por completo el procesamiento de códigos de barras.
- La robustez en producción requiere lógica de reintento, manejo de tiempos de espera y disyuntores.
En el caso del escaneo de códigos de barras en un flujo de procesamiento de documentos, donde se pueden procesar cientos de documentos por hora, estas no son preocupaciones teóricas.
Costo a escala
Cloudmersive utiliza un modelo de precios por solicitud. El coste exacto por solicitud depende de su nivel de suscripción, pero el modelo fundamental es el mismo en todos los niveles: cada operación de código de barras consume una solicitud de su cuota mensual.
Los cálculos para volúmenes de producción comunes:
| Volumen diario | Volumen mensual | Costo anual (estimado) | IronBarcode |
|---|---|---|---|
| 100/día | ~3.000/mes | ~$240/año | 749 $ una sola vez |
| 1.000/día | ~30.000/mes | ~$1.200/año | 749 $ una sola vez |
| 10.000/día | ~300.000/mes | ~$3.650/año | 749 $ una sola vez |
| 50.000/día | ~1.500.000/mes | ~$18.000+/año | 749 $ una sola vez |
| 100.000/día | ~3.000.000/mes | ~$36.500/año | 749 $ una sola vez |
La licencia perpetua de IronBarcode , con un precio de 749 dólares (Lite, para un solo desarrollador), cubre un número ilimitado de operaciones con códigos de barras. No se cobra ninguna tarifa por solicitud, independientemente del volumen. Un equipo que procesa 10.000 códigos de barras al día recupera el coste de la licencia en menos de diez días, en comparación con lo que pagaría anualmente a Cloudmersive.
Para un equipo de 3 desarrolladores, la licencia Plus , con un precio de 1499 dólares por pago único, se compara con los 3650 dólares anuales para 10 000 códigos de barras diarios. La licencia de IronBarcode se amortiza con los ahorros que se generan en Inmersivo en las nubes durante los cinco meses que se utilizan.
El acantilado de escalada
El modelo de precios por solicitud crea un problema específico a medida que aumenta el uso: el coste aumenta linealmente con el volumen. Si su flujo de procesamiento de documentos aumenta de 2.000 a 20.000 documentos al mes, su factura de Inmersivo en las nubes se multiplica por diez. Sus costes de ingeniería no aumentan —el mismo código procesa más documentos—, pero su factura de API sí.
IronBarcode no tiene esta propiedad. Procesar diez veces más códigos de barras no supone ningún coste adicional.
Impacto de la latencia
Cada operación de código de barras de Inmersivo en las nubes implica:
- Serialización de la solicitud (bytes de imagen o datos de código de barras)
- Establecer o reutilizar una conexión HTTPS
- Transmisión de los datos a los servidores de Cloudmersive
- Esperando el procesamiento del servidor
- Recibir la respuesta
- Deserialización del resultado
La latencia medida para las operaciones de códigos de barras de Inmersivo en las nubes suele ser de 100 a 500 ms por llamada, dependiendo de la carga del servidor, la proximidad geográfica y el tamaño de la imagen. A 250 ms por llamada:
| Volumen | Gastos generales totales de la red |
|---|---|
| 10 códigos de barras | 2,5 segundos |
| 100 códigos de barras | 25 segundos |
| 1.000 códigos de barras | 4,2 minutos |
| 10.000 códigos de barras | 41,7 minutos |
| 100.000 códigos de barras | ~7 horas |
Para los puntos finales orientados al usuario —un formulario web donde un usuario sube una imagen y espera un resultado— una latencia de 250 ms en un único escaneo de código de barras puede ser aceptable. En las tareas de procesamiento de documentos en segundo plano, la latencia acumulada se convierte en el coste dominante del flujo de trabajo.
El procesamiento local de IronBarcode tarda entre 10 y 50 ms por código de barras en un hardware típico. Con 10.000 códigos de barras, eso supone aproximadamente 8 minutos en total, frente a los 41 minutos de sobrecarga de red que supone el modelo Cloudmersive.
Latencia en ASP.NET Core
Para los puntos finales de la API web que deben cumplir con los acuerdos de nivel de servicio (SLA) de tiempo de respuesta, la latencia de Inmersivo en las nubes es un valor mínimo fijo. Un punto final que lee un código de barras y devuelve el valor no puede responder en menos de 100 ms, independientemente del hardware del servidor, porque el tiempo mínimo de ida y vuelta a una API externa está determinado por la física de la red.
IronBarcode se procesa localmente. El nivel mínimo de latencia viene determinado por el hardware y la complejidad de la imagen.
Soberanía de datos
Cada operación de escaneo de códigos de barras de Inmersivo en las nubes transmite datos a los servidores de Cloudmersive. En el caso de la lectura de códigos de barras, esto significa que sus imágenes, que potencialmente contienen identificadores de pacientes, números de cuentas financieras, direcciones de envío, identificaciones de empleados o datos de inventario confidenciales, salen de su red.
Las implicaciones en materia de cumplimiento normativo dependen de su entorno regulatorio:
| Regulación | Modelo Inmersivo en las nubes | IronBarcode |
|---|---|---|
| HIPAA | La información de salud protegida (PHI) en imágenes de códigos de barras requiere BAA con Cloudmersive; los datos salen de la red. | Todo el procesamiento es local; no se requiere BAA. |
| RGPD | Datos personales transmitidos a servidores de EE. UU.; evaluación de idoneidad requerida | No se transmiten datos: RGPD simplificado |
| ITAR | Los datos técnicos relacionados con la defensa no pueden transmitirse a servicios externos. | Totalmente local: diseño que cumple con la normativa ITAR. |
| CMMC | La información no clasificada controlada no puede atravesar redes externas. | No se permiten llamadas a redes externas. |
| FedRAMP | Los datos del gobierno de EE. UU. requieren servicios en la nube autorizados por FedRAMP. | No aplica: procesamiento local |
| PCI DSS | Los datos del titular de la tarjeta en códigos de barras requieren un tratamiento específico para su transmisión externa. | Los datos nunca salen de su entorno |
| Redes aisladas | Imposible: requiere conexión a internet. | Soporte completo: funciona sin acceso a la red. |
| Política de datos internos | Muchas organizaciones prohíben el envío de datos operativos a API de terceros. | No se permite la transmisión a terceros. |
Para cargas de trabajo en los sectores de salud, defensa, servicios financieros o gobierno, el modelo de nube de Inmersivo en las nubes suele descartarlo incluso antes de evaluar sus características o costos. El hecho de que los datos salgan de su red es determinante.
IronBarcode procesa todo localmente. Las imágenes de los códigos de barras nunca salen del equipo anfitrión. No hay transmisión de datos de ningún tipo.
Fiabilidad
Cloudmersive es una dependencia externa. La fiabilidad del procesamiento de códigos de barras de su aplicación está limitada por el tiempo de actividad de Cloudmersive.
¿Qué sucede durante un apagón?
Cuando Inmersivo en las nubes sufre una interrupción del servicio:
- Las operaciones de lectura de códigos de barras fallan o se agota el tiempo de espera.
- Las solicitudes de generación de códigos de barras devuelven errores.
- Se detienen los procesos de procesamiento de documentos.
- Cualquier lógica de reintento que hayas implementado comienza a consumir recursos computacionales mientras espera la recuperación.
Si el procesamiento de códigos de barras se encuentra en la ruta crítica (un sistema de recepción de pedidos, un flujo de trabajo de recepción, un formulario de registro de pacientes), una interrupción de Inmersivo en las nubes representa una interrupción en su aplicación.
Limitación de velocidad
Cloudmersive impone límites de solicitudes simultáneas en cada nivel de precios. En los niveles inferiores, este límite es de tan solo 1 solicitud simultánea, lo que significa que el procesamiento paralelo de documentos se serializa mediante la API. Si superas tu cuota mensual, las operaciones fallarán o quedarán en cola indefinidamente.
El código de producción que utiliza Inmersivo en las nubes debe manejar lo siguiente:
// Production Inmersivo en las nubes code requires significant infrastructure
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.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
{
// Track quota consumption
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)
{
// Rate limited — exponential backoff
if (attempt < maxRetries)
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
else
throw;
}
catch (Exception) when (attempt < maxRetries)
{
// Network error — retry
await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
}
}
throw new InvalidOperationException("All retry attempts failed");
}
}
// Production Inmersivo en las nubes code requires significant infrastructure
using Cloudmersive.APIClient.NETCore.Barcode.Api;
using Cloudmersive.APIClient.NETCore.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
{
// Track quota consumption
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)
{
// Rate limited — exponential backoff
if (attempt < maxRetries)
await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
else
throw;
}
catch (Exception) when (attempt < maxRetries)
{
// Network error — retry
await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt));
}
}
throw new InvalidOperationException("All retry attempts failed");
}
}
Imports Cloudmersive.APIClient.NETCore.Barcode.Api
Imports Cloudmersive.APIClient.NETCore.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
' Track quota consumption
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
' Rate limited — exponential backoff
If attempt < maxRetries Then
Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
Else
Throw
End If
Catch ex As Exception When attempt < maxRetries
' Network error — retry
Await Task.Delay(TimeSpan.FromMilliseconds(500 * attempt))
End Try
Next
Throw New InvalidOperationException("All retry attempts failed")
End Function
End Class
IronBarcode no requiere nada de esto. No hay límites de velocidad, ni claves API, ni infraestructura de reintentos, ni seguimiento de cuotas:
// IronBarcode: local, instant, no cost per call
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Read — no network call
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
// IronBarcode: local, instant, no cost per call
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-KEY";
// Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode)
.SaveAsPng("qr.png");
// Read — no network call
var result = BarcodeReader.Read("barcode.png").First();
Console.WriteLine(result.Value);
Imports IronBarCode
' IronBarcode: local, instant, no cost per call
' NuGet: dotnet add package IronBarcode
IronBarCode.License.LicenseKey = "YOUR-KEY"
' Generate — no network call
BarcodeWriter.CreateBarcode("https://example.com", BarcodeEncoding.QRCode) _
.SaveAsPng("qr.png")
' Read — no network call
Dim result = BarcodeReader.Read("barcode.png").First()
Console.WriteLine(result.Value)
Sin lógica de reintento. Sin límite de velocidad de procesamiento. No se gestionan las excepciones HTTP. Sin gestión de cuotas.
Entendiendo IronBarcode
IronBarcode es una biblioteca nativa de .NET que procesa códigos de barras completamente en la máquina anfitriona. Admite la lectura y generación de más de 50 formatos de códigos de barras, procesa archivos PDF de forma nativa y se ejecuta en todas las plataformas .NET , desde .NET Framework 4.6.2 hasta .NET 9.
Características clave:
- Procesamiento totalmente local: No se realizan llamadas a la red durante ninguna operación de código de barras.
- Sin coste por solicitud: Una licencia cubre operaciones ilimitadas con códigos de barras.
- Sin límites de velocidad: procese tantos códigos de barras como admita su hardware.
- Sin dependencias externas en tiempo de ejecución: No se requiere conexión a internet.
- Compatibilidad nativa con PDF: Lea códigos de barras de archivos PDF sin extraer primero las imágenes.
- Lectura y escritura completas: Genera códigos de barras en todos los formatos principales, lee imágenes, archivos PDF y flujos de datos.
// NuGet: dotnet add package IronBarcode
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-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-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-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)
Comparación de características
| Característica | API de códigos de barras de Inmersivo en las nubes | IronBarcode |
|---|---|---|
| Lugar de procesamiento | Servidores Inmersivo en las nubes | Local: solo tu máquina |
| Se requiere Internet | Sí, cada operación | No |
| Transmisión de datos | Todas las imágenes/datos se envían a Cloudmersive. | Ninguno |
| Latencia por operación | 100–500 ms (red) | 10–50 ms (local) |
| Modelo de costes | Cuota mensual por solicitud | Licencia perpetua única |
| Coste de 10.000 códigos de barras al día | ~$3.650/año | $749 una vez |
| Límites de tarifa | Sí, concurrente y mensual. | Ninguno |
| Sin conexión / Aislado de la red | No es posible | Soporte completo |
| HIPAA | Requiere BAA; datos deja red | Solo para residentes locales; no se requiere BAA. |
| RGPD | Datos transferidos a servidores de EE. UU. | No hay transferencia de datos |
| ITAR / CMMC | Transmisión externa prohibida | Conforme por diseño |
| Impacto de la interrupción | Su procesamiento se detiene | Sin dependencias externas |
| Generación de códigos de barras | Sí | Sí |
| Lectura de códigos de barras | Sí | Sí |
| Compatibilidad nativa con PDF | No, extraiga las imágenes por separado. | Sí, lectura directa de PDF |
| Detección de múltiples códigos de barras | Limitado | Sí - ExpectMultipleBarcodes = true |
| Recuperación de códigos de barras dañados | Básico | ML-powered, ReadingSpeed.ExtremeDetail |
| Formatos admitidos | Formatos comunes | Más de 50 formatos |
| Reintentos/Gestión de errores | Requerido en el código de producción | No es necesario |
| Compatibilidad con .NET Framework | Solo .NET Core | .NET Framework 4.6.2+ hasta .NET 9 |
| Docker / Linux | A través del cliente HTTP | Nativo |
| Funciones Azure | A través del cliente HTTP | Nativo |
Referencia de mapeo de API
| Inmersivo en las nubes | IronBarcode |
|---|---|
Configuration.Default.ApiKey.Add("Apikey", "key") |
IronBarCode.License.LicenseKey = "key" |
new GenerateBarcodeApi() |
Estático: no se necesita instancia |
new BarcodeScanApi() |
Estático: no se necesita instancia |
apiInstance.GenerateBarcodeQRCode(value) |
BarcodeWriter.CreateBarcode(value, BarcodeEncoding.QRCode).ToPngBinaryData() |
apiInstance.GenerateBarcodeCode128By(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.Type |
result.Format |
result.Successful == true |
La colección de resultados no está vacía. |
| HTTPS a servidores Inmersivo en las nubes | Procesamiento local: sin red. |
| latencia de 100 a 500 ms | 10–50 ms local |
| Consumo de cuota mensual | Ilimitado: sin cuota |
| Se requiere rotación de clave API | Clave de licencia única |
| Se requiere lógica de reintento | No es necesario |
Cuando los equipos cambian
El detonante para cambiar de Inmersivo en las nubes a IronBarcode es casi siempre una de estas cuatro situaciones:
Requisito de cumplimiento: Una revisión de seguridad, un contrato con un cliente o una auditoría regulatoria identifican que las imágenes de códigos de barras que contienen datos confidenciales están saliendo de la red. El cumplimiento de HIPAA, GDPR o ITAR requiere el procesamiento local. La integración con Inmersivo en las nubes debe reemplazarse independientemente del costo o la conveniencia.
Sorpresa en los costes a gran escala: El proyecto comienza con un volumen bajo, donde los niveles gratuitos o de bajo coste de Inmersivo en las nubes cubren el uso. A medida que la aplicación gana usuarios o crece el flujo de procesamiento de documentos, la factura mensual aumenta proporcionalmente. En algún momento —normalmente entre 100 y 200 dólares al mes— el equipo calcula el punto de equilibrio frente a la licencia perpetua de IronBarcode y decide migrar.
Entorno aislado: La aplicación debe ejecutarse en un entorno sin acceso a Internet, como una planta de producción, una instalación gubernamental o un centro sanitario con restricciones de red. Inmersivo en las nubes es imposible en estos entornos. IronBarcode funciona sin conexión a la red.
Latencia en un SLA: Un acuerdo de nivel de servicio requiere tiempos de respuesta que, debido a la sobrecarga de la red de Cloudmersive, resulta imposible garantizar. El procesamiento local con IronBarcode permite que las operaciones de códigos de barras se ajusten al nivel de servicio establecido en el acuerdo.
Ejemplo de canalización de procesamiento de documentos
Un escenario Enterprise realista: un equipo de cuentas por pagar procesa 2.000 facturas al día. Cada factura es un archivo PDF con uno o más códigos de barras para el número de pedido, el código del proveedor y las referencias de los artículos.
Enfoque inmersivo en la nube:
- 2000 facturas × 3 códigos de barras de promedio = 6000 llamadas a la API por día
- A 250 ms por llamada: 25 minutos de tiempo de espera en la red por día.
- Mensual: ~180.000 solicitudes → nivel de suscripción significativo
- Coste anual: aproximadamente entre 2.000 y 4.000 dólares.
- Riesgo: El procesamiento se detiene si Inmersivo en las nubes no está disponible.
- Cumplimiento: Las facturas de proveedores pueden contener números de cuenta transmitidos externamente.
Enfoque de IronBarcode :
using IronBarCode;
IronBarCode.License.LicenseKey = "YOUR-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-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-KEY"
Dim options As New BarcodeReaderOptions With {
.Speed = ReadingSpeed.Balanced,
.ExpectMultipleBarcodes = True
}
Dim invoicePaths As String() = Directory.GetFiles("invoices", "*.pdf")
For Each invoicePath As String 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
- 2000 facturas procesadas localmente en minutos, no en 25 minutos de sobrecarga de red.
- Coste anual: 749 dólares (pago único, por desarrollador)
- Riesgo: Sin dependencia externa
- Cumplimiento: Los datos de facturación nunca salen de la red.
Conclusión
La API de códigos de barras de Inmersivo en las nubes es un servicio REST en la nube. Su precio se ajusta según su uso. Su latencia está determinada por Internet. Su disponibilidad depende de la infraestructura de Cloudmersive. Sus datos se transmiten a servidores externos en cada operación de escaneo de códigos de barras.
Se trata de propiedades estructurales del modelo de API en la nube, no de quejas específicas sobre Cloudmersive. El modelo funciona bien para la creación de prototipos de bajo volumen o para aplicaciones en las que ninguna de esas propiedades importa. Se vuelve costoso, lento y potencialmente incumplidor a medida que aumenta el volumen y se endurecen los requisitos.
La licencia única de IronBarcode, con un precio de 749 dólares, cubre operaciones ilimitadas con códigos de barras, se ejecuta localmente sin transmisión de datos, procesa archivos PDF de forma nativa y no requiere la infraestructura de reintentos que exigen las integraciones de Inmersivo en las nubes en entornos de producción. Con 10.000 códigos de barras al día, los cálculos dan la razón a IronBarcode en las dos primeras semanas.
Preguntas Frecuentes
¿Qué es Cloudmersive BarCode API?
Cloudmersive Barcode API es una biblioteca de códigos de barras .NET para generar y leer códigos de barras en aplicaciones C#. Es una de las varias alternativas que los desarrolladores evalúan cuando seleccionan una solución de código de barras para proyectos .NET.
¿Cuáles son las principales diferencias entre Cloudmersive Barcode API e IronBarcode?
IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que Cloudmersive Barcode API suele requerir la creación y configuración de instancias antes de su uso. IronBarcode también ofrece compatibilidad nativa con PDF, detección automática de formatos y licencia de clave única en todos los entornos.
¿Es IronBarcode más fácil de licenciar que Cloudmersive Barcode API?
IronBarcode utiliza una única clave de licencia que cubre tanto el desarrollo como los despliegues de producción. Esto simplifica las canalizaciones de CI/CD y las configuraciones de Docker en comparación con los sistemas de licencias que separan las claves de SDK de las claves de tiempo de ejecución.
¿Es IronBarcode compatible con todos los formatos de código de barras que admite Cloudmersive Barcode API?
IronBarcode es compatible con más de 30 simbologías de códigos de barras, incluidos QR Code, Code 128, Code 39, DataMatrix, PDF417, Aztec, EAN-13, UPC-A, GS1 y muchos más. La autodetección de formatos significa que no se requiere una enumeración explícita de formatos.
¿Es IronBarcode compatible con la lectura nativa de códigos de barras en PDF?
Sí. IronBarcode lee códigos de barras directamente desde archivos PDF utilizando BarcodeReader.Read("document.pdf") sin necesidad de una biblioteca de renderizado de PDF independiente. Los resultados por página incluyen el número de página, el formato del código de barras, el valor y la puntuación de confianza.
¿Cómo gestiona IronBarcode el procesamiento por lotes en comparación con Cloudmersive Barcode API?
Los métodos estáticos de IronBarcode no tienen estado y son naturalmente seguros para subprocesos, lo que permite el uso directo de Parallel.ForEach sin gestión de instancias por subproceso. No hay límite de rendimiento en ningún nivel de precios.
¿Qué versiones de .NET admite IronBarcode ?
IronBarcode es compatible con .NET Framework 4.6.2+, .NET Core 3.1 y .NET 5, 6, 7, 8 y 9 en un único paquete NuGet. Las plataformas de destino incluyen Windows x64/x86, Linux x64 y macOS x64/ARM.
¿Cómo instalo IronBarcode en un proyecto .NET?
Instale IronBarcode a través de NuGet: ejecute 'Install-Package IronBarCode' en la consola del gestor de paquetes, o 'dotnet add package IronBarCode' en la CLI. No se necesitan instaladores SDK ni archivos de ejecución adicionales.
¿Puedo evaluar IronBarcode antes de comprarlo, a diferencia de Cloudmersive?
Sí. El modo de prueba de IronBarcode devuelve los valores completos de los códigos de barras descodificados; sólo las imágenes de salida generadas reciben una marca de agua. Puede comprobar la precisión de la lectura en sus propios documentos antes de comprometerse con la compra.
¿Cuál es la diferencia de precio entre Cloudmersive Barcode API e IronBarcode?
IronBarcode cuesta a partir de 749 dólares por una licencia perpetua de desarrollador único que cubre el desarrollo y la producción. Los detalles de precios y opciones de volumen están disponibles en la página de licencias de IronBarcode. No se requiere una licencia de ejecución por separado.
¿Es fácil migrar de Cloudmersive Barcode API a IronBarcode?
La migración de Cloudmersive Barcode API a IronBarcode implica principalmente la sustitución de las llamadas a la API basadas en instancias por los métodos estáticos de IronBarcode, la eliminación de la repetición de licencias y la actualización de los nombres de las propiedades de los resultados. La mayoría de las migraciones implican reducir código en lugar de añadirlo.
¿IronBarcode genera códigos QR con logotipos?
Sí. QRCodeWriter.CreateQrCode().AddBrandLogo("logo.png") incrusta una imagen de marca en un código QR de forma nativa con corrección de errores configurable. Los códigos QR coloreados también son compatibles con ChangeBarCodeColor().

