Skip to footer content
COMPARE TO OTHER COMPONENTS

Patagames Tesseract.Net SDK vs IronOCR: .NET OCR

Patagames Tesseract.NET SDK locks you to Windows and charges a commercial license for an engine you can already use for free — that combination is what makes it a difficult sell in 2026. The free charlesw and tesseractocr wrappers give you the same Tesseract engine, the same tessdata management workflow, and the same preprocessing responsibility, at zero cost. Patagames adds commercial support and pre-built native binaries, but strips away Linux, macOS, Docker, and any cloud deployment target in the process. If you are already paying commercial prices for OCR, the question becomes whether you are actually getting commercial-grade capabilities or just a convenient binary distribution of software that costs nothing.

Understanding Patagames Tesseract.NET SDK

Patagames Tesseract.NET SDK (NuGet package Tesseract.Net.SDK, namespace Patagames.Ocr) is a commercial .NET wrapper around Google's open-source Tesseract OCR engine produced by Patagames Software. The product positions itself above free community wrappers by bundling pre-compiled native Tesseract binaries, offering commercial support, and providing a simplified API surface over raw Tesseract.

The wrapper exposes Tesseract's core recognition loop through classes such as OcrApi and OcrBitmap. You call OcrApi.Create(), initialize the engine with a tessdata path and language string, load a bitmap, and call GetTextFromImage. That is essentially the full OCR surface for image recognition.

Key architectural characteristics of Patagames Tesseract.NET SDK:

  • Windows-only targeting: The SDK ships Windows native binaries. Linux, macOS, and Docker deployments are not supported. There is no cross-platform NuGet runtime package split and no Linux-specific native binary.
  • Tesseract engine underneath: All recognition accuracy comes from the open-source Tesseract engine. Patagames adds no proprietary recognition model or neural network layer on top.
  • Manual tessdata management: The api.Init(tessDataPath, "eng") call requires a valid tessdata directory populated with .traineddata files. The SDK does not manage language data automatically.
  • No preprocessing pipeline: There are no built-in deskew, denoise, contrast, or binarization operations. Image quality improvement is entirely your responsibility before passing an image to the API.
  • No native PDF support: PDF documents require external rendering to images first. The SDK accepts System.Drawing.Bitmap objects, not PDF file paths.
  • Commercial pricing with no public rates: License tiers (single developer, team, enterprise) require a sales inquiry. No price list is published.
  • System.Drawing dependency: The API works with System.Drawing.Bitmap, which ties the code to Windows-era drawing infrastructure and creates additional friction on non-Windows targets even if the underlying binaries were available.

Basic OCR with Patagames

The Patagames API initializes an OcrApi instance per operation, specifies a tessdata folder path explicitly, and accepts a System.Drawing.Bitmap:

// NuGet: Install-Package Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public class PatagamesOcrService
{
    private const string TessDataPath = @"./tessdata"; // must exist and be populated

    public string ExtractText(string imagePath)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng"); // tessdata path — breaks on deployment if path is wrong

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }

    public string MultiLanguageOcr(string imagePath)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng+fra+deu"); // language string must match tessdata files present

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }

    public string OcrWithSegmentation(string imagePath, PageSegmentationMode mode)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng");
        api.SetVariable("tessedit_pageseg_mode", ((int)mode).ToString()); // raw Tesseract variable

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }
}
// NuGet: Install-Package Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public class PatagamesOcrService
{
    private const string TessDataPath = @"./tessdata"; // must exist and be populated

    public string ExtractText(string imagePath)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng"); // tessdata path — breaks on deployment if path is wrong

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }

    public string MultiLanguageOcr(string imagePath)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng+fra+deu"); // language string must match tessdata files present

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }

    public string OcrWithSegmentation(string imagePath, PageSegmentationMode mode)
    {
        using var api = OcrApi.Create();
        api.Init(TessDataPath, "eng");
        api.SetVariable("tessedit_pageseg_mode", ((int)mode).ToString()); // raw Tesseract variable

        using var bitmap = new Bitmap(imagePath);
        return api.GetTextFromImage(bitmap);
    }
}
Imports Patagames.Ocr
Imports Patagames.Ocr.Enums
Imports System.Drawing

Public Class PatagamesOcrService
    Private Const TessDataPath As String = "./tessdata" ' must exist and be populated

    Public Function ExtractText(imagePath As String) As String
        Using api = OcrApi.Create()
            api.Init(TessDataPath, "eng") ' tessdata path — breaks on deployment if path is wrong

            Using bitmap = New Bitmap(imagePath)
                Return api.GetTextFromImage(bitmap)
            End Using
        End Using
    End Function

    Public Function MultiLanguageOcr(imagePath As String) As String
        Using api = OcrApi.Create()
            api.Init(TessDataPath, "eng+fra+deu") ' language string must match tessdata files present

            Using bitmap = New Bitmap(imagePath)
                Return api.GetTextFromImage(bitmap)
            End Using
        End Using
    End Function

    Public Function OcrWithSegmentation(imagePath As String, mode As PageSegmentationMode) As String
        Using api = OcrApi.Create()
            api.Init(TessDataPath, "eng")
            api.SetVariable("tessedit_pageseg_mode", CInt(mode).ToString()) ' raw Tesseract variable

            Using bitmap = New Bitmap(imagePath)
                Return api.GetTextFromImage(bitmap)
            End Using
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

The tessdata path string is the first deployment problem teams hit. On a developer machine it works. In a Docker container or a Linux CI runner, the path either fails or the runtime does not exist at all. On macOS, the native Windows binary simply does not load. The segmentation mode is set by writing a raw Tesseract variable string — there is no strongly typed enum wrapping that call. These are the seams where Tesseract's raw nature shows through despite the commercial wrapper.

Understanding IronOCR

IronOCR is a commercial .NET OCR library built on an optimized Tesseract 5 engine with a full preprocessing pipeline, native PDF support, and cross-platform deployment baked in. The design goal is to eliminate every manual step between installing a NuGet package and getting accurate text out of a document.

Key characteristics of IronOCR:

  • Cross-platform from day one: Windows x64/x86, Linux x64, macOS, Docker, Azure App Service, and AWS Lambda are all supported through a single NuGet package. No separate binary distribution, no platform conditionals.
  • Automatic preprocessing: Deskew, denoise, contrast enhancement, binarization, and resolution normalization run automatically. Explicit control is available when needed via OcrInput filter methods.
  • Native PDF input: Pass a PDF file path directly to IronTesseract.Read(). No external renderer, no intermediate image conversion, no external library dependency.
  • Searchable PDF output: result.SaveAsSearchablePdf() produces a PDF/A-compliant document with an invisible text layer over the original image, usable in one call.
  • Tessdata is invisible: Language data ships as NuGet packages (IronOcr.Languages.French, etc.). There is no tessdata directory to configure, no file path to get wrong across environments.
  • Structured results: OcrResult exposes .Pages, .Lines, .Words, and .Paragraphs collections with X/Y coordinates and per-word confidence scores.
  • Public pricing: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited, all perpetual licenses with one year of updates included.

Feature Comparison

Feature Patagames Tesseract.NET SDK IronOCR
Platform support Windows only Windows, Linux, macOS, Docker
Pricing model Commercial (contact for quote) $999–$5,999 perpetual (public)
Engine Tesseract (open source) Optimized Tesseract 5
PDF input Not supported Native
Automatic preprocessing None Built-in
Tessdata management Manual (directory path) NuGet packages
Searchable PDF output Not supported Built-in

Detailed Feature Comparison

Feature Patagames Tesseract.NET SDK IronOCR
Platform Support
Windows Yes Yes
Linux No Yes
macOS No Yes
Docker No Yes
Azure App Service No Yes
AWS Lambda No Yes
Pricing and Licensing
Public pricing No (contact required) Yes ($999–$5,999)
Perpetual license Unknown Yes
Per-transaction cost None None
Free tier No Trial available
OCR Engine and Accuracy
Underlying engine Tesseract (open source) Optimized Tesseract 5
Automatic preprocessing No Yes
Manual preprocessing control Via Tesseract variables Yes (Deskew, DeNoise, Contrast, Binarize, EnhanceResolution)
Input Support
JPEG / PNG / TIFF Yes (via System.Drawing.Bitmap) Yes
PDF input (native) No Yes
Password-protected PDF No Yes
Stream input No Yes
URL input No Yes
Output Capabilities
Plain text Yes Yes
Searchable PDF No Yes
hOCR export No Yes
Structured word/line data Limited Yes (coordinates + confidence)
Language Support
Language count Tesseract tessdata 125+ via NuGet packs
Multi-language per document Yes (string concatenation) Yes (strongly typed enum)
Language distribution Manual tessdata files dotnet add package
Advanced Features
Region-based OCR No Yes
Barcode reading during OCR No Yes
Confidence scores per word No Yes
Thread safety Standard Tesseract limits Built-in parallelization
Deployment
Self-contained deployment Windows only All platforms
Docker container No Yes
CI/CD pipeline (Linux) No Yes

Platform Coverage: Windows-Only vs Cross-Platform

This is the single most consequential architectural difference between the two libraries.

Patagames Approach

Patagames ships Windows native binaries for the Tesseract engine. The OcrApi class loads a Windows DLL. On Linux or macOS, there is nothing to load. The System.Drawing.Bitmap dependency compounds the issue: System.Drawing on .NET Core and .NET 5+ requires libgdiplus on Linux and is unsupported on macOS without Mono, which adds its own complexity.

A team building an ASP.NET Core application on .NET 8 and deploying to a Linux container hits two separate walls with Patagames: the native Tesseract binary does not exist for that platform, and the System.Drawing dependency requires an additional native package even if it did. The application simply does not run. There is no fallback and no migration path short of replacing the library.

Consider what this means for a typical modern .NET shop. Development happens on Windows or macOS. CI runs on Linux. Production is a Docker container on Kubernetes. Patagames fails at step two of that pipeline.

// Patagames: Windows runtime only
// This code path does not execute on Linux or macOS
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // Windows DLL load — fails silently or throws on Linux

using var bitmap = new Bitmap(imagePath); // System.Drawing — requires libgdiplus on Linux
return api.GetTextFromImage(bitmap);
// Patagames: Windows runtime only
// This code path does not execute on Linux or macOS
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // Windows DLL load — fails silently or throws on Linux

using var bitmap = new Bitmap(imagePath); // System.Drawing — requires libgdiplus on Linux
return api.GetTextFromImage(bitmap);
Imports System.Drawing

' Patagames: Windows runtime only
' This code path does not execute on Linux or macOS
Using api = OcrApi.Create()
    api.Init("./tessdata", "eng") ' Windows DLL load — fails silently or throws on Linux

    Using bitmap As New Bitmap(imagePath) ' System.Drawing — requires libgdiplus on Linux
        Return api.GetTextFromImage(bitmap)
    End Using
End Using
$vbLabelText   $csharpLabel

The tessdata path also creates a separate deployment problem. In a container, the tessdata directory must be explicitly copied into the image. If the path is wrong, the Init call fails at runtime. Nothing in the build pipeline catches this; it surfaces in production.

IronOCR Approach

IronOCR publishes platform-specific runtime packages as part of its NuGet dependency graph. Adding IronOcr to a project resolves the correct native binary for Windows x64, Windows x86, Linux x64, or macOS automatically. No RuntimeIdentifier gymnastics, no manual binary copying.

// IronOCR: same code on Windows, Linux, macOS, Docker
using IronOcr;

var text = new IronTesseract().Read("document.jpg").Text;
// IronOCR: same code on Windows, Linux, macOS, Docker
using IronOcr;

var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr

Dim text As String = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

A Linux Docker deployment is documented and supported out of the box. See the IronOCR Docker deployment guide for the exact Dockerfile configuration. The Linux deployment guide covers both Debian and Alpine. No platform-specific code branching is required anywhere in the application.

Language data arrives through NuGet. dotnet add package IronOcr.Languages.French adds the French tessdata. The package is resolved at build time, copied to output automatically, and available in every deployment environment without any path configuration. See how IronOCR handles multiple languages for the full language management workflow.

Commercial Price for a Free Engine

The second major angle is economic. Patagames charges commercial rates for software that wraps a freely available open-source engine and adds no proprietary recognition capability on top of it.

What Patagames Adds Over Free Wrappers

Patagames markets four benefits over free Tesseract wrappers: commercial support, a simplified API, pre-built native binaries, and managed tessdata handling. Each deserves examination.

Commercial support is real but difficult to price. You are paying for a support contract for problems that trace back to Tesseract, a third-party open-source engine Patagames does not control. If Tesseract produces incorrect output on a particular image type, Patagames support cannot improve the engine.

Simplified API is marginal. OcrApi.Create() followed by api.Init(path, "eng") is slightly cleaner than the raw Tesseract interop layer in charlesw/tesseract, but both still require the same manual tessdata management and the same absence of preprocessing.

Pre-built native binaries save the hour or two required to compile Tesseract from source on Windows. This was meaningful in 2015. Today, the free tesseractocr NuGet package (Tesseract on NuGet.org) also ships pre-built native binaries at zero cost.

Managed tessdata handling is the claim most undermined by the actual API. The api.Init(TessDataPath, "eng") call still takes a path string. You still populate that directory. The management is only slightly cleaner than pointing a config file at a folder.

The result: Patagames charges commercial prices for a convenience layer that free alternatives also provide, does not solve Tesseract's fundamental preprocessing and PDF gaps, and removes cross-platform support that free alternatives retain.

IronOCR's Commercial Justification

When evaluating whether a commercial OCR library earns its license cost, the question is what the library solves that free alternatives cannot. IronOCR's pricing starts at $999 for a perpetual Lite license. That price buys capabilities Tesseract wrappers — free or commercial — simply do not provide.

// PDF OCR: Patagames has no PDF support at all
// Free wrappers have no PDF support at all
// IronOCR: one line
using IronOcr;

var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
// PDF OCR: Patagames has no PDF support at all
// Free wrappers have no PDF support at all
// IronOCR: one line
using IronOcr;

var text = new IronTesseract().Read("scanned-invoice.pdf").Text;
Imports IronOcr

' PDF OCR: Patagames has no PDF support at all
' Free wrappers have no PDF support at all
' IronOCR: one line
Dim text As String = New IronTesseract().Read("scanned-invoice.pdf").Text
$vbLabelText   $csharpLabel

For the PDF OCR workflow, Patagames requires an external PDF renderer (PdfiumViewer, iText, or similar), a loop to render each page to a Bitmap, passing each bitmap to GetTextFromImage, and concatenating results. That is 30-50 additional lines of code, an additional NuGet dependency, and another failure point. IronOCR handles it in one call.

// Searchable PDF output: not available in Patagames, not available in free wrappers
// IronOCR: two lines
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
// Searchable PDF output: not available in Patagames, not available in free wrappers
// IronOCR: two lines
var result = new IronTesseract().Read("scanned-document.pdf");
result.SaveAsSearchablePdf("searchable-output.pdf");
' Searchable PDF output: not available in Patagames, not available in free wrappers
' IronOCR: two lines
Dim result = New IronTesseract().Read("scanned-document.pdf")
result.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

The searchable PDF output capability — producing a PDF with an invisible text layer that makes the original document Ctrl+F searchable — requires either IronOCR or a complex hOCR-to-PDF pipeline using external tools. There is no Tesseract wrapper, free or commercial, that provides this in a single method call.

Preprocessing tells the same story. Low-quality scans — rotated, noisy, low-contrast — produce poor Tesseract output without preprocessing. Patagames has no preprocessing. You write the preprocessing code yourself using System.Drawing or ImageSharp or similar.

// IronOCR: built-in preprocessing pipeline for poor quality images
using IronOcr;

using var input = new OcrInput();
input.LoadImage("rotated-noisy-scan.jpg");
input.Deskew();          // correct rotation
input.DeNoise();         // remove scan noise
input.Contrast();        // improve contrast
input.Binarize();        // convert to black/white optimal for OCR
input.EnhanceResolution(300); // normalize DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// IronOCR: built-in preprocessing pipeline for poor quality images
using IronOcr;

using var input = new OcrInput();
input.LoadImage("rotated-noisy-scan.jpg");
input.Deskew();          // correct rotation
input.DeNoise();         // remove scan noise
input.Contrast();        // improve contrast
input.Binarize();        // convert to black/white optimal for OCR
input.EnhanceResolution(300); // normalize DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

Dim input As New OcrInput()
Using input
    input.LoadImage("rotated-noisy-scan.jpg")
    input.Deskew()          ' correct rotation
    input.DeNoise()         ' remove scan noise
    input.Contrast()        ' improve contrast
    input.Binarize()        ' convert to black/white optimal for OCR
    input.EnhanceResolution(300) ' normalize DPI

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

The image quality correction guide covers the full range of available filters and when to apply each one. For color-specific preprocessing, the image color correction guide provides additional options. None of this is available in Patagames regardless of the license tier purchased.

Value Over Free Tesseract Wrappers

The specific comparison here is between Patagames (commercial) and the free tesseractocr NuGet wrapper — both wrap Tesseract, both require tessdata, both have no preprocessing, both have no PDF support. The question is what Patagames adds that justifies the commercial price over the free alternative.

Patagames Approach to Language Configuration

Patagames uses a path string and a language concatenation string for multi-language OCR:

// Patagames multi-language: manual tessdata, string concatenation
using Patagames.Ocr;

using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng+fra+deu"); // tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata

using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
// Patagames multi-language: manual tessdata, string concatenation
using Patagames.Ocr;

using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng+fra+deu"); // tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata

using var bitmap = new Bitmap(imagePath);
return api.GetTextFromImage(bitmap);
Imports Patagames.Ocr

Using api = OcrApi.Create()
    api.Init("./tessdata", "eng+fra+deu") ' tessdata folder must contain eng.traineddata, fra.traineddata, deu.traineddata

    Using bitmap As New Bitmap(imagePath)
        Return api.GetTextFromImage(bitmap)
    End Using
End Using
$vbLabelText   $csharpLabel

This is functionally identical to the free charlesw/tesseract wrapper's multi-language syntax. You still download tessdata files manually, copy them to the correct directory, and reference them by code string. The commercial license provides no automation for that workflow.

IronOCR Approach to Language Configuration

IronOCR manages language data as NuGet packages with a strongly typed API:

// IronOCR multi-language: NuGet packages, strongly typed
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.German
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
ocr.AddSecondaryLanguage(OcrLanguage.German);

var result = ocr.Read(imagePath);
// IronOCR multi-language: NuGet packages, strongly typed
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.German
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
ocr.AddSecondaryLanguage(OcrLanguage.German);

var result = ocr.Read(imagePath);
Imports IronOcr

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.French)
ocr.AddSecondaryLanguage(OcrLanguage.German)

Dim result = ocr.Read(imagePath)
$vbLabelText   $csharpLabel

Language management through NuGet means the CI pipeline resolves language data the same way it resolves any other dependency. There is no tessdata directory to copy into Docker images, no deployment checklist item for "make sure tessdata is present," and no typo risk from hand-typing language code strings. The 125+ available language packs all install the same way.

The gap between Patagames and free wrappers is narrow — the commercial price buys primarily Windows binary convenience. The gap between Patagames and IronOCR is wide — the commercial price buys native PDF support, automatic preprocessing, searchable PDF output, cross-platform deployment, and structured result data.

API Mapping Reference

Patagames Tesseract.NET SDK IronOCR Equivalent
Tesseract.Net.SDK (NuGet) IronOcr (NuGet)
Patagames.Ocr (namespace) IronOcr (namespace)
OcrApi.Create() new IronTesseract()
api.Init(tessDataPath, "eng") ocr.Language = OcrLanguage.English (no path needed)
api.Init(path, "eng+fra") ocr.AddSecondaryLanguage(OcrLanguage.French)
api.GetTextFromImage(bitmap) ocr.Read(imagePath).Text
api.SetVariable("tessedit_pageseg_mode", ...) ocr.Configuration.PageSegmentationMode = ...
OcrBitmap.FromFile(path) input.LoadImage(path)
No PDF support ocr.Read("document.pdf").Text
No searchable PDF result.SaveAsSearchablePdf("output.pdf")
No preprocessing input.Deskew(), input.DeNoise(), input.Contrast(), etc.
No region OCR input.LoadImage(path, new CropRectangle(...))
No barcode reading ocr.Configuration.ReadBarCodes = true
No structured output result.Words, result.Lines, result.Pages
PageSegmentationMode enum TesseractPageSegmentationMode enum

For the complete IronOCR API surface, see the IronTesseract API reference and OcrResult API reference.

When Teams Consider Moving from Patagames Tesseract.NET SDK to IronOCR

The Linux Container Deployment

The most common forcing function is a migration from Windows Server to Linux containers. A team that built an internal document processing tool on Windows, using Patagames for OCR, discovers during a cloud migration project that the library simply does not run in a Docker container on Amazon ECS or Azure Container Instances. The Windows-only native binary has no Linux equivalent. The migration options are either maintain a separate Windows compute instance just for OCR (expensive and architecturally awkward) or replace the OCR library. IronOCR is a drop-in replacement from an API standpoint — the multi-step Patagames initialization sequence collapses to a single read call — and the application runs on Linux without any other changes. The IronOCR Docker guide covers the exact Dockerfile configuration for production container deployments.

The PDF Processing Requirement

Document management applications frequently start with image OCR and then add PDF processing requirements as the product evolves. With Patagames, PDF support requires integrating an external PDF rendering library, writing a rendering loop, and managing per-page image buffers. Teams that have built this wrapper code find it brittle — PDF rendering quality varies, page rotation handling requires additional logic, and adding password-protected PDF support requires another external dependency. IronOCR handles all of it natively. The PDF input guide covers single-page, multi-page, and password-protected PDFs. The transition eliminates the external PDF renderer dependency and all the code written to bridge it to Patagames.

The Pricing Transparency Problem

Patagames does not publish its license prices. Teams evaluating OCR libraries for a new project cannot budget for Patagames without engaging a sales process. IronOCR's pricing starts at $999 for a single-developer perpetual Lite license with no per-transaction cost. A small team can make an informed build-vs-buy decision without a sales call. For teams that previously chose Patagames on the assumption that commercial meant better-than-free, finding that IronOCR starts at $999 perpetual with public pricing — versus Patagames at an undisclosed commercial rate — often reframes the evaluation entirely. See the IronOCR licensing page for full tier details.

The Scan Quality Problem

Invoice processing, form OCR, and scanned document archival all produce images that require preprocessing. A Patagames-based pipeline for these workflows requires writing preprocessing code in System.Drawing or a third-party imaging library, tuning thresholds manually, and maintaining that code as input quality varies. Teams that have built this infrastructure know it takes 20-40 hours to get right. IronOCR's built-in preprocessing eliminates that investment — deskew, denoise, contrast, and binarization are single method calls that cover the cases causing most OCR accuracy problems on real-world scans. The low quality scan example demonstrates the accuracy difference preprocessing makes on degraded images.

The Searchable PDF Archive Requirement

Compliance, legal, and records management applications require searchable PDF output. A scanned document needs a text layer so users can search, copy, and highlight content in Acrobat or any PDF viewer. Patagames has no mechanism to produce searchable PDFs. Free Tesseract wrappers produce hOCR output that you can convert to a text layer using third-party tools, but that pipeline has multiple moving parts. IronOCR handles the full pipeline in a single method call — no external tools, no intermediate hOCR conversion step. Teams building archival systems discover this capability gap early and it is rarely a feature that can be added to Patagames through a workaround — it requires replacing the library.

Common Migration Considerations

Replacing the tessdata Directory with NuGet Packages

Patagames requires a tessdata directory populated with .traineddata files for each language. The IronOCR migration removes this entirely. Language data installs as a NuGet package:

dotnet add package IronOcr.Languages.English
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.English
dotnet add package IronOcr.Languages.French
SHELL

The language is then referenced through the strongly typed OcrLanguage enum. No path configuration, no deployment checklist, no missing-tessdata production incidents.

Migrating the OcrApi Initialization Pattern

The Patagames OcrApi.Create() / api.Init() pattern has a direct IronOCR equivalent. The migration is mechanical:

// Patagames: before
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng");
using var bitmap = new Bitmap(imagePath);
var text = api.GetTextFromImage(bitmap);

// IronOCR: after
var text = new IronTesseract().Read(imagePath).Text;
// Patagames: before
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng");
using var bitmap = new Bitmap(imagePath);
var text = api.GetTextFromImage(bitmap);

// IronOCR: after
var text = new IronTesseract().Read(imagePath).Text;
Imports Patagames.Ocr
Imports System.Drawing

' Patagames: before
Using api = OcrApi.Create()
    api.Init("./tessdata", "eng")
    Using bitmap As New Bitmap(imagePath)
        Dim text = api.GetTextFromImage(bitmap)
    End Using
End Using

' IronOCR: after
Dim text = New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

For multi-language configurations, "eng+fra+deu" becomes individual AddSecondaryLanguage calls. The Patagames SetVariable("tessedit_pageseg_mode", ...) raw string call maps to ocr.Configuration.PageSegmentationMode, which is strongly typed and discoverable through IntelliSense.

System.Drawing Dependency Removal

Patagames depends on System.Drawing.Bitmap. IronOCR accepts file paths, byte arrays, streams, URLs, and System.Drawing.Bitmap objects, but the typical usage does not require System.Drawing at all. Teams migrating from Patagames can remove the System.Drawing dependency from classes that existed solely to construct Bitmap objects for passing to the OCR API. This cleans up nullable warnings on non-Windows platforms and removes a dependency that Microsoft has formally marked as not recommended for new development on non-Windows targets. The image input guide lists all supported input types.

Adding Preprocessing for Existing Workflows

If the existing Patagames implementation includes a preprocessing step written in System.Drawing or ImageSharp, that code can often be removed entirely when switching to IronOCR. Test the IronOCR output without preprocessing first. For images where automatic preprocessing is insufficient, apply explicit filters through OcrInput:

using var input = new OcrInput();
input.LoadImage(imagePath);
input.Deskew();
input.DeNoise();
var result = new IronTesseract().Read(input);
using var input = new OcrInput();
input.LoadImage(imagePath);
input.Deskew();
input.DeNoise();
var result = new IronTesseract().Read(input);
Imports IronOcr

Using input As New OcrInput()
    input.LoadImage(imagePath)
    input.Deskew()
    input.DeNoise()
    Dim result = New IronTesseract().Read(input)
End Using
$vbLabelText   $csharpLabel

The image orientation correction guide covers deskew and rotation detection in detail. In most cases, IronOCR's automatic preprocessing produces better output than a manually tuned System.Drawing preprocessing pipeline.

Additional IronOCR Capabilities

Beyond the core comparison points, IronOCR provides capabilities not covered in the sections above:

  • Scanned document processing: Automatic handling of multi-page scanned documents including TIFF stacks and multi-page PDFs in a single input load.
  • Async OCR: Native async support for ASP.NET Core workloads, keeping request threads free during OCR processing.
  • Speed optimization configuration: Control the speed/accuracy tradeoff explicitly for batch processing workloads where throughput matters more than per-document accuracy.
  • Specialized document types: Dedicated guides and optimized configurations for passports, license plates, MICR cheque lines, handwriting, and table extraction — all outside Patagames' scope.
  • Confidence-based filtering: Per-word and per-page confidence scores enable programmatic quality gates — reject or flag low-confidence results without manual review.
  • Image color correction: Color channel isolation and inversion filters improve recognition accuracy on documents with colored backgrounds or reverse-contrast text.

.NET Compatibility and Future Readiness

IronOCR targets .NET 6, .NET 7, .NET 8, and .NET 9 with active support, alongside .NET Standard 2.0 for compatibility with .NET Framework projects still in maintenance. The library ships cross-platform runtime identifiers (win-x64, win-x86, linux-x64, osx-x64, osx-arm64) as part of its NuGet dependency graph, ensuring that dotnet publish for any target runtime produces a self-contained deployment without additional configuration. Patagames Tesseract.NET SDK does not publish Linux or macOS runtime identifiers, meaning it cannot participate in the cross-platform deployment model that .NET 6+ is built around. As .NET Framework 4.x workloads migrate to .NET 8 and teams adopt Linux-based cloud infrastructure, the Windows-only constraint becomes a blocker rather than a minor limitation. IronOCR's development cadence follows the .NET release cycle, with documented compatibility for each new .NET version at release.

Conclusion

Patagames Tesseract.NET SDK sits in a difficult market position: it charges commercial prices for Tesseract, an open-source engine available for free, while removing the cross-platform capability that free wrappers retain. The value proposition — commercial support, pre-built binaries, simplified API — was more compelling when building Tesseract for Windows was genuinely complex. In 2026, free wrappers like tesseractocr also ship pre-built Windows binaries, and the "simplified API" over raw Tesseract is a thin layer that still exposes tessdata path management and raw variable strings.

The Windows-only constraint is the clearest reason to reconsider Patagames. Modern .NET development workflows run CI on Linux, deploy to Linux containers, and increasingly target macOS for developer machines. A library that loads only on Windows is not a minor inconvenience — it is an architectural constraint that forces the OCR component to be hosted on a Windows-specific service, adds deployment complexity, and limits future flexibility. Patagames offers no migration path for teams that need to cross that boundary.

IronOCR's commercial justification is specific and measurable. It delivers native PDF support, automatic preprocessing, searchable PDF output, cross-platform deployment, and structured result data — none of which exist in Patagames regardless of license tier. The pricing is public ($999 perpetual for a single developer), the capabilities beyond free Tesseract wrappers are documented and concrete, and the deployment story is the same whether the target is Windows Server, Docker on Linux, or an ARM Mac.

For teams currently using Patagames on a Windows-only deployment and satisfied with the support relationship, switching has a cost. But for any team evaluating options today — especially those planning cloud migration, containerization, or cross-platform support — the combination of Windows lock-in and non-transparent commercial pricing for free-engine wrapping makes Patagames a difficult choice to justify when IronOCR solves the problems Tesseract wrappers inherently cannot.

Please notePDFium, Tesseract, and iText are registered trademarks of their respective owners. This site is not affiliated with, endorsed by, or sponsored by Chromium Project, Google, or iText Group. All product names, logos, and brands are property of their respective owners. Comparisons are for informational purposes only and reflect publicly available information at the time of writing.

Frequently Asked Questions

What is Patagames Tesseract.Net SDK?

Patagames Tesseract.Net SDK is an OCR solution used by developers and enterprises to extract text from images and documents. It is one of several OCR options evaluated alongside IronOCR for .NET application development.

How does IronOCR compare to Patagames Tesseract.Net SDK for .NET developers?

IronOCR is a NuGet-native .NET OCR library using IronTesseract as its core engine. Compared to Patagames Tesseract.Net SDK, it offers simpler deployment (no SDK installers), flat-rate pricing, and a clean C# API without COM interop or cloud dependencies.

Is IronOCR easier to set up than Patagames Tesseract.Net SDK?

IronOCR installs via a single NuGet package. There are no SDK installers, license files to copy, COM components to register, or separate runtime binaries to manage. The entire OCR engine is bundled in the package.

What accuracy differences exist between Patagames Tesseract.Net SDK and IronOCR?

IronOCR achieves high recognition accuracy for standard business documents, invoices, receipts, and scanned forms. For highly degraded documents or uncommon scripts, accuracy varies by source quality. IronOCR includes image preprocessing filters to improve recognition on low-quality inputs.

Does IronOCR support PDF text extraction?

Yes. IronOCR extracts text from both native PDFs and scanned PDF images in a single call. It also supports multi-page TIFF files, images, and streams. For scanned PDFs, OCR is applied page-by-page with per-page result objects.

How does Patagames Tesseract.Net SDK licensing compare to IronOCR?

IronOCR uses a flat-rate perpetual license with no per-page or per-scan charges. Organizations processing high document volumes pay the same license cost regardless of volume. Details and volume pricing are on the IronOCR licensing page.

What languages does IronOCR support?

IronOCR supports 127 languages via separate NuGet language packs. Adding a language requires a single 'dotnet add package IronOcr.Languages.{Language}' command. No manual file placement or path configuration is needed.

How do I install IronOCR in a .NET project?

Install via NuGet: 'Install-Package IronOcr' in Package Manager Console or 'dotnet add package IronOcr' in the CLI. Additional language packs are installed the same way. No native SDK installer is required.

Is IronOCR suitable for Docker and containerized deployments, unlike Patagames Tesseract?

Yes. IronOCR works in Docker containers via its NuGet package. The license key is set via an environment variable. No license files, SDK paths, or volume mounts are required for the OCR engine itself.

Can I try IronOCR before purchasing, compared to Patagames Tesseract?

Yes. IronOCR trial mode processes documents and returns OCR results with a watermark overlay on output. You can verify accuracy on your own documents before purchasing a license.

Does IronOCR support barcode reading alongside text extraction?

IronOCR focuses on text extraction and OCR. For barcode reading, Iron Software provides IronBarcode as a companion library. Both are available individually or as part of the Iron Suite bundle.

Is it easy to migrate from Patagames Tesseract.Net SDK to IronOCR?

Migration from Patagames Tesseract.Net SDK to IronOCR typically involves replacing initialization sequences with IronTesseract instantiation, removing COM lifecycle management, and updating API calls. Most migrations reduce code complexity significantly.

Kannaopat Udonpant
Software Engineer
Before becoming a Software Engineer, Kannapat completed a Environmental Resources PhD from Hokkaido University in Japan. While pursuing his degree, Kannapat also became a member of the Vehicle Robotics Laboratory, which is part of the Department of Bioproduction Engineering. In 2022, he leveraged his C# skills to join Iron Software's engineering ...
Read More

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me