Using OcrFormatProvider
Since Q1 2025 the RadPdfProcessing library supports Optical Character Recognition (OCR). OCR is the electronic or mechanical conversion of images of typed, handwritten, or printed text into machine-encoded text from a scanned document. The library uses the OcrFormatProvider class that allows you to import an image which is returned as a RadFixedPage. By default, the OcrFormatProvider takes as a parameter a TesseractOcrProvider implementation which is achieved by using the third-party library Tesseract, however you can provide any custom implementation instead.
You can find all the dependencies and required steps for the implementation in the Prerequisites article.
TesseractOcrProvider Public API
| Method/Property | Description |
|---|---|
| TesseractOcrProvider(string dataPath) | Constructor that takes as a parameter the path to the parent directory that contains the "tessdata" folder. |
| LanguageCodes | The language codes to use for the Tesseract OCR engine. You can find the corresponding trained data for each language and their codes here. The value is "eng" by default. |
| CorrectVerticalPosition | Indicates whether the OCR processor will try to correct the vertical position of the text. (Not available in .NET Framework) |
| DataPath | The path to the parent directory that contains the "tessdata" folder. |
| ParseLevel | Indicates the level of parsing that the OCR processor will perform - OcrParseLevel.Line or OcrParseLevel.Word. |
| GetAllTextFromImage | Extracts all text from an image and returns it as a single string. |
| GetTextFromImage | Extracts the text from an image and returns the words and their bounding rectangles. |
// Requirement for Images in .NET Standard - https://docs.telerik.com/devtools/document-processing/libraries/radpdfprocessing/cross-platform/images
//FixedExtensibilityManager.ImagePropertiesResolver = new ImagePropertiesResolver();
TesseractOcrProvider tesseractOcrProvider = new TesseractOcrProvider(".");
tesseractOcrProvider.LanguageCodes = new List<string>() { "eng" };
//tesseractOcrProvider.CorrectVerticalPosition = false; // Available in .NET Standard
tesseractOcrProvider.DataPath = @"..\..\..\";
tesseractOcrProvider.ParseLevel = OcrParseLevel.Line;
string imagePath = @"..\..\..\images\image.png";
string imageText = tesseractOcrProvider.GetAllTextFromImage(File.ReadAllBytes(imagePath));
Dictionary<Rectangle, string> imageTextAndTextDimentions = tesseractOcrProvider.GetTextFromImage(File.ReadAllBytes(imagePath));
OcrFormatProvider OcrProvider = new OcrFormatProvider(tesseractOcrProvider);
RadFixedDocument document = new RadFixedDocument();
RadFixedPage page = new RadFixedPage();
page = OcrProvider.Import(new FileStream(imagePath, FileMode.Open), null);
document.Pages.Add(page);
string outputPath = "output.pdf";
PdfFormatProvider pdfFormatProvider = new PdfFormatProvider();
using (Stream output = File.OpenWrite(outputPath))
{
pdfFormatProvider.Export(document, output, TimeSpan.FromSeconds(10));
}
You can find a complete example of implementing an OcrFormatProvider in our SDK repository.