Make any PDF have Searchable, Copyable Text
IronOCR allows you to embed the recognized text from scanned documents directly into PDFs, making them fully searchable and selectable—perfect for OCR workflows and archival indexing.
using IronOcr;
using System;
class MakePdfSearchable
{
static void Main()
{
var ocr = new IronTesseract();
// Optionally enable searchable PDF rendering
ocr.Configuration.RenderSearchablePdf = true;
using var input = new OcrInput();
// Load a scanned PDF document
input.LoadPdf("scanned_document.pdf");
// Preprocessing: deskew might help improve OCR accuracy
input.Deskew();
// Perform OCR on the document
var result = ocr.Read(input);
// Save the searchable PDF (with embedded text)
result.SaveAsSearchablePdf("searchable_document.pdf");
Console.WriteLine("Searchable PDF saved: searchable_document.pdf");
}
}
using IronOcr;
using System;
class MakePdfSearchable
{
static void Main()
{
var ocr = new IronTesseract();
// Optionally enable searchable PDF rendering
ocr.Configuration.RenderSearchablePdf = true;
using var input = new OcrInput();
// Load a scanned PDF document
input.LoadPdf("scanned_document.pdf");
// Preprocessing: deskew might help improve OCR accuracy
input.Deskew();
// Perform OCR on the document
var result = ocr.Read(input);
// Save the searchable PDF (with embedded text)
result.SaveAsSearchablePdf("searchable_document.pdf");
Console.WriteLine("Searchable PDF saved: searchable_document.pdf");
}
}
Imports IronOcr
Imports System
Friend Class MakePdfSearchable
Shared Sub Main()
Dim ocr = New IronTesseract()
' Optionally enable searchable PDF rendering
ocr.Configuration.RenderSearchablePdf = True
Dim input = New OcrInput()
' Load a scanned PDF document
input.LoadPdf("scanned_document.pdf")
' Preprocessing: deskew might help improve OCR accuracy
input.Deskew()
' Perform OCR on the document
Dim result = ocr.Read(input)
' Save the searchable PDF (with embedded text)
result.SaveAsSearchablePdf("searchable_document.pdf")
Console.WriteLine("Searchable PDF saved: searchable_document.pdf")
End Sub
End Class
Summary
- Install IronOCR via NuGet (
Install-Package IronOcr
) to accessIronTesseract
,OcrInput
, andOcrResult
. - Use
Configuration.RenderSearchablePdf = true
if not using default behavior. - Input is added via
input.LoadPdf()
orinput.AddImage()
. - Optional enhancements like
Deskew()
improve OCR quality. - Use
SaveAsSearchablePdf(...)
, or output to byte/stream variants for embedding or further processing.
Additional Features
Searchable PDF via byte or stream output
byte[] pdfBytes = result.SaveAsSearchablePdfBytes(); Stream pdfStream = result.SaveAsSearchablePdfStream();
byte[] pdfBytes = result.SaveAsSearchablePdfBytes(); Stream pdfStream = result.SaveAsSearchablePdfStream();
Dim pdfBytes() As Byte = result.SaveAsSearchablePdfBytes() Dim pdfStream As Stream = result.SaveAsSearchablePdfStream()
$vbLabelText $csharpLabelBatch or image input workflows: You can also load images (e.g. TIFF, PNG) and convert:
using var input = new OcrInput(); input.AddImage("page1.png"); input.AddImage("page2.jpg"); input.Deskew(); var result = ocr.Read(input); result.SaveAsSearchablePdf("searchable.pdf");
using var input = new OcrInput(); input.AddImage("page1.png"); input.AddImage("page2.jpg"); input.Deskew(); var result = ocr.Read(input); result.SaveAsSearchablePdf("searchable.pdf");
Dim input = New OcrInput() input.AddImage("page1.png") input.AddImage("page2.jpg") input.Deskew() Dim result = ocr.Read(input) result.SaveAsSearchablePdf("searchable.pdf")
$vbLabelText $csharpLabel