IRONSOFTWAREHOME
COMPARAR CON OTROS COMPONENTES

Barkoder SDK vs IronBarcode: Generador de Códigos de Barras para VeriFactu y TicketBAI en España

Curtis Chau
Curtis Chau
Updated: 26 de abril de 2026

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. Sin embargo, para empresas españolas que deben generar códigos QR para facturas VeriFactu (Real Decreto 1007/2023) o TicketBAI en el País Vasco, y que operan en centros de datos con acceso a Internet restringido, la validación de licencias en línea de Dynamsoft se convierte en un bloqueo crítico antes de que se haya generado un solo QR. 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);

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;
}

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}");
}

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}");
}

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);

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";

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:

EscenarioLector de códigos de barras DynamsoftIronBarcode
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 disponibleSolo .NET
Procesamiento de archivos del lado del servidorFunciona, pero requiere soluciones alternativas.Caso de uso principal
Lectura de códigos de barras PDFRequiere un renderizador de PDF externo.Soporte nativo
Implementación aislada de la redRequiere UUID del dispositivo + compatibilidad con DynamsoftFuncionamiento inmediato
Docker / contenedores efímerosGestión de UUID por contenedorVariable de entorno única
Licencia sin conexiónArchivo específico del dispositivo del soporte de DynamsoftClave de licencia estándar
API de ASP.NET CoreObras (texto estándar de licencia adicional)Funciona de forma limpia
Funciones AzureSe requiere una política de red para license.dynamsoft.comNo requiere conexión a internet.
Generación de BarCodesNo, solo lecturaSí, generación y lectura
Generación de código QRNoSí — 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,
    MaxParallelThreads = 4
};
var multiResults = BarcodeReader.Read("multi-barcode-sheet.png", options);

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();

Comparación de características

CaracterísticaLector de códigos de barras DynamsoftIronBarcode
Lectura de BarCodesSí, optimizado para cámara.Sí, optimizado para archivos y documentos.
Generación de BarCodesNo
Generación de código QRNoSí — QRCodeWriter
Compatibilidad nativa con PDFNo, requiere un renderizador externo.Sí — BarcodeReader.Read(pdf)
Validación de licenciaEn línea (servidor de licencias)Local
Aislado de la red / sin conexiónSe requiere el UUID del dispositivo y soporte de Dynamsoft.Clave estándar, funciona sin conexión.
Docker / contenedorGestión de UUID por instancia de contenedorVariable de entorno única
Funciones AzureSe requiere una política de red de salidaNo requiere conexión a internet.
AWS LambdaSe requiere una política de red de salidaNo requiere conexión a internet.
SDK móvilDisponible para iOS y Android.Solo .NET
Cámara en tiempo real (30 fps)Objetivo de diseño principalNo está diseñado para esto
Código 128
Código QRSí (leyendo)Sí (lectura y generación)
Matriz de datos
PDF417
azteca
EAN / UPC
Gestión de instanciasnuevo lector de códigos de barras() + Dispose()Estático: ninguna instancia
Lectura de múltiples códigos de barrasCantidad esperada de códigos de barrasExpectMultipleBarcodes = true
Control de velocidad de lecturaTiempo de espera + Nivel de desenfoqueEnumeración de velocidad de lectura
Lectura paralelaEnhebrado manualNúmero máximo de subprocesos paralelos
Modelo de preciosSuscripciónPerpetuo desde $999
Compatibilidad con .NET.NET Standard, .NET 5+.NET 4.6.2 a .NET 9
PlataformasWindows, Linux, macOSWindows, 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 DynamsoftIronBarcode
BarcodeReader.InitLicense(key, out errorMsg)IronBarCode.License.LicenseKey = "key"
errorCode != (int)EnumErrorCode.DBR_OK comprobarNo 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[].BarcodeTextresult.Value
TextResult[].BarcodeFormatresult.Format
PublicRuntimeSettings vía GetRuntimeSettings()new BarcodeReaderOptions { ... }
settings.Timeout = 100Speed = ReadingSpeed.Balanced
settings.ExpectedBarcodesCount = 1ExpectMultipleBarcodes = false (por defecto)
reader.UpdateRuntimeSettings(settings)Pasado como parámetro a Read()
Biblioteca PDF externa + bucle de renderizado de páginaBarcodeReader.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.

Cumplimiento normativo en España: generador de códigos de barras y QR

La normativa española exige generar códigos QR y DataMatrix en el servidor. Las restricciones de licencia en línea de Dynamsoft y su arquitectura orientada a cámara crean obstáculos específicos para estos requisitos.

AEAT QR y VeriFactu (Real Decreto 1007/2023) — entornos aislados

La Agencia Estatal de Administración Tributaria (AEAT) exige un código QR en cada factura VeriFactu con un payload que enlaza a sede.agenciatributaria.gob.es. Los sistemas de facturación en empresas medianas y grandes suelen operar en redes internas con salida a Internet restringida. Con Dynamsoft, BarcodeReader.InitLicense hace una llamada de red al servidor de licencias antes de que se pueda generar o leer ningún código de barras. En un entorno aislado, esta llamada falla. IronBarcode valida la licencia completamente en local, sin dependencias de red.

TicketBAI — Bizkaia, Gipuzkoa y Araba

TicketBAI requiere un QR en cada factura del País Vasco. El sistema de emisión de facturas TicketBAI suele ser un servicio backend en el ERP de la empresa, no una aplicación móvil. La generación del QR con payload XAdES ocurre en el servidor. Dynamsoft no tiene API de generación QR —su foco es la lectura, no la generación.

SEVeM — Farmacia (AEMPS) y SILICIE — Vitivinícola

El Sistema Español de Verificación de Medicamentos (SEVeM), bajo la Agencia Española de Medicamentos y Productos Sanitarios (AEMPS), requiere DataMatrix en envases de medicamentos. Dynamsoft puede leer DataMatrix pero su arquitectura de validación en línea supone el mismo problema en entornos de producción aislados. Para el sistema SILICIE de la Agencia Tributaria, los flujos de trabajo de etiquetado de bodegas necesitan tanto generación como lectura local.

Ejemplo práctico: QR VeriFactu sin validación de licencia en línea

// IronBarcode — validación de licencia local, sin llamadas de red (AEAT España)
// dotnet add package IronBarcode
using IronBarCode;

// Funciona en entornos aislados (VPC, centros de datos sin salida a Internet)
IronBarCode.License.LicenseKey = "IRONBARCODE-MYKEY-...";
// Sin BarcodeReader.InitLicense("...") que haga llamadas a servidores externos

string payloadVeriFactu = "https://sede.agenciatributaria.gob.es/Sede/factura?" +
    "nif=B12345678&fecha=2026-05-29&importe=1210.00&huella=A3F9B2C1D4E5";

var qr = QRCodeWriter.CreateQrCode(payloadVeriFactu, 400,
    QRCodeWriter.QrErrorCorrectionLevel.Medium);
qr.SaveAsPng("factura-verifactu.png");

// Dynamsoft — BarcodeReader.InitLicense("DLS...") hace llamada de red
// En entorno aislado: falla antes de que se genere ningún código de barras

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.

Para los equipos en España que deben cumplir con VeriFactu (QR AEAT, Real Decreto 1007/2023), TicketBAI en Bizkaia, Gipuzkoa y Araba, SEVeM para farmacia (AEMPS) o SILICIE para el sector vitivinícola, IronBarcode opera completamente en local sin dependencias de red. Usted puede iniciar su prueba gratuita de 30 días sin necesidad de clave de licencia.

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta