Self-hosted OCR that turns scans and image-based PDFs into searchable, machine-readable text
Apryse OCR converts scanned PDFs into searchable PDFs and structured text with position data, in over 80 languages. It runs inside your own application as an add-on to the Apryse Server SDK, on your infrastructure. No pages leave your environment.
Works with your stack
Apryse OCR runs natively in the languages and environments your team already uses. Native bindings for C++, C# (.NET), Java, Python, Node.js, Go, PHP, Ruby, VB, and Objective-C — on Windows, Linux, and macOS (x64 with ARM coming soon).
Node.js and Python install through npm and pip on Windows and Linux; Java installs through Maven; C/C++ and the remaining languages install by expanding the module archive into your existing SDK directory.
npm install @pdftron/ocr
pip install --extra-index-url=https://pypi.apryse.com apryse-ocr
PDFNet.Initialize() must be called before any OCR operation. The OCRTest sample application ships in the main SDK download.
Node.js and Python install through npm and pip on Windows and Linux; Java installs through Maven; C/C++ and the remaining languages install by expanding the module archive into your existing SDK directory. PDFNet.Initialize() must be called before any OCR operation.
npm install @pdftron/ocr
pip install --extra-index-url=https://pypi.apryse.com apryse-ocr
Making a scanned PDF searchable is two calls — set a language, run the module:
Trusted for document workflows where accuracy, control, and deployment flexibility matter.
OCR at a glance
Apryse OCR is an embeddable, self-hosted OCR SDK for offline optical character recognition. It reads scanned images and image-based PDFs, recognizes printed and machine-generated characters, and returns either a searchable PDF with a selectable text layer or structured text with position data for downstream processing.
What comes out
OCR produces two things directly: a PDF with an invisible, selectable text layer, and structured text you can use without touching the PDF at all.
Structured output
The structured output is nested — pages contain paragraphs, which contain lines, which contain words. Each page carries its number, DPI, and coordinate origin (top-left or PDF-style bottom-left). Each word carries its bounding box x and y, length, font size, text, and orientation. Each line optionally carries a bounding box.
That structure is what makes results reviewable rather than opaque: every recognized word can be traced to a location on the page and overlaid, highlighted, or validated before it is trusted.
Because the output is a PDF, the rest of the Server SDK picks it up from there. Converting a searchable PDF to PDF/A is part of the base package. Converting it to DOCX, XLSX, PPTX, or HTML uses the Structured Output Module, a separate add-on on the same SDK.
Language coverage and mixing
The default OCR module includes models optimized for English, plus multilingual models covering over 80 languages across six script groups: Latin, Cyrillic, CJK, Devanagari, Arabic, and Other (Greek, Georgian, Tamil, Telugu, Thai).
More than one language can be recognized in the same document. The rules:
- English can be mixed with any other language.
- Languages within the same script group can be mixed with each other — any combination of Latin languages, for example.
- Korean can only be mixed with English.
- Languages in the Other group cannot be mixed with each other, and can only be mixed with English.
- Any other combination returns an error.
Text orientation detection is not supported for Cyrillic, Devanagari, and Arabic languages, or for Korean.
How it works
OCR is an add-on module to the Apryse Server SDK. You download the module, install it alongside the SDK, and call it from the same API you already use for the rest of your document pipeline.
Hand it the page
Pass a scanned image, a set of images, or an image-based PDF. The module converts supported image formats to PDF internally, so all inputs follow the same path.
Set languages and zones
Select one or more target languages, restrict recognition to zones or exclude them, and override the input DPI if the source resolution is known.
Recognize
The engine identifies characters and their positions on the page. Processing runs on CPU inside your environment. No page content is uploaded.
Take the output
Write the results back as an invisible text layer to produce a searchable PDF, or pull JSON or XML with word-level position data for validation, indexing, overlay, or downstream extraction.
Typical workflow
Scanned image or image-based PDF → format conversion → language, zone, and DPI options → recognition → JSON/XML validation pass → searchable PDF → search index, database, extraction pipeline, or LLM.
How Apryse OCR compares with other approaches
Teams adding OCR to an application usually weigh four options: a cloud OCR API, an open-source engine, an enterprise IDP platform, or a general-purpose AI model. Apryse OCR is the embedded SDK approach.
Over a cloud OCR API
A cloud API sends every page to infrastructure you do not control, and offline or disconnected operation is not available. Apryse OCR runs inside your application, on your own servers. For teams handling regulated, privileged, or personal data — or working under data residency requirements — that is usually the deciding factor.
Over an open-source OCR engine
Open-source engines are free to adopt and expensive to operate: your team owns tuning, preprocessing, language packs, output formats, upgrades, and every accuracy regression. Apryse OCR is a commercially supported module with searchable PDF and JSON/XML output built in, integrated with the same SDK that handles the rest of your document work. The tradeoff is a license cost against engineering and maintenance time.
Over an enterprise IDP platform
IDP platforms are built around business-user workflows: queues, review screens, and low-code configuration. Apryse OCR is an SDK module, not a platform. It gives developers direct control over the recognition step inside the application they are building, rather than routing documents into a separate system.
Over a general-purpose AI model
A general-purpose LLM combines OCR, extraction, and interpretation, making results less predictable. Apryse OCR delivers auditable positional text on your CPU without sending pages to a model provider. Using OCR first also lowers costs: models process text far more efficiently than page images, reducing token usage while providing cleaner input.
Deployment and integration
Apryse OCR is embedded in your application and runs on infrastructure controlled by your organization.
Documents are processed inside your environment and are not sent to Apryse or a third party for processing.
Download the OCR Module →
Common use cases
Use OCR wherever image-based documents enter an application and need to become text: records systems, claims and lending workflows, contract repositories, archives, and search indexes.
Financial services
Convert scanned cheques, bank statements, and account documents into searchable, machine-readable records for data entry automation.
Insurance
Read scanned claims packets, loss forms, and supporting records so their contents can be indexed and routed.
Legal
Make scanned discovery material, correspondence, and case files full-text searchable inside controlled infrastructure.
Healthcare and life sciences
Convert scanned clinical and administrative documents into searchable text in private deployment environments.
Government and public sector
Digitize scanned archives and records so they can be searched, indexed, and preserved on-premises.
Logistics and trade
Read invoices, shipping records, and customs paperwork arriving as scans from varied sources.
Accessibility
Add selectable text layers to scanned documents so screen readers and other assistive technology can reach the content.
Frequently asked questions
Apryse OCR is a self-hosted add-on module for the Apryse Server SDK that converts scanned images and image-based PDFs into machine-readable text. It produces searchable PDFs with selectable text layers, or structured JSON and XML containing text and position data. It runs inside an application, on infrastructure controlled by the customer.
No. OCR runs inside your application on your own infrastructure. Pages are not sent to Apryse or to a third-party service for processing.
The default OCR module supports over 80 languages across Latin, Cyrillic, CJK, Devanagari, Arabic, and other scripts including Greek, Georgian, Tamil, Telugu, and Thai. The Alternative OCR module covers English, French, German, Italian, Spanish, and Russian. IRIS OCR adds Chinese, Japanese, and Korean to that set.
Start with the default OCR module — it has the best accuracy and the widest language coverage, and needs no GPU. Choose the Alternative OCR module when processing time and memory footprint matter more than peak accuracy. Choose IRIS OCR for pages with multiple disconnected text regions, such as magazine covers or CAD drawings.
Yes, within limits. English can be mixed with any other language, and languages within the same script group can be mixed with each other. Korean can only be mixed with English, and the languages in the Other group can only be mixed with English rather than with each other. Any other combination returns an error.
A color or grayscale image at approximately 300 DPI is the ideal input, but with V12 image quality can be as low as 75dpi and have some level of recognized text. Recognition quality depends on the source: resolution, contrast, skew, and scan noise all affect the result.
No. OCR recognizes printed and machine-generated characters. Handwritten content requires the Handwriting ICR Module, which uses neural networks trained to adapt to individual writing styles.
Yes. JSON and XML output carries text and position data, so recognized content can be indexed, overlaid, or passed to Smart Data Extraction for tables, key-value pairs, and form fields before reaching a downstream application or model. Converting pages to text before the model is called also saves token cost, since a page sent as an image consumes considerably more tokens than the same page sent as text.
OCR is a Server SDK module. Web and mobile front ends call it server-side, and the resulting searchable PDF is then viewed or annotated in the Apryse Web SDK or Mobile SDK.
Windows, Linux, and macOS on x64. 32-bit platforms are not supported for add-on modules. Node.js and Python packages are available for Windows and Linux; other languages install by expanding the module archive into the SDK directory. ARM and Apple M architecture are coming soon.
OCR is licensed as an add-on package to the Apryse Server SDK and requires a separate module download. IRIS OCR is an additional add-on package as it is a commercial third-party engine. Trial keys have unlimited access to all add-on modules during evaluation. Contact Apryse for pricing based on your deployment and the capabilities you need.
Documentation and resources
Documentation
- OCR overview
- OCR workflow:output, language, and quality
- IRIS OCR
- OCR samples
- OCR APIs
- Module download
- Supported platforms
- Server SDK get started
Related capabilities
- Handwriting ICR -> TBD (new)
- Smart Data Extraction
- Structured Output Module
- Apryse Server SDK
Guides and further reading
- How to Build Optical Character Recognition (OCR) in Python
- Cross-Platform OCR in .NET with Apryse
- Unleashing The Power of OCR with JavaScript
- Exporting OCR Data to JSON with Apryse
- How to Identify OCR Needs in a Folder of PDFs
- Convert Images to Searchable PDF with OCR in C#
- Convert an Image to Grayscale PDF for Better OCR in C#
- Redefining Enterprise OCR: AI Precision Meets Total Data Control
- Server-Side OCR: How to Process Documents at Scale Without Third-Party APIs
- Finding the Right OCR SDK for Your Business
- Unlock Efficiency with Apryse OCR and ICR
- OCR vs. Intelligent Extraction: AI-Ready Document Pipelines for Financial Services
- Why Document Preparation Goes Beyond OCR
- Building a Secure Extraction Pipeline with the Apryse Server SDK (IDP vs. traditional OCR)
- How to Extract Text from PDFs Using AI: From Basic OCR to Smart Data Extraction


