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
$vbLabelText   $csharpLabel

Summary

  • Install IronOCR via NuGet (Install-Package IronOcr) to access IronTesseract, OcrInput, and OcrResult.
  • Use Configuration.RenderSearchablePdf = true if not using default behavior.
  • Input is added via input.LoadPdf() or input.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   $csharpLabel
  • Batch 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