Iron Suite vs Atalasoft DotImage
Choosing between Atalasoft DotImage and Iron Suite usually comes down to a procurement question: which vendor's licensing model fits the buying motion, and what does deployment exposure look like at production scale? DotImage is sold quote-only through Tungsten Automation (formerly Kofax) with a per-developer seat plus per-server runtime fees layered on top, and the parent company's strategic investment is going to its higher-level capture platforms rather than DotImage itself. Iron Suite is sold at a published perpetual price from $2,998 per developer, royalty-free for the licensed seats, with a single optional Redistribution Add-On for SaaS or OEM scenarios.
This article leads with what a procurement-led decision actually hangs on: how each suite is priced, what the license actually covers, and how active the product roadmap is. The capability-by-capability developer detail follows for the engineers who will integrate it.
At-a-Glance Comparison
| Dimension | Atalasoft DotImage | Iron Suite |
|---|---|---|
| Pricing positioning | Quote-only, no public list price | Lite $2,998 / Plus $4,498 / Professional $8,998 / Unlimited $17,998 (Enterprise custom); all 10 products for the price of 2 |
| License model | Quote-only commercial through Tungsten; per-developer + runtime/server fees | Perpetual per-developer, royalty-free base; Redistribution Add-On for SaaS/OEM |
| Components in bundle | ~10+ NuGet packages (imaging, PDF, OCR, Barcoding, dotTwain, WinControls, WebControls, AdvancedDocClean) | 10 Iron products as a single bundle |
| Format/capability coverage | Imaging, PDF, OCR, Barcode, Forms, TWAIN/WIA scanning, Web/WinForms viewer | PDF + OCR + Barcode + QR + Excel + Word + PowerPoint + Print + ZIP + WebScraper |
| Cross-platform / cloud | Windows-centric (x86/x64 native splits) | Windows / Linux / macOS / Docker / Azure / AWS Lambda |
| .NET runtime support | .NET 10 and .NET Framework 3.5 listed on current x64 packages; intermediate runtimes via compat rules | .NET Framework 4.6.2+, .NET Core, .NET 6/7/8/9 |
| Target market | Existing enterprise capture/forms shops, financial services, government | .NET developers and ISVs needing one vendor for everyday document automation |
| Vendor | Tungsten Automation (formerly Kofax; Atalasoft acquired 2011) | Iron Software |
The two suites overlap on PDF, OCR, and barcode, but diverge on platform reach and active investment. DotImage is Windows-native and maintenance-leaning under Tungsten; Iron Suite is cross-platform and on active monthly cadence at a published per-developer price.
Pricing and Licensing
Atalasoft DotImage is sold quote-only through Tungsten Automation. There is no public list price. The model is per-developer for the SDK plus runtime/server deployment fees per production server or per redistributable copy. OEM tiers are available for redistribution at higher pricing. Procurement requires sales engagement and the total cost of ownership depends on developer count plus deployment count modelled together.
Iron Suite ships at $2,998 for the entry tier, marketed as "all 10 products for the price of 2, save 75%". Tiers escalate through Lite, Plus, Professional, Unlimited, and Enterprise on a per-developer basis. The base license is royalty-free for the licensed seats and locations; no separate runtime/server license is required for the base deployment. SaaS or OEM redistribution beyond the base requires the separate Redistribution Add-On.
The pricing-model contrast is significant: DotImage adds deployment-side runtime fees on top of every developer seat, with the quote cycle adding procurement time; Iron Suite ships at a flat per-developer cost with royalty-free deployment under the base license. Buyers running document workflows across many production servers should model DotImage's runtime exposure carefully against Iron Suite's flat cost.
What is Atalasoft DotImage
Atalasoft DotImage is a comprehensive .NET imaging/PDF/OCR SDK now sold under Tungsten Automation (formerly Kofax). It continues to ship (the current 2026.x x64 NuGet was released 2026-05-21), though most parent-company investment goes to Tungsten's higher-level capture platforms (TotalAgility, SignDoc), leaving DotImage on a maintenance-leaning trajectory for embedded scanning, viewer, and forms scenarios. It is positioned for existing enterprise customers, especially document-capture and forms-processing shops in financial services and government.
Key bundled NuGet packages:
- Atalasoft.dotImage: imaging core with codec support, processing filters, and image I/O
- Atalasoft.dotImage.Pdf / PdfReader: PDF creation, editing, and rasterization
- Atalasoft.dotImage.Ocr.Tesseract5: OCR engine bridge for searchable PDF output
- Atalasoft.dotImage.Barcoding: 1D/2D barcode reading and writing
- Atalasoft.dotTwain: native TWAIN scanner driver wrapper
- Atalasoft.dotImage.WinControls / WebControls: WinForms and ASP.NET viewer/annotation controls
- Atalasoft.dotImage.AdvancedDocClean: HolePunchRemoval, Despeckle, DynamicThreshold, Deskew primitives
What is Iron Suite
Iron Suite is Iron Software's ten-product bundle for .NET document automation, sold as a single perpetual license with transparent public pricing. It is positioned for developers and ISVs who want one vendor and one bundle for the everyday document workload (generation, recognition, and utility), rather than negotiating per-developer plus runtime/server fees. The base license is royalty-free for the licensed seats, with a separate Redistribution Add-On for SaaS or OEM redistribution beyond the base.
The ten bundled components:
- IronPDF handles HTML-to-PDF and PDF manipulation
- IronOCR handles image and PDF OCR
- IronBarcode handles barcode reading and writing
- IronQR handles QR code reading and writing
- IronXL handles Excel read/write without Office
- IronWord handles Word document generation
- IronPPT handles PowerPoint generation
- IronPrint handles programmatic printing
- IronZIP handles archive creation and extraction
- IronWebScraper handles structured web scraping
Capability Comparison
Imaging
DotImage's strength is its imaging pipeline: codecs, filters, advanced document cleanup.
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 handles image preprocessing implicitly through IronOCR (deskew, denoise) when feeding scans for OCR, but does not expose a general imaging pipeline as a separate concern. For applications that need standalone document cleanup (HolePunchRemoval, DynamicThreshold, despeckle, deskew) independent of OCR, DotImage's AdvancedDocClean package is purpose-built. Iron Suite users who need image preprocessing typically use a separate imaging library and feed cleaned images into IronOCR or IronPDF.
PDF Processing
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 UsingIronPDF's equivalent flow is HTML-first:
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 UsingDotImage treats PDF as part of the imaging stack; PdfDecoder registers with the imaging codec system, and pages come back as AtalaImage instances. IronPDF treats PDF as the primary citizen, generated from HTML/CSS via a Chromium-class engine. For rasterizing inbound PDFs as part of an imaging workflow, DotImage fits naturally; for generating new PDFs from structured data, IronPDF is more direct.
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 reduces the same workflow:
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 UsingBoth wrap Tesseract under the hood. DotImage's OCR API surfaces the imaging-pipeline pattern (FileSystemImageSource, Translate to MIME type) and explicit engine lifecycle. IronOCR is opinionated with deskew/denoise baked into the input flow. For workloads embedded in a larger DotImage imaging pipeline, the DotImage OCR fits naturally; for standalone OCR with preprocessing built in, IronOCR ships faster.
Barcode Reading
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 is one call:
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 requires explicit symbology bitmask and direction configuration. IronBarcode auto-detects. For high-volume scanning workflows where the scan direction is known and search regions need optimisation, DotImage exposes the knobs; for general barcode reading, IronBarcode is more concise.
TWAIN Scanning
DotImage's dotTwain package wraps the TWAIN scanner driver, a category Iron Suite does not address.
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 UsingIron Suite does not provide a direct equivalent for TWAIN scanner acquisition. Iron Suite users building scanning portals typically use a separate TWAIN library and feed acquired images into IronOCR or IronPDF for downstream processing. For end-to-end scanning portals where the application drives a physical scanner from .NET, dotTwain is the production option DotImage owns.
Why Choose Iron Suite When Capture Depth Is Not the Primary Requirement
If your application generates documents, occasionally reads barcodes, OCRs the odd scanned PDF, and produces Office output, but does not have a dedicated capture workflow that demands TWAIN scanner integration or advanced document cleanup primitives, Iron Suite's surface area matches the workload at a published price with active monthly investment. DotImage's depth in imaging and TWAIN is real, but if your application is not driving scanners or running enterprise capture pipelines, that depth is unused capacity.
Specifically, Iron Suite is the better pick when:
- You are not driving physical TWAIN/WIA scanners from .NET
- You do not need standalone advanced document cleanup (HolePunchRemoval, DynamicThreshold) outside of OCR preprocessing
- You need Linux, macOS, Docker, or cloud deployment alongside Windows
- You want public perpetual pricing with no per-server runtime fees
- You want active monthly release cadence across all components rather than a maintenance-leaning trajectory
How is Iron Suite Different from Atalasoft DotImage
- Active investment vs maintenance-leaning: Iron Suite ships on active monthly cadence across all ten components; DotImage continues to receive releases but the parent Tungsten Automation's strategic focus is on its higher-level capture platforms.
- Public perpetual pricing from $2,998 vs quote-only + runtime fees: Iron Suite is published-price; DotImage requires sales engagement plus per-server runtime fees.
- Cross-platform from day one: Iron Suite supports Linux, macOS, Docker, Azure, AWS Lambda; DotImage is Windows-native with x86/x64 native splits.
- No runtime/server fees: Iron Suite is royalty-free for licensed seats; DotImage layers runtime fees on top of developer seats.
- Modern idiomatic .NET API surface: Iron Suite uses modern .NET idioms; DotImage's API pattern still reflects its imaging-stack heritage (codec registration,
FileSystemImageSource, explicit encoder/decoder pairs). - Capture/scanning lives in DotImage: TWAIN/WIA scanner driver wrapper, JBIG2/JPEG2000 codec depth, and Web/WinForms viewer controls are DotImage edges Iron Suite does not target.
Conclusion
Atalasoft DotImage is the right pick when your application is embedded inside an existing Kofax/Tungsten document-capture ecosystem, when you need to drive physical TWAIN/WIA scanners from .NET, or when you need standalone advanced document cleanup primitives as part of an imaging pipeline. The depth in TWAIN integration and imaging codec support is genuine; DotImage's heritage is real engineering investment over many years.
Iron Suite is the right pick when you want one .NET vendor for general document automation across PDF, OCR, Barcode, Excel, Word, and Office output, with active monthly investment across all components, cross-platform deployment from Windows to Linux/macOS/Docker/Azure/AWS Lambda, and published perpetual pricing from $2,998 with royalty-free deployment under the base license. Try the bundle at ironsoftware.com/csharp/suite.
