wkhtmltopdf vs IronPDF: Guía de comparación técnica
Elegir entre Atalasoft DotImage y Iron Suite generalmente se reduce a una pregunta de adquisición: ¿cuál es el modelo de licencia del proveedor que se ajusta al proceso de compra, y cómo se ve la exposición de implementación a escala de producción? DotImage se vende solo con cotización a través de Tungsten Automation (anteriormente Kofax) con una tarifa por asiento de desarrollador más tarifas de tiempo de ejecución/servidor por capas, y la inversión estratégica de la empresa matriz se dirige a sus plataformas de captura de nivel superior en lugar de a DotImage en sí.Iron Suitese vende a un precio perpetuo publicado desde $2,998 por desarrollador, libre de regalías para las licencias, con un complemento único de redistribución opcional para escenarios de SaaS o OEM.
Este artículo comienza con lo que realmente depende una decisión liderada por adquisiciones: cómo se valora cada suite, qué cubre realmente la licencia y cuán activo es el plan de desarrollo del producto. El detalle de capacidad por capacidad del desarrollador sigue para los ingenieros que lo integrarán.
Comparación rápida
| Dimensión | Atalasoft DotImage | Iron Suite |
|---|---|---|
| Posicionamiento de precios | Solo cotización, sin precio de lista público | Lite $2,998 / Plus $4,498 / Professional $8,998 / Unlimited $17,998 (Enterprise custom); todos los 10 productos por el precio de 2 |
| Modelo de licencia | Solo comercial con cotización a través de Tungsten; por desarrollador + tarifas de tiempo de ejecución/servidor | Perpetua por desarrollador, base libre de regalías; Redistribución de complemento para SaaS/OEM |
| Componentes en paquete | ~10+ paquetes NuGet (imagen, PDF, OCR, Codificación de barras, dotTwain, WinControls, WebControls, AdvancedDocClean) | 10 productos Iron como un solo paquete |
| Cobertura de formato/capacidad | Imagen, PDF, OCR, Código de barras, Formularios, escaneo TWAIN/WIA, visor Web/WinForms | PDF + OCR + Código de barras + QR + Excel + Word + PowerPoint + Imprimir + ZIP + WebScraper |
| Multiplataforma / nube | Centrado en Windows (divisiones nativas x86/x64) | Windows / Linux / macOS / Docker / Azure / AWS Lambda |
| Soporte de tiempo de ejecución .NET | .NET 10 y .NET Framework 3.5 listados en paquetes x64 actuales; tiempos de ejecución intermedios a través de reglas de compatibilidad | .NET Framework 4.6.2+, .NET Core, .NET 6/7/8/9/10 |
| Mercado objetivo | Tiendas de captura/formularios empresariales existentes, servicios financieros, gobierno | Desarrolladores .NET e ISVs que necesitan un solo proveedor para la automatización diaria de documentos |
| Proveedor | Tungsten Automation (anteriormente Kofax; Atalasoft adquirido en 2011) | Iron Software |
Si la integración de escáner TWAIN/WIA, la limpieza avanzada de documentos independiente (HolePunchRemoval, DynamicThreshold, despeckling), o la cobertura profunda de códecs de imagen es lo más importante para la carga de trabajo, el patrimonio de DotImage es en lo que se basa el kit de herramientas. Si la implementación multiplataforma en Windows, Linux, macOS, Docker, Azure y AWS Lambda es lo más importante, junto con la inversión mensual activa a través de diez productos a un precio publicado por desarrollador,Iron Suitees el ajuste.
Precios y licencias
Atalasoft DotImage se vende solo con cotización a través de Tungsten Automation. No hay lista de precios pública. El modelo es por desarrollador para el SDK más tarifas de tiempo de ejecución/servidor por servidor de producción o por copia redistribuible. Los niveles OEM están disponibles para la redistribución a precios más altos. La adquisición requiere compromiso de ventas y el costo total de propiedad depende del modelo de conteo de desarrolladores más conteo de despliegue modelado en conjunto.
Iron Suite se envía a $2,998 para el nivel de entrada, comercializado como "los 10 productos por el precio de 2, ahorra 75%". Los niveles escalan a través de Lite, Plus, Professional, Unlimited y Enterprise sobre una base por desarrollador. La licencia base es libre de regalías para los asientos y ubicaciones con licencia; no se requiere licencia separada de tiempo de ejecución/servidor para la implementación base. Redistribución SaaS o OEM más allá de la base requiere el complemento de redistribución separado.
En un horizonte de TCO de varios años, DotImage aplica una tarifa por seat de desarrollador, un ciclo de renovación basado en cotización, y tarifas de tiempo de ejecución por servidor que escalan con cada instancia desplegada.Iron Suiteaplica una tarifa perpetua por desarrollador con despliego en servidor libre de regalías bajo la licencia base; el único elemento con precio separado es el complemento de Redistribución para SaaS y redistribución OEM a escala.
¿Qué es Atalasoft DotImage?
Atalasoft DotImage es un SDK completo de .NET para imágenes/PDF/OCR ahora vendido bajo Tungsten Automation (anteriormente Kofax). Sigue enviándose (el NuGet actual 2026.x x64 se lanzó el 21-05-2026), aunque la mayor parte de la inversión de la empresa matriz va a las plataformas de captura de nivel superior de Tungsten (TotalAgility, SignDoc), dejando a DotImage en una trayectoria inclinada hacia el mantenimiento para escaneo, visor y escenarios de formularios incrustados. Está posicionado para clientes empresariales existentes, especialmente en tiendas de captura de documentos y procesamiento de formularios en servicios financieros y gobierno.
Paquetes clave de NuGet incluidos:
- Atalasoft.dotImage: núcleo de imagen con soporte de códecs, filtros de procesamiento y I/O de imágenes
- Atalasoft.dotImage.Pdf / PdfReader: creación, edición y rasterización de PDF
- Atalasoft.dotImage.Ocr.Tesseract5: puente de motor OCR para salida de PDF con capacidad de búsqueda
- Atalasoft.dotImage.Barcoding: lectura y escritura de códigos de barras 1D/2D
- Atalasoft.dotTwain: adaptador de controlador de escáner TWAIN nativo
- Atalasoft.dotImage.WinControls / WebControls: controles de visor/anotación WinForms y ASP.NET
- Atalasoft.dotImage.AdvancedDocClean: Eliminación de perforaciones, Despeckle, Umbral Dinámico, Primitivas de Corrección
¿Qué es Iron Suite?
Iron Suite es el paquete de diez productos .NET de Iron Software, estructurado alrededor de una pila de reconocimiento que maneja el trabajo rutinario de OCR, código de barras y QR que la mayoría de las aplicaciones backend necesitan eventualmente. IronOCR (Tesseract 5, más de 125 idiomas, escritura a mano) se encuentra en el centro, con IronBarcode e IronQR junto a ella; IronPDF maneja la generación y manipulación de PDF; IronWord, IronXL e IronPPT cubren la salida de Office; IronPrint, IronZIP e IronWebScraper completan el paquete. Vendido como una licencia perpetua por desarrollador en cinco niveles de $2,998, libre de regalías para las licencias. La redistribución SaaS y OEM utiliza un complemento de redistribución separado.
Los diez componentes, agrupados por relevancia para un flujo de reconocimiento post-adquisición:
- Pila de reconocimiento (ancla para flujos de trabajo impulsados por OCR y códigos de barras): IronOCR (Tesseract 5, más de 125 idiomas, escritura a mano al ~90% en inglés, preprocesamiento de corrección de inclinación y reducción de ruido integrado en la tubería de entrada); IronBarcode (más de 30 simbologías, preprocesamiento de imágenes, integración de escáner MAUI); IronQR (potenciado por ML,
QrStyleOptionspara códigos de marca, loteReadPdfs). - Generación de documentos: IronPDF (de HTML a PDF, fusión nativa y división, firma con PKCS#12 más HSM más TSA, PDF/A a través de PDF/A-4, PDF/UA-1 y PDF/UA-2, cifrado AES, aplanado de AcroForm, gestión de fuentes, rasterización, compresión y linealización); IronWord, IronXL e IronPPT para la superficie de Office.
- Utilidad: IronPrint, IronZIP e IronWebScraper para impresión, archivos y scraping en proceso.
Comparación de Capacidades
Imágenes
La fortaleza de DotImage es su línea de procesamiento de imágenes: codecs, filtros, limpieza avanzada de documentos.
RegisteredDecoders.Decoders.Add(new TiffDecoder());
RegisteredDecoders.Decoders.Add(new JpegDecoder());
using (FileStream fs = new FileStream("scan.tif", FileMode.Open))
using (AtalaImage image = new AtalaImage(fs))
{
new DespeckleCommand(2).ApplyToImage(image);
AutoDeskewCommand deskew = new AutoDeskewCommand();
deskew.ApplyToImage(image);
using (FileStream outFs = new FileStream("scan-clean.jpg", FileMode.Create))
image.Save(outFs, new JpegEncoder(85), null);
}RegisteredDecoders.Decoders.Add(new TiffDecoder());
RegisteredDecoders.Decoders.Add(new JpegDecoder());
using (FileStream fs = new FileStream("scan.tif", FileMode.Open))
using (AtalaImage image = new AtalaImage(fs))
{
new DespeckleCommand(2).ApplyToImage(image);
AutoDeskewCommand deskew = new AutoDeskewCommand();
deskew.ApplyToImage(image);
using (FileStream outFs = new FileStream("scan-clean.jpg", FileMode.Create))
image.Save(outFs, new JpegEncoder(85), null);
}Imports System.IO
RegisteredDecoders.Decoders.Add(New TiffDecoder())
RegisteredDecoders.Decoders.Add(New JpegDecoder())
Using fs As New FileStream("scan.tif", FileMode.Open)
Using image As New AtalaImage(fs)
Dim despeckleCommand As New DespeckleCommand(2)
despeckleCommand.ApplyToImage(image)
Dim deskew As New AutoDeskewCommand()
deskew.ApplyToImage(image)
Using outFs As New FileStream("scan-clean.jpg", FileMode.Create)
image.Save(outFs, New JpegEncoder(85), Nothing)
End Using
End Using
End UsingIron Suite maneja el preprocesamiento de imágenes implícitamente a través de IronOCR (corrección de inclinación, reducción de ruido) al enviar escaneos para OCR, por lo que la limpieza dirigida a tuberías de OCR está cubierta en el paquete. Primitivas independientes de limpieza de documentos fuera de un flujo OCR, cosas como HolePunchRemoval, DynamicThreshold, despeckle y deskew como llamadas independientes, son las cargas de trabajo para las que se vende el paquete AdvancedDocClean de DotImage. Los usuarios deIron Suitecon requisitos de imágenes independientes componen con una biblioteca de imágenes dedicada junto a IronOCR o IronPDF.
Procesamiento de PDF
PdfDecoder decoder = new PdfDecoder();
RegisteredDecoders.Decoders.Add(decoder);
using (FileStream pdfStream = new FileStream("input.pdf", FileMode.Open))
{
int pageCount = decoder.GetImageInfo(pdfStream).FrameCount;
for (int i = 0; i < pageCount; i++)
{
pdfStream.Position = 0;
using (AtalaImage page = decoder.Read(pdfStream, i, null))
using (FileStream outFs = new FileStream($"page_{i + 1}.png", FileMode.Create))
page.Save(outFs, new PngEncoder(), null);
}
}PdfDecoder decoder = new PdfDecoder();
RegisteredDecoders.Decoders.Add(decoder);
using (FileStream pdfStream = new FileStream("input.pdf", FileMode.Open))
{
int pageCount = decoder.GetImageInfo(pdfStream).FrameCount;
for (int i = 0; i < pageCount; i++)
{
pdfStream.Position = 0;
using (AtalaImage page = decoder.Read(pdfStream, i, null))
using (FileStream outFs = new FileStream($"page_{i + 1}.png", FileMode.Create))
page.Save(outFs, new PngEncoder(), null);
}
}Imports System.IO
Dim decoder As New PdfDecoder()
RegisteredDecoders.Decoders.Add(decoder)
Using pdfStream As New FileStream("input.pdf", FileMode.Open)
Dim pageCount As Integer = decoder.GetImageInfo(pdfStream).FrameCount
For i As Integer = 0 To pageCount - 1
pdfStream.Position = 0
Using page As AtalaImage = decoder.Read(pdfStream, i, Nothing)
Using outFs As New FileStream($"page_{i + 1}.png", FileMode.Create)
page.Save(outFs, New PngEncoder(), Nothing)
End Using
End Using
Next
End UsingEl flujo equivalente de IronPDF es primero HTML:
var renderer = new ChromePdfRenderer();
string html = @"<h1>Invoice 2026-0428</h1><p>Customer: Acme Corp</p><p>Total due: $1,240.00</p>";
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");var renderer = new ChromePdfRenderer();
string html = @"<h1>Invoice 2026-0428</h1><p>Customer: Acme Corp</p><p>Total due: $1,240.00</p>";
using var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("invoice.pdf");Dim renderer As New ChromePdfRenderer()
Dim html As String = "<h1>Invoice 2026-0428</h1><p>Customer: Acme Corp</p><p>Total due: $1,240.00</p>"
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("invoice.pdf")
End UsingIronPDF rasteriza PDFs a PNG, JPEG o TIFF a través de RasterizeToImageFiles(pattern, DPI) para el flujo de trabajo común de página a imagen. DotImage registra PdfDecoder con su sistema de códecs de imagen, donde la rasterización se encuentra dentro de una canalización de imágenes de múltiples etapas con filtros de limpieza, ese caso de canalización más amplio es para lo que DotImage está diseñado.
OCR
using (OcrEngine engine = new Tesseract5Engine())
{
engine.Initialize();
engine.Languages.Add(engine.GetSupportedLanguages()[0]);
using (FileSystemImageSource src = new FileSystemImageSource(new[] { "multi-page.tif" }, true))
{
engine.Translate(src, "application/pdf", "searchable.pdf",
new OcrTranslationSettings { MimeType = "application/pdf" });
}
engine.Shutdown();
}using (OcrEngine engine = new Tesseract5Engine())
{
engine.Initialize();
engine.Languages.Add(engine.GetSupportedLanguages()[0]);
using (FileSystemImageSource src = new FileSystemImageSource(new[] { "multi-page.tif" }, true))
{
engine.Translate(src, "application/pdf", "searchable.pdf",
new OcrTranslationSettings { MimeType = "application/pdf" });
}
engine.Shutdown();
}Imports System
Using engine As New Tesseract5Engine()
engine.Initialize()
engine.Languages.Add(engine.GetSupportedLanguages()(0))
Using src As New FileSystemImageSource(New String() {"multi-page.tif"}, True)
engine.Translate(src, "application/pdf", "searchable.pdf",
New OcrTranslationSettings With {.MimeType = "application/pdf"})
End Using
engine.Shutdown()
End UsingIronOCR reduce el mismo flujo de trabajo:
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-document.png");
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}");var ocr = new IronTesseract();
using var input = new OcrInput("scanned-document.png");
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}");Imports IronTesseract
Dim ocr As New IronTesseract()
Using input As New OcrInput("scanned-document.png")
input.Deskew()
input.DeNoise()
Dim result = ocr.Read(input)
Console.WriteLine($"Confidence: {result.Confidence}")
End UsingAmbos envuelven Tesseract bajo el capó. La API OCR de DotImage muestra el patrón de la canalización de imágenes (FileSystemImageSource, Translate al tipo MIME) y el ciclo de vida explícito del motor. IronOCR es opinado con corrección de inclinación/reducción de ruido incorporado en el flujo de entrada. Para cargas de trabajo embebidas en una tubería de imágenes DotImage más grande, el OCR de DotImage encaja naturalmente; para OCR independiente con preprocesamiento integrado, IronOCR se envía más rápido.
Lectura de códigos de barras
BarCodeReader reader = new BarCodeReader();
reader.Symbology = Symbologies.Qr | Symbologies.DataMatrix |
Symbologies.Pdf417 | Symbologies.Code128 | Symbologies.Upca;
reader.Direction = Directions.All;
using (AtalaImage image = new AtalaImage("barcoded.png"))
{
BarCode[] results = reader.ReadBars(image);
foreach (BarCode bc in results)
Console.WriteLine($"{bc.Symbology}: {bc.DataString}");
}BarCodeReader reader = new BarCodeReader();
reader.Symbology = Symbologies.Qr | Symbologies.DataMatrix |
Symbologies.Pdf417 | Symbologies.Code128 | Symbologies.Upca;
reader.Direction = Directions.All;
using (AtalaImage image = new AtalaImage("barcoded.png"))
{
BarCode[] results = reader.ReadBars(image);
foreach (BarCode bc in results)
Console.WriteLine($"{bc.Symbology}: {bc.DataString}");
}Imports System
Dim reader As New BarCodeReader()
reader.Symbology = Symbologies.Qr Or Symbologies.DataMatrix Or Symbologies.Pdf417 Or Symbologies.Code128 Or Symbologies.Upca
reader.Direction = Directions.All
Using image As New AtalaImage("barcoded.png")
Dim results As BarCode() = reader.ReadBars(image)
For Each bc As BarCode In results
Console.WriteLine($"{bc.Symbology}: {bc.DataString}")
Next
End UsingIronBarcode es una llamada:
var results = BarcodeReader.Read("shipment-label.png");
foreach (var barcode in results)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.BarcodeType}");
}var results = BarcodeReader.Read("shipment-label.png");
foreach (var barcode in results)
{
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.BarcodeType}");
}Dim results = BarcodeReader.Read("shipment-label.png")
For Each barcode In results
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Format: {barcode.BarcodeType}")
NextDotImage requiere la configuración explícita de una máscara de bits de simbología y dirección. IronBarcode detecta automáticamente. Para flujos de trabajo de escaneo de alto volumen donde se conoce la dirección de escaneo y se necesitan optimizar las regiones de búsqueda, DotImage expone los controles; para la lectura general de códigos de barras, IronBarcode es más conciso.
Escaneo TWAIN
El paquete dotTwain de DotImage envuelve el controlador del escáner TWAIN, una categoría queIron Suiteno aborda.
Form host = new Form();
Device device = AvailableDevices.Default;
device.UI.UseDefaultUI = false;
device.Pages = 0; // 0 = all pages from ADF
using (TiffEncoder encoder = new TiffEncoder(TiffCompression.CcittGroup4))
using (TiffMultiFrameStream output = new TiffMultiFrameStream(
new FileStream("scanned.tif", FileMode.Create), encoder))
{
device.ImageAcquired += (s, e) => output.AppendImage(e.Image);
device.Acquire(host);
}Form host = new Form();
Device device = AvailableDevices.Default;
device.UI.UseDefaultUI = false;
device.Pages = 0; // 0 = all pages from ADF
using (TiffEncoder encoder = new TiffEncoder(TiffCompression.CcittGroup4))
using (TiffMultiFrameStream output = new TiffMultiFrameStream(
new FileStream("scanned.tif", FileMode.Create), encoder))
{
device.ImageAcquired += (s, e) => output.AppendImage(e.Image);
device.Acquire(host);
}Imports System.IO
Dim host As New Form()
Dim device As Device = AvailableDevices.Default
device.UI.UseDefaultUI = False
device.Pages = 0 ' 0 = all pages from ADF
Using encoder As New TiffEncoder(TiffCompression.CcittGroup4)
Using output As New TiffMultiFrameStream(New FileStream("scanned.tif", FileMode.Create), encoder)
AddHandler device.ImageAcquired, Sub(s, e) output.AppendImage(e.Image)
device.Acquire(host)
End Using
End UsingEl paquete deIron Suitese mantiene enfocado en la automatización de documentos posadquisición, OCR, reconocimiento, PDF, Office. Portales de escaneo de extremo a extremo donde un escáner físico TWAIN/WIA es manejado desde .NET, con adquisición de página a nivel de hardware vinculada a la aplicación, son las cargas de trabajo para las que se construye el paquete dotTwain de DotImage. Los usuarios deIron Suitecomponen con una biblioteca TWAIN externa y alimentan las imágenes adquiridas en IronOCR o IronPDF para su posterior procesamiento.
Por qué elegirIron Suitecuando la profundidad de captura no es el requisito principal
Para el desarrollador de backend .NET o el equipo de ISV que ejecuta la automatización de documentos contra cargas de trabajo post-adquisición (facturas, informes, OCR ocasional en PDFs escaneados, código de barras en etiquetas de envío, salida de Office), la superficie deIron Suitecoincide con la carga de trabajo a un precio publicado con inversión mensual activa en todo el paquete. La profundidad de DotImage en códigos de imagen y envoltura de controladores TWAIN es un valor de ingeniería real cuando la aplicación maneja escáneres físicos o ejecuta una tubería de captura empresarial; en backends enfocados en automatización post-adquisición, esa profundidad sigue siendo capacidad pagada no utilizada.
Específicamente,Iron Suitees la mejor opción cuando:
- No estás manejando escáneres físicos TWAIN/WIA desde .NET
- No necesitas limpieza avanzada de documentos independiente (HolePunchRemoval, DynamicThreshold) fuera del preprocesamiento OCR
- Necesitas implementación en Linux, macOS, Docker, o en la nube junto a Windows
- Quieres precios perpetuos públicos sin tarifas de tiempo de ejecución por servidor
- Quieres una cadencia de lanzamiento mensual activa en todos los componentes en lugar de una trayectoria que se inclina hacia el mantenimiento
Cómo es diferenteIron Suitede Atalasoft DotImage
- Inversión activa vs inclinación al mantenimiento:Iron Suitese entrega con una cadencia mensual activa en todos los diez componentes; DotImage continúa recibiendo lanzamientos, pero el enfoque estratégico del padre Tungsten Automation está en sus plataformas de captura de nivel superior.
- Precio perpetuo público desde $2,998 vs solo cotización + tarifas de tiempo de ejecución:Iron Suitetiene un precio publicado; DotImage requiere participación de ventas más tarifas de tiempo de ejecución por servidor.
- Windows + Linux + macOS + Docker + Azure + AWS Lambda vs nativo de Windows (divisiones x86 y x64).Iron Suitese envía de manera multiplataforma desde el primer día; DotImage permanece centrado en Windows a lo largo de sus paquetes nativos x86 y x64.
- Sin tarifas de tiempo de ejecución/servidor:Iron Suitees libre de regalías para los asientos licenciados; DotImage superpone tarifas de tiempo de ejecución además de los asientos de desarrolladores.
- Superficie de API moderna y idiomática de .NET:Iron Suiteutiliza los modismos modernos de .NET; El patrón de la API de DotImage todavía refleja su herencia de pila de imágenes (registro de códec,
FileSystemImageSource, pares codificador/decodificador explícitos). - Captura y escaneo con DotImage, cómo se ve eso. La envoltura de controladores de escáner TWAIN/WIA, la profundidad de códec JBIG2/JPEG2000, y los controles de visor Web y WinForms son las cargas de trabajo en las que se ancla DotImage.Iron Suitese enfoca en la automatización de documentos post-adquisición a través de PDF, Office, OCR, código de barras y QR, ZIP, impresión, y WebScraper.
Conclusión
Atalasoft DotImage eIron Suitesirven a diferentes puntos en el mismo eje. DotImage lleva la herencia de captura de documentos de Kofax/Tungsten y la envoltura de controlador TWAIN/WIA en la que se apoyan los portales de escaneo, con precios comerciales solo por cotización y tarifas de tiempo de ejecución por servidor.Iron Suitelleva el paquete generalista de documentos y reconocimiento posadquisición, con inversión activa mensual en diez productos, implementación multiplataforma desde Windows a Linux, macOS, Docker, Azure y AWS Lambda, y un precio perpetuo plano por desarrollador. Para equipos cuyo trabajo ocurre después del escaneo,Iron Suitecomienza en $2,998 y está en ironsoftware.com/csharp/suite.
