Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

Lector de códigos de barras Dynamsoft vs IronBarcode: Comparación de bibliotecas de códigos de barras C#

El lector de códigos de barras Dynamsoft es realmente excelente para aquello para lo que fue diseñado: leer códigos de barras desde una transmisión de cámara en directo a 30 fotogramas por segundo. Los algoritmos son rápidos, la compatibilidad con simbología es amplia y el SDK móvil que lo integra en iOS y Android es una de las mejores opciones en ese ámbito. Si su producto es una aplicación de escaneo de almacén en la que un trabajador apunta su teléfono a la etiqueta de un palé y espera un reconocimiento en menos de 100 ms, Dynamsoft es una opción fiable.

Si sus códigos de barras están en archivos PDF en un servidor que no puede llegar a Internet, la biblioteca no se ajusta al caso de uso - y la validación de la licencia se lo recordará en cada inicio. BarcodeReader.InitLicense hace una llamada de red al servidor de licencias de Dynamsoft. En un centro de datos aislado físicamente, una VPC aislada o cualquier entorno donde el acceso saliente a Internet esté restringido, esa llamada falla antes de que se haya decodificado un solo código de barras. La alternativa sin conexión —obtener un archivo de licencia específico para el dispositivo vinculado a un UUID del soporte técnico de Dynamsoft— funciona, pero añade una sobrecarga operativa que la mayoría de los flujos de trabajo de procesamiento de documentos no habían previsto.

Esta comparación se centra en la adecuación al caso de uso, no en la calidad de la biblioteca. Dynamsoft creó una biblioteca centrada en la cámara y lo hizo muy bien. La cuestión es si las premisas que priorizan la cámara se traducen en un flujo de trabajo de procesamiento de documentos del lado del servidor.

Comprensión del lector de códigos de barras Dynamsoft

La arquitectura de Dynamsoft refleja su origen en el mundo de las cámaras. La secuencia de inicio requiere una validación de licencia en línea, el modelo de configuración incluye valores de tiempo de espera optimizados para el procesamiento de fotogramas en tiempo real y la API expone conceptos como DeblurLevel que existen específicamente para las condiciones de enfoque variable y desenfoque de movimiento de una cámara portátil:

// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;

// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
    throw new InvalidOperationException($"License validation failed: {errorMsg}");

var reader = new BarcodeReader();

// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5;          // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100;             // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
// Dynamsoft: license server call required at startup
using Dynamsoft.DBR;

// This call contacts Dynamsoft's license server — fails in air-gapped environments
int errorCode = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out string errorMsg);
if (errorCode != (int)EnumErrorCode.DBR_OK)
    throw new InvalidOperationException($"License validation failed: {errorMsg}");

var reader = new BarcodeReader();

// Settings tuned for camera frame processing
var settings = reader.GetRuntimeSettings();
settings.DeblurLevel = 5;          // compensates for camera motion blur
settings.ExpectedBarcodesCount = 1; // camera focus: one barcode at a time
settings.Timeout = 100;             // 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings);
Imports Dynamsoft.DBR

' Dynamsoft: license server call required at startup
' This call contacts Dynamsoft's license server — fails in air-gapped environments
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
    Throw New InvalidOperationException($"License validation failed: {errorMsg}")
End If

Dim reader As New BarcodeReader()

' Settings tuned for camera frame processing
Dim settings = reader.GetRuntimeSettings()
settings.DeblurLevel = 5          ' compensates for camera motion blur
settings.ExpectedBarcodesCount = 1 ' camera focus: one barcode at a time
settings.Timeout = 100             ' 100ms — optimized for 30fps video pipeline
reader.UpdateRuntimeSettings(settings)
$vbLabelText   $csharpLabel

Esta es una API bien diseñada para su propósito. La configuración Timeout = 100 tiene sentido cuando se procesan 30 fotogramas por segundo de una cámara y no se puede permitir gastar 500 ms en un solo fotograma. Para un servidor que procesa un PDF subido, un tiempo de espera de 100 ms es una limitación que no tiene ninguna utilidad y puede provocar fallos en la lectura de códigos de barras más densos.

El diseño basado en instancias - new BarcodeReader(), reader.Dispose()- sigue la semántica de sesión de cámara: se abre una sesión, se procesan tramas, se cierra la sesión. Para el procesamiento de archivos, este ciclo de vida añade código repetitivo sin ningún beneficio.

El problema del PDF

Dynamsoft Barcode Reader no tiene soporte nativo para PDF. Cuando la entrada es un archivo PDF, su código debe primero convertir cada página en una imagen y luego pasar esa imagen a Dynamsoft. Esto requiere una biblioteca de renderizado de PDF independiente (PdfiumViewer es de uso común), que agrega una dependencia de NuGet , una dependencia binaria nativa (pdfium.dll en Windows o libpdfium en Linux) y un bucle de renderizado alrededor de cada operación de PDF:

// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;

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

    using (var pdfDoc = PdfDocument.Load(pdfPath))
    {
        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 Dynamsoft
            TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
            foreach (var b in barcodes)
                results.Add(b.BarcodeText);
        }
    }

    return results;
}
// Dynamsoft PDF processing — requires PdfiumViewer (external dependency)
// dotnet add package PdfiumViewer
// dotnet add package PdfiumViewer.Native.x86_64.v8-xfa (platform-specific)
using PdfiumViewer;
using System.Drawing.Imaging;
using Dynamsoft.DBR;

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

    using (var pdfDoc = PdfDocument.Load(pdfPath))
    {
        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 Dynamsoft
            TextResult[] barcodes = reader.DecodeFileInMemory(imageBytes, "");
            foreach (var b in barcodes)
                results.Add(b.BarcodeText);
        }
    }

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

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

    Using pdfDoc = PdfDocument.Load(pdfPath)
        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 Dynamsoft
                    Dim barcodes As TextResult() = reader.DecodeFileInMemory(imageBytes, "")
                    For Each b In barcodes
                        results.Add(b.BarcodeText)
                    Next
                End Using
            End Using
        Next
    End Using

    Return results
End Function
$vbLabelText   $csharpLabel

Esto implica tres dependencias (Dynamsoft, PdfiumViewer y un binario nativo específico de la plataforma), un bucle de renderizado por página y un consumo de memoria considerable para documentos con muchas páginas.

IronBarcode lee directamente desde un archivo PDF:

// IronBarcode: PDF is native — no extra library, no render loop
// NuGet: dotnet add package IronBarcode
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 IronBarcode
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 IronBarcode
Dim results = BarcodeReader.Read("invoice.pdf")
For Each result In results
    Console.WriteLine($"{result.Format}: {result.Value}")
Next
$vbLabelText   $csharpLabel

Una llamada. No hay renderizador de PDF. Sin bucle por página. Sin binario nativo específico de la plataforma para la compatibilidad con PDF.

Complejidad de la licencia

La validación de licencias en línea es sencilla cuando el servidor tiene acceso a internet. Cuando esto no ocurre, o cuando las políticas de red requieren la inclusión explícita en la lista de permitidos de los hosts salientes, la superficie de fallo de validación aumenta:

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

' Dynamsoft: error code pattern required
Dim errorCode As Integer = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", errorMsg:=Nothing)
If errorCode <> CType(EnumErrorCode.DBR_OK, Integer) Then
    ' Handle: network timeout, license server unreachable, invalid key,
    ' expired key, device count exceeded, etc.
    Throw New InvalidOperationException($"Dynamsoft license failed [{errorCode}]: {errorMsg}")
End If
$vbLabelText   $csharpLabel

La concesión de licencias sin conexión con Dynamsoft requiere un flujo de trabajo independiente. Usted llama al BarcodeReader.OutputLicenseToString() para recuperar el UUID del dispositivo, envía ese UUID al soporte de Dynamsoft para recibir un archivo de licencia específico del dispositivo, luego activa usando InitLicenseFromLicenseContent:

// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
// Dynamsoft offline license — device UUID required
string uuid = BarcodeReader.OutputLicenseToString();
// Send uuid to Dynamsoft support → receive licenseContent string
int errorCode = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, out string errorMsg);
' Dynamsoft offline license — device UUID required
Dim uuid As String = BarcodeReader.OutputLicenseToString()
' Send uuid to Dynamsoft support → receive licenseContent string
Dim errorCode As Integer = BarcodeReader.InitLicenseFromLicenseContent("YOUR-LICENSE-KEY", licenseContent, uuid, errorMsg)
$vbLabelText   $csharpLabel

En un entorno Docker, donde los contenedores son efímeros y los UUID cambian en cada despliegue, esto genera un trabajo operativo constante. Cada contenedor que se inicie puede necesitar un nuevo UUID registrado con el soporte de Dynamsoft.

La activación de la licencia de IronBarcode es una asignación única que se evalúa localmente:

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

No hay código de error que comprobar. Sin dependencia de red. No se requiere registro por dispositivo. La misma línea funciona en una máquina de desarrollo, una canalización de CI/CD, un contenedor Docker y un servidor aislado de la red.

Casos de uso de la cámara frente a los archivos

En resumen, Dynamsoft e IronBarcode están optimizados para diferentes escenarios principales. La tabla que aparece a continuación describe esto claramente, en lugar de declarar que una biblioteca es universalmente mejor:

Escenario Lector de códigos de barras Dynamsoft IronBarcode
Transmisión de cámara en directo (30 fps) Excelente: optimizado para tiempo real. No es el caso de uso principal
SDK móvil (iOS/Android) SDK completo disponible Solo .NET
Procesamiento de archivos del lado del servidor Funciona, pero requiere soluciones alternativas. Caso de uso principal
Lectura de códigos de barras PDF Requiere un renderizador de PDF externo. Soporte nativo
Implementación aislada de la red Requiere UUID del dispositivo + compatibilidad con Dynamsoft Funcionamiento inmediato
Docker / contenedores efímeros Gestión de UUID por contenedor Variable de entorno única
Licencia sin conexión Archivo específico del dispositivo del soporte de Dynamsoft Clave de licencia estándar
API de ASP.NET Core Obras (texto estándar de licencia adicional) Funciona de forma limpia
Funciones Azure Se requiere una política de red para license.dynamsoft.com No requiere conexión a internet.
Generación de BarCodes No, solo lectura Sí, generación y lectura
Generación de código QR No Sí — QRCodeWriter

Entendiendo IronBarcode

IronBarcode es una biblioteca .NET para generar y leer códigos de barras. La API es estática: no hay instancias, ni llamadas de eliminación, ni ciclo de vida de sesión. La activación de la licencia es local. La compatibilidad con archivos PDF está integrada:

// NuGet: dotnet add package IronBarcode
using IronBarCode;

// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-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,
    Número máximo de subprocesos paralelos = 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
// NuGet: dotnet add package IronBarcode
using IronBarCode;

// License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-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,
    Número máximo de subprocesos paralelos = 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);
Imports IronBarCode

' License — local validation, no network call
IronBarCode.License.LicenseKey = "YOUR-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 As New BarcodeReaderOptions With {
    .Speed = ReadingSpeed.Balanced,
    .ExpectMultipleBarcodes = True,
    .MaxParallelThreads = 4
}
Dim multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options)
$vbLabelText   $csharpLabel

La generación es igualmente sencilla:

// 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

Comparación de características

Característica Lector de códigos de barras Dynamsoft IronBarcode
Lectura de BarCodes Sí, optimizado para cámara. Sí, optimizado para archivos y documentos.
Generación de BarCodes No
Generación de código QR No Sí — QRCodeWriter
Compatibilidad nativa con PDF No, requiere un renderizador externo. Sí — BarcodeReader.Read(pdf)
Validación de licencia En línea (servidor de licencias) Local
Aislado de la red / sin conexión Se requiere el UUID del dispositivo y soporte de Dynamsoft. Clave estándar, funciona sin conexión.
Docker / contenedor Gestión de UUID por instancia de contenedor Variable de entorno única
Funciones Azure Se requiere una política de red de salida No requiere conexión a internet.
AWS Lambda Se requiere una política de red de salida No requiere conexión a internet.
SDK móvil Disponible para iOS y Android. Solo .NET
Cámara en tiempo real (30 fps) Objetivo de diseño principal No está diseñado para esto
Código 128
Código QR Sí (leyendo) Sí (lectura y generación)
Matriz de datos
PDF417
azteca
EAN / UPC
Gestión de instancias nuevo lector de códigos de barras() + Dispose() Estático: ninguna instancia
Lectura de múltiples códigos de barras Cantidad esperada de códigos de barras ExpectMultipleBarcodes = true
Control de velocidad de lectura Tiempo de espera + Nivel de desenfoque Enumeración de velocidad de lectura
Lectura paralela Enhebrado manual Número máximo de subprocesos paralelos
Modelo de precios Suscripción Perpetuo desde $749
Compatibilidad con .NET .NET Standard, .NET 5+ .NET 4.6.2 a .NET 9
Plataformas Windows, Linux, macOS Windows, Linux, macOS, Docker, Azure, AWS Lambda

Referencia de mapeo de API

Para equipos que tienen código Dynamsoft y necesitan comprender cómo se traducen los conceptos:

Lector de códigos de barras Dynamsoft IronBarcode
BarcodeReader.InitLicense(key, out errorMsg) IronBarCode.License.LicenseKey = "key"
errorCode != (int)EnumErrorCode.DBR_OK comprobar No es necesario
BarcodeReader.OutputLicenseToString() (UUID) No es necesario
BarcodeReader.InitLicenseFromLicenseContent(content, uuid) No es necesario
new BarcodeReader() Estático: ninguna instancia
reader.Dispose() No es necesario
reader.DecodeFile(imagePath, "") BarcodeReader.Read(imagePath)
reader.DecodeFileInMemory(bytes, "") BarcodeReader.Read(imageBytes)
TextResult[].BarcodeText result.Value
TextResult[].BarcodeFormat result.Format
PublicRuntimeSettings vía GetRuntimeSettings() new BarcodeReaderOptions { ... }
settings.Timeout = 100 Speed = ReadingSpeed.Balanced
settings.ExpectedBarcodesCount = 1 ExpectMultipleBarcodes = false (por defecto)
reader.UpdateRuntimeSettings(settings) Pasado como parámetro a Read()
Biblioteca PDF externa + bucle de renderizado de página BarcodeReader.Read("doc.pdf")

Cuando los equipos cambian

Procesamiento de documentos en el servidor, no escaneo con cámara. El escenario de migración más común es el de un equipo que eligió Dynamsoft por su reputación, lo integró y luego descubrió que la API centrada en la cámara y la falta de compatibilidad con PDF dificultaban los flujos de trabajo de procesamiento de documentos. La lectura de códigos de barras desde archivos PDF cargados en una aplicación web es un caso de uso fundamental que requiere soluciones alternativas en Dynamsoft, pero que en IronBarcode se realiza con una sola llamada.

Entornos de red aislados o restringidos. Las instituciones financieras, los sistemas de salud y las implementaciones gubernamentales suelen prohibir las conexiones salientes a Internet desde los servidores de aplicaciones. La validación de licencias en línea de Dynamsoft falla en estos entornos. El flujo de trabajo UUID del dispositivo sin conexión es funcional, pero añade una sobrecarga en cuanto a la dependencia del soporte. Los equipos que trabajan en estos entornos suelen migrar a IronBarcode precisamente porque la validación de licencias no tiene ningún componente de red.

Contenedores efímeros de Docker y Kubernetes. Las implementaciones en contenedores, donde las instancias aumentan y disminuyen de tamaño con frecuencia, hacen que la gestión de licencias sin conexión basadas en dispositivos sea insostenible. Cada nuevo contenedor podría tener un UUID diferente dependiendo de la infraestructura. La clave de licencia de IronBarcode funciona como una variable de entorno estándar sin necesidad de registro por instancia.

Necesidad de generar datos además de leerlos. Dynamsoft es de solo lectura. Las aplicaciones que necesitan generar etiquetas de códigos de barras, imprimir códigos QR para productos o crear manifiestos de envío con códigos de barras integrados necesitan una segunda biblioteca. En esta situación, los equipos suelen consolidar sus sistemas en IronBarcode para evitar tener que gestionar dos dependencias de códigos de barras separadas.

Huella operativa simplificada. Al eliminar el servidor de licencias de Dynamsoft de la lista de dependencias externas accesibles, eliminar la biblioteca de renderizado de PDF y reemplazar la administración de instancias con llamadas estáticas, se reduce la cantidad de problemas que pueden surgir en producción.

Conclusión

Dynamsoft Barcode Reader es una biblioteca de alta calidad que se ajusta perfectamente a su caso de uso previsto: el escaneo de códigos de barras en tiempo real mediante cámara, especialmente en aplicaciones móviles. Los algoritmos están bien ajustados a las condiciones del escaneo manual: iluminación variable, desenfoque por movimiento y oclusión parcial. Si ese es su caso de uso, Dynamsoft es una buena opción.

Para el procesamiento de documentos del lado del servidor (lectura de códigos de barras de archivos PDF, generación de etiquetas de códigos de barras, ejecución en entornos aislados o implementación en contenedores Docker efímeros), la arquitectura de la biblioteca genera dificultades en cada paso. La validación de licencias en línea, la falta de compatibilidad con PDF, la configuración de tiempo de espera optimizada para cámaras y el flujo de trabajo sin conexión con UUID del dispositivo son consecuencias de su diseño para el uso con cámaras móviles. No son insectos; Son decisiones de diseño deliberadas para un contexto diferente.

IronBarcode está diseñado para el contexto del documento y del servidor. La validación de licencias locales, la lectura nativa de PDF, la API estática y la compatibilidad con la generación de archivos son características de primera clase, no soluciones alternativas. La decisión de migrar depende del entorno en el que se encuentren realmente sus códigos de barras.

Preguntas Frecuentes

¿Qué es Dynamsoft BarCode Reader?

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

IronBarcode utiliza una API estática y sin estado que no requiere gestión de instancias, mientras que Dynamsoft Barcode Reader 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 Dynamsoft Barcode Reader?

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

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 maneja IronBarcode el procesamiento por lotes en comparación con Dynamsoft Barcode Reader?

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

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

La migración de Dynamsoft Barcode Reader 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().

Jordi Bardia
Ingeniero de Software
Jordi es más competente en Python, C# y C++. Cuando no está aprovechando sus habilidades en Iron Software, está programando juegos. Compartiendo responsabilidades para pruebas de productos, desarrollo de productos e investigación, Jordi agrega un valor inmenso a la mejora continua del producto. La experiencia variada lo mantiene ...
Leer más

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame