IRONSOFTWAREHOME
VIDEOS

Migrando de ZXing.Net a IronBarcode

Curtis Chau
Curtis Chau
Updated: 1 de agosto de 2026

Esta guía abarca una migración completa de ZXing .NET a IronBarcode para aplicaciones .NET que leen y generan códigos de barras. Aborda la eliminación del paquete central de ZXing.Net y los paquetes de enlace, la eliminación de las soluciones alternativas de PdfiumViewer donde estén presentes, y la sustitución de cada instancia con estado BarcodeReader por la API estática de IronBarcode. Cada sección incluye código de antes y después, extraído de los patrones que se encuentran con mayor frecuencia en las integraciones de ZXing .NET .

¿Por qué migrar desde ZXing .NET?

ZXing .NET ha prestado un excelente servicio a la comunidad .NET durante más de una década como una biblioteca de códigos de barras gratuita basada en Apache 2.0. Sin embargo, varias limitaciones arquitectónicas se convierten en costes operativos a medida que las aplicaciones aumentan en escala o complejidad.

Propiedad de Seguridad del Hilo: el BarcodeReader de ZXing.Net es un objeto con estado. La propia documentación de la biblioteca indica que las instancias no deben compartirse entre hilos. En la práctica, esto significa que cada ruta de procesamiento concurrente —cada acción del controlador que maneja solicitudes simultáneas, cada tarea en un lote paralelo— debe asignar, configurar y descartar su propio lector. A medida que aumenta el volumen de solicitudes, este patrón de asignación produce una presión de memoria cuantificable. La alternativa ThreadLocal<BarcodeReader> reduce la frecuencia de asignación pero introduce su propia complejidad de eliminación. En ambos casos, la corrección bajo concurrencia es problema de quien realiza la llamada, no una garantía proporcionada por la biblioteca.

Riesgo de Especificación de Formato: ZXing.Net requiere que reader.Options.PossibleFormats esté poblado antes de cada operación de descodificación. Un código de barras en un formato que no esté presente en esa lista devuelve nulo — sin excepción, sin advertencia, sin indicación de que había un código de barras presente pero sin reconocer. Para aplicaciones que reciben documentos de socios externos, este comportamiento de omisión silenciosa es un riesgo de fiabilidad: un pedido mal despachado, un registro de check-in de pacientes perdido o una entrada de auditoría que nunca se escribe, todos pueden originarse a partir de una lista de formatos que se configuró para un requisito anterior y nunca se actualizó.

Limitación en el procesamiento de PDF: ZXing .NET solo lee mapas de bits. Cuando los documentos de origen son archivos PDF (facturas, manifiestos de envío, certificados de conformidad), quienes realizan las llamadas deben integrar una biblioteca de renderizado de PDF independiente (PdfiumViewer es la más común), implementar un bucle de enumeración de páginas, configurar el DPI, gestionar los archivos temporales y encargarse de la limpieza tanto en los casos de éxito como de error. Se trata de entre 30 y 50 líneas de código de infraestructura por integración, cuya única función es convertir lo que ZXing .NET no puede leer (archivos PDF) en lo que sí puede (mapas de bits). Esa infraestructura tiene sus propias dependencias, sus propios requisitos de implementación y sus propios modos de fallo.

Fragmentación de la vinculación entre plataformas: la capacidad de carga de imágenes de ZXing.Net está dividida entre paquetes de vinculación específicos de cada plataforma. El enlace de Windows utiliza System.Drawing.Bitmap; el enlace multiplataforma utiliza SixLabors.ImageSharp con un parámetro de tipo genérico diferente y una directiva using diferente. Un proyecto que comienza en Windows y luego se contenedora en Linux debe cambiar tanto sus referencias NuGet como su código de carga de imágenes. Existen dos rutas de código para la misma operación que aumentan la superficie de error y dificultan los cambios futuros en la capa de escaneo.

El problema fundamental

La ilustración más clara de la arquitectura ZXing .NET es la diferencia entre una llamada de un solo hilo y una concurrente. En ZXing .NET, el procesamiento concurrente requiere la creación de un objeto lector completo por cada operación paralela:

// ZXing.Net: full reader instantiation and configuration on every parallel task
Parallel.ForEach(files, file =>
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(file);
    var result = reader.Decode(bitmap);
    if (result != null)
        processed[file] = result.Text;
});

IronBarcode elimina el objeto por completo. La llamada estática es la misma tanto si se ejecuta en un hilo como en cien:

// IronBarcode: static call, same code for single-threaded and concurrent use
Parallel.ForEach(files, file =>
{
    var result = BarcodeReader.Read(file).FirstOrDefault();
    if (result != null)
        processed[file] = result.Value;
});

IronBarcode vs ZXing .NET: Comparación de características

CaracterísticaZXing.NetIronBarcode
LicenciaApache 2.0 (gratuito)Comercial
Seguridad de hilosNo es seguro para subprocesos: se requiere una nueva instancia por cada subproceso.API estática segura para subprocesos
Detección de formatoManual — se requiere lista PossibleFormatsAutomático: más de 50 formatos
Lectura de PDFNo — requiere PdfiumViewer o similarNativo: llamada a un solo método
Soporte de PlataformaPaquetes de enlace separados por plataformaPaquete único, todas las plataformas
Múltiples códigos de barras por imagenSí — DecodeMultipleSí — comportamiento predeterminado
Generación de códigos de barrasDevuelve Bitmap, se requiere guardado manualAPI fluida con salida integrada
Soporte para logotipos de códigos QRNo
Control de color del código QRNo
Recuperación de códigos de barras dañadosBandera TryHarderCorrección de imágenes mediante aprendizaje automático
Dependencias adicionales de DockerPuede requerir libgdiplusNone
Soporte para acuerdos de nivel de servicio (SLA) comercialesNo
Paquetes NuGet necesarios2–3 (núcleo + enlace + ImageSharp opcional)1

Inicio rápido

Paso 1: Eliminar los paquetes .NET de ZXing

Elimine todos los paquetes ZXing .NET y relacionados del proyecto:

dotnet remove package ZXing.Net
dotnet remove package ZXing.Net.Bindings.Windows.Compatibility
dotnet remove package ZXing.Net.Bindings.ImageSharp
dotnet remove package PdfiumViewer
SHELL

Si los binarios nativos de PdfiumViewer se instalaran como un paquete separado:

dotnet remove package PdfiumViewer.Native.x64.v8-xfa
SHELL

Si el Dockerfile contiene apt-get install -y libgdiplus — añadido para soportar System.Drawing a través del enlace de Windows en Linux — esa línea se puede eliminar después de la migración.

Paso 2: Instalar IronBarcode

dotnet add package IronBarcode
SHELL

No se requieren paquetes de enlace adicionales ni dependencias específicas de la plataforma. El mismo paquete NuGet funciona en Windows, Linux, macOS y en contenedores Docker. Para obtener detalles sobre la implementación, la guía de configuración de IronBarcode para Docker y Linux cubre el patrón exacto del Dockerfile.

Paso 3: Actualizar espacios de nombres e inicializar la licencia.

Elimine todos los espacios de nombres relacionados con ZXing de cada archivo que utilice operaciones de código de barras:

// Remove all of these:
using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using ZXing.ImageSharp;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
using PdfiumViewer;

// Add this single import:
using IronBarCode;

Agregue la inicialización de la licencia al iniciar la aplicación, antes de cualquier operación con códigos de barras:

// Program.cs or Startup.cs — initialise once at startup
IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY";

La clave de licencia es una cadena simple que se puede cargar desde una variable de entorno, appsettings.json, o un gestor de secretos. No hay ningún archivo que localizar ni ninguna ruta que configurar.

Ejemplos de migración de código

Lectura de un único código de barras a partir de una imagen.

Este ejemplo reemplaza el patrón de uso más común de ZXing .NET : instanciar un lector, configurar la lista de formatos, cargar un mapa de bits y decodificar.

Enfoque ZXing .NET :

using ZXing;
using ZXing.Windows.Compatibility;
using System.Drawing;

public string ReadSingleBarcode(string imagePath)
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.EAN_13
    };

    using var bitmap = new Bitmap(imagePath);
    var result = reader.Decode(bitmap);

    return result?.Text ?? string.Empty;
}

Enfoque de IronBarcode :

using IronBarCode;

public string ReadSingleBarcode(string imagePath)
{
    var result = BarcodeReader.Read(imagePath).FirstOrDefault();
    return result?.Value ?? string.Empty;
}

La lista de formatos, la asignación Bitmap, y el bloque using se eliminan. IronBarcode acepta directamente la ruta del archivo y detecta automáticamente todos los formatos compatibles. La propiedad que anteriormente devolvía la cadena decodificada era result.Text en ZXing.Net; ahora es result.Value en IronBarcode.

Lectura de todos los códigos de barras de una imagen.

Este ejemplo reemplaza DecodeMultiple, que en ZXing.Net requiere una lista exhaustiva de formatos para evitar omisiones silenciosas.

Enfoque ZXing .NET :

using ZXing;
using ZXing.Windows.Compatibility;
using System.Drawing;

public List<string> ReadAllBarcodes(string imagePath)
{
    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.CODE_39,
        BarcodeFormat.EAN_13,
        BarcodeFormat.EAN_8,
        BarcodeFormat.UPC_A,
        BarcodeFormat.DATA_MATRIX,
        BarcodeFormat.PDF_417
    };
    reader.Options.TryHarder = true;

    using var bitmap = new Bitmap(imagePath);
    var results = reader.DecodeMultiple(bitmap);

    return results?.Select(r => r.Text).ToList() ?? new List<string>();
}

Enfoque de IronBarcode :

using IronBarCode;

public List<string> ReadAllBarcodes(string imagePath)
{
    return BarcodeReader.Read(imagePath)
        .Select(r => r.Value)
        .ToList();
}

BarcodeReader.Read siempre devuelve una colección y nunca devuelve null, eliminando la necesidad de un guardia nulo en el resultado. Para ajustar el equilibrio precisión/velocidad, consulte la guía de opciones de velocidad de lectura, que cubre el enum ReadingSpeed sin reducir el alcance del formato.

Procesamiento por lotes concurrente

Este ejemplo muestra la diferencia en la seguridad de los subprocesos de la forma más directa. ZXing .NET requiere un nuevo lector por cada operación paralela; IronBarcode utiliza la misma llamada estática independientemente del nivel de concurrencia.

Enfoque ZXing .NET :

using ZXing;
using ZXing.Windows.Compatibility;
using System.Collections.Concurrent;
using System.Drawing;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> filePaths)
{
    var output = new ConcurrentDictionary<string, string>();

    Parallel.ForEach(filePaths, new ParallelOptions { MaxDegreeOfParallelism = 4 }, file =>
    {
        // ZXing.Net is not thread-safe — a new reader is required per parallel operation
        var reader = new BarcodeReader();
        reader.Options.PossibleFormats = new List<BarcodeFormat>
        {
            BarcodeFormat.QR_CODE,
            BarcodeFormat.CODE_128
        };

        using var bitmap = new Bitmap(file);
        var result = reader.Decode(bitmap);
        if (result != null)
            output[file] = result.Text;
    });

    return output.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}

Enfoque de IronBarcode :

using IronBarCode;
using System.Collections.Concurrent;

public Dictionary<string, string> ProcessBatch(IEnumerable<string> filePaths)
{
    var output = new ConcurrentDictionary<string, string>();
    var options = new BarcodeReaderOptions { MaxParallelThreads = 4 };

    Parallel.ForEach(filePaths, file =>
    {
        var result = BarcodeReader.Read(file, options).FirstOrDefault();
        if (result != null)
            output[file] = result.Value;
    });

    return output.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}

No hay ninguna instancia de lector que proteger o aislar. Para obtener información sobre patrones de canalización asíncrona y configuración del número de subprocesos, consulte la guía de lectura de códigos de barras asíncrona y multiproceso .

Cómo extraer códigos de barras de un PDF

Este ejemplo reemplaza el bucle de renderizado de PdfiumViewer. Si la integración existente utilizó Ghostscript o iText en lugar de PdfiumViewer, el bloque anterior se verá diferente en detalle pero estructuralmente idéntico: un bucle de enumeración de página que alimenta mapas de bits a ZXing.Net.

Enfoque ZXing .NET :

using ZXing;
using ZXing.Windows.Compatibility;
using PdfiumViewer;
using System.Drawing;
using System.Drawing.Imaging;

public List<string> ExtractBarcodesFromPdf(string pdfPath)
{
    var collected = new List<string>();

    var reader = new BarcodeReader();
    reader.Options.PossibleFormats = new List<BarcodeFormat>
    {
        BarcodeFormat.QR_CODE,
        BarcodeFormat.CODE_128,
        BarcodeFormat.PDF_417
    };

    using var document = PdfDocument.Load(pdfPath);
    for (int page = 0; page < document.PageCount; page++)
    {
        string temp = Path.Combine(Path.GetTempPath(), $"{Guid.NewGuid()}.png");
        try
        {
            using var rendered = document.Render(page, 200, 200, PdfRenderFlags.CorrectFromDpi);
            rendered.Save(temp, ImageFormat.Png);

            using var bmp = new Bitmap(temp);
            var decoded = reader.DecodeMultiple(bmp);
            if (decoded != null)
                collected.AddRange(decoded.Select(d => d.Text));
        }
        finally
        {
            if (File.Exists(temp))
                File.Delete(temp);
        }
    }

    return collected;
}

Enfoque de IronBarcode :

using IronBarCode;

public List<string> ExtractBarcodesFromPdf(string pdfPath)
{
    return BarcodeReader.Read(pdfPath)
        .Select(r => r.Value)
        .ToList();
}

Se eliminan la dependencia de PdfiumViewer, el bucle de renderizado de página, la configuración de DPI, la creación de archivos temporales y el bloque de limpieza. IronBarcode lee los códigos de barras de los archivos PDF de forma nativa , procesando todas las páginas automáticamente.

Generación de un código de barras

El escritor de ZXing.Net devuelve un Bitmap que los llamantes deben guardar usando System.Drawing.Imaging. IronBarcode devuelve un GeneratedBarcode con métodos de salida integrados.

Enfoque ZXing .NET :

using ZXing;
using ZXing.Common;
using ZXing.Windows.Compatibility;
using System.Drawing;
using System.Drawing.Imaging;

public void WriteCode128(string content, string outputPath)
{
    var writer = new BarcodeWriter
    {
        Format = BarcodeFormat.CODE_128,
        Options = new EncodingOptions
        {
            Width = 400,
            Height = 120,
            Margin = 10
        }
    };

    using var bitmap = writer.Write(content);
    bitmap.Save(outputPath, ImageFormat.Png);
}

Enfoque de IronBarcode :

using IronBarCode;

public void WriteCode128(string content, string outputPath)
{
    BarcodeWriter.CreateBarcode(content, BarcodeEncoding.Code128)
        .ResizeTo(400, 120)
        .SaveAsPng(outputPath);
}

Si se necesita salida binaria en lugar de guardar en un archivo, ToPngBinaryData() y ToJpegBinaryData() están disponibles en el objeto GeneratedBarcode devuelto sin necesidad de MemoryStream.

Referencia de mapeo de la API .NET de ZXing a IronBarcode

ZXing.NetIronBarcodeNotas
new BarcodeReader()Estático: ninguna instanciaBarcodeReader.Read(...) es una llamada estática
lector.Opciones.FormatosPosibles = nueva lista<BarcodeFormat> { ... }No es necesarioLa detección automática cubre los más de 50 formatos.
reader.Options.TryHarder = trueSpeed = ReadingSpeed.BalancedAjuste de precisión a través de BarcodeReaderOptions
reader.Decode(bitmap)BarcodeReader.Read(imagePath).FirstOrDefault()Pase la ruta del archivo — no se necesita construcción Bitmap
reader.DecodeMultiple(bitmap)BarcodeReader.Read(imagePath)Siempre devuelve una colección; never null
result.Textresult.ValuePropiedad renombrada
result.BarcodeFormatresult.FormatPropiedad renombrada
BarcodeFormat.QR_CODEBarcodeEncoding.QRCodeCambio en la convención de nomenclatura de enumeraciones
BarcodeFormat.CODE_128BarcodeEncoding.Code128Cambio en la convención de nomenclatura de enumeraciones
BarcodeFormat.EAN_13BarcodeEncoding.EAN13Cambio en la convención de nomenclatura de enumeraciones
BarcodeFormat.DATA_MATRIXBarcodeEncoding.DataMatrixCambio en la convención de nomenclatura de enumeraciones
BarcodeFormat.PDF_417BarcodeEncoding.PDF417Cambio en la convención de nomenclatura de enumeraciones
new BarcodeWriter { Formato = ..., Opciones = new EncodingOptions { ... } }BarcodeWriter.CreateBarcode(data, encoding)Fábrica estática, sin objeto de opciones
writer.Write(data) devuelve Bitmap.SaveAsPng(path) / .ToPngBinaryData()Salida integrada en GeneratedBarcode
EncodingOptions { Width, Height }.ResizeTo(width, height)Método de dimensionamiento fluido
Sin soporte para PDFBarcodeReader.Read("file.pdf")Compatibilidad nativa con PDF, todas las páginas

Problemas comunes de migración y soluciones

Problema 1: Patrones de instanciación de lectores de códigos de barras

ZXing.Net: Los llamantes crean un new BarcodeReader(), establecen reader.Options.PossibleFormats, cargan un Bitmap, llaman a reader.Decode(bitmap) o reader.DecodeMultiple(bitmap), y leen result.Text.

Solución: Eliminar la instanciación por completo. Reemplace el patrón completo con una llamada estática:

// Before: reader creation + format config + bitmap + decode + result.Text
// After:
var result = BarcodeReader.Read(imagePath).FirstOrDefault();
var value = result?.Value ?? string.Empty;

Busque en la base de código new BarcodeReader() para encontrar todas las instancias. Cada uno se elimina, no se refactoriza.

Problema 2: Eliminación del bloque PossibleFormats

ZXing .NET: Cada llamada de decodificación está precedida por un lector.Opciones.FormatosPosibles = nueva lista<BarcodeFormat> { ... }asignación. Estas listas suelen ser largas y específicas para cada proyecto.

Solución: Elimine cada bloque de asignación PossibleFormats en su totalidad. IronBarcode realiza la detección automática de formato; No se acepta ni se requiere ninguna lista de formatos. Si la bandera TryHarder = true fue establecida junto con la lista de formatos, reemplácela con Speed = ReadingSpeed.Balanced en un objeto BarcodeReaderOptions si se necesita ajuste de precisión.

Problema 3: Limpieza del paquete de enlace

ZXing.Net: Los proyectos que utilizan ZXing.Net.Bindings.Windows.Compatibility tienen código que referencia System.Drawing.Bitmap como el tipo de entrada. Los proyectos que utilizan ZXing.Net.Bindings.ImageSharp referencian SixLabors.ImageSharp.Image<Rgba32>. Ambos patrones se rompen después de que se eliminan los paquetes de enlace.

Solución: Elimine ambos paquetes de enlace y reemplace todo el código de carga de imágenes. El BarcodeReader.Read de IronBarcode acepta una cadena de ruta de archivo, un byte[], un Stream, o un Uri — no se necesita construcción Bitmap o Image<t>. Las importaciones using System.Drawing; restantes que existían únicamente para la carga de Bitmap también se pueden eliminar.

Problema 4: result.Text a result.Value

ZXing.Net: El valor del código de barras decodificado se accede a través de result.Text. El formato del código de barras se accede a través de result.BarcodeFormat.

Solución: Reemplace result.Text con result.Value y result.BarcodeFormat con result.Format en toda la base de código. Ambos cambios son simples cambios de nombre de propiedad sin diferencia de comportamiento.

Lista de verificación de migración de ZXing .NET

Tareas previas a la migración

Antes de realizar cambios, revise el código fuente para encontrar todas las referencias a ZXing .NET :

grep -r "using ZXing" --include="*.cs" .
grep -r "new BarcodeReader" --include="*.cs" .
grep -r "PossibleFormats" --include="*.cs" .
grep -r "BarcodeFormat\." --include="*.cs" .
grep -r "reader\.Decode\|reader\.DecodeMultiple" --include="*.cs" .
grep -r "result\.Text\|result\.BarcodeFormat" --include="*.cs" .
grep -r "new BarcodeWriter\|writer\.Write\|EncodingOptions" --include="*.cs" .
grep -r "PdfiumViewer\|PdfDocument\.Load" --include="*.cs" .
grep -r "using System\.Drawing" --include="*.cs" .
SHELL

Documente qué archivos hacen referencia a los paquetes de enlace ZXing (Windows vs ImageSharp) y anote dónde se usa System.Drawing.Bitmap únicamente para la entrada de ZXing. Revise el Dockerfile (si está presente) para la instalación de libgdiplus.

Tareas de actualización de código

  1. Elimine los paquetes de NuGet ZXing.Net, ZXing.Net.Bindings.Windows.Compatibility, ZXing.Net.Bindings.ImageSharp, y PdfiumViewer
  2. Instale el paquete NuGet IronBarcode
  3. Agregue IronBarCode.License.LicenseKey = "YOUR-LICENSE-KEY"; al inicio de la aplicación
  4. Reemplace todas las importaciones using ZXing* y using SixLabors.ImageSharp* con using IronBarCode;
  5. Elimine cada instancia new BarcodeReader()
  6. Elimine cada bloque reader.Options.PossibleFormats = ...
  7. Reemplace reader.Decode(bitmap) con BarcodeReader.Read(imagePath).FirstOrDefault()
  8. Reemplace reader.DecodeMultiple(bitmap) con BarcodeReader.Read(imagePath)
  9. Reemplace result.Text con result.Value
  10. Reemplace result.BarcodeFormat con result.Format
  11. Actualice las referencias enum BarcodeFormat.X a equivalentes BarcodeEncoding.X
  12. Reemplazar new BarcodeWriter { Formato = ..., Opciones = new EncodingOptions { ... } }with BarcodeWriter.CreateBarcode(data, encoding).ResizeTo(w, h)
  13. Reemplace writer.Write(data) + bitmap.Save(...) con .SaveAsPng(path) o .ToPngBinaryData()
  14. Elimine todas las importaciones using System.Drawing; que existían únicamente para la carga de mapas de bits de ZXing.Net
  15. Elimine el bucle de renderizado de página de PdfiumViewer dondequiera que se haya implementado como solución alternativa para PDF.
  16. Elimine libgdiplus del Dockerfile si se añadió para soportar System.Drawing en Linux

Pruebas posteriores a la migración

  • Verificar que se detecten correctamente todos los formatos de código de barras que la aplicación estaba configurada previamente para detectar.
  • Pruebe con imágenes que contienen formatos de código de barras que anteriormente estaban excluidos de la lista PossibleFormats, para confirmar que la autodetección los recoge
  • Ejecute las rutas de procesamiento concurrente bajo carga y confirme que no haya condiciones de carrera ni resultados nulos.
  • Si la aplicación procesó archivos PDF a través de PdfiumViewer, proporcione los mismos datos de entrada de PDF y confirme que los valores del código de barras coinciden.
  • Confirme que los códigos de barras generados (Code 128, código QR, etc.) produzcan el formato y las dimensiones de salida correctos.
  • En implementaciones de Linux o Docker, confirme que la lectura de imágenes y PDF funciona sin libgdiplus
  • Ejecute el Suite completo de pruebas y compare el resultado con la línea base previa a la migración.

Principales ventajas de migrar a IronBarcode

Eliminación de la carga de seguridad de subprocesos: la API estática de IronBarcode elimina por completo el patrón de instancia por subproceso. No hay lector para instanciar, no hay lista de formatos para configurar por hilo, y no hay piscina de ThreadLocal para gestionar. La misma llamada es correcta tanto en entornos de un solo hilo como en entornos altamente concurrentes, y la corrección de la concurrencia la proporciona la biblioteca en lugar de delegarse a cada llamador.

Detección Automática de Formato: Eliminar la lista PossibleFormats elimina la categoría de fallos por omisión silenciosa que ocurren cuando los documentos contienen formatos de código de barras que no fueron anticipados durante el desarrollo. Las aplicaciones que procesan documentos de socios externos o que operan con estándares de códigos de barras en constante evolución ya no requieren el mantenimiento de listas de formatos para seguir siendo fiables.

Procesamiento nativo de PDF: El bucle de renderizado de PdfiumViewer —su enumeración de páginas, configuración de DPI, ciclo de vida de archivos temporales y código de limpieza— se elimina por completo. Las aplicaciones que antes requerían dos bibliotecas (ZXing .NET y un renderizador de PDF) para procesar un código de barras PDF ahora utilizan solo una. La reducción de las dependencias desplegadas simplifica tanto la compilación como la implementación.

Paquete único multiplataforma: Se elimina la distinción entre paquetes para implementaciones en Windows y Linux. La misma llamada BarcodeReader.Read(path) se compila y se comporta de manera idéntica en todas las plataformas objetivo, eliminando la necesidad de condicionales de plataforma en el código de carga de imágenes y simplificando los flujos de trabajo de desarrollo y contenedorización multiplataforma.

Reducción del código de infraestructura: El resultado más significativo de la migración es la eliminación de la infraestructura circundante (los bloques de carga de Bitmap, las listas de formato, los bucles de renderizado de PdfiumViewer, los grupos de ThreadLocal) que existían en las integraciones de ZXing .NET no para realizar tareas con códigos de barras, sino para satisfacer los requisitos arquitectónicos de la biblioteca. Lo que queda después de la migración es la lógica del código de barras en sí. Para obtener información adicional sobre las tasas de detección y los escenarios de escaneo, la comparación entre los escáneres ZXing .NET e IronBarcode ofrece un análisis más amplio.

Por favor nota: Ghostscript, PDFium, ZXing.NET e iText son marcas registradas de sus respectivos propietarios. Este sitio no está afiliado, respaldado ni patrocinado por Artifex Software, Chromium Project, Google, ZXing.NET o iText Group. Todos los nombres de productos, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.
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