Comment effectuer une reconnaissance optique de caractères (OCR) à partir d'un PDF en C# : extraire du texte de documents numérisés avec .NET
Les documents PDF numérisés représentent un défi constant pour les développeurs .NET : le texte n'existe que sous forme d'images, ce qui rend impossible la recherche, la copie ou le traitement par programmation. La reconnaissance optique de caractères (OCR) résout ce problème en convertissant les images numérisées en données modifiables et consultables, transformant ainsi les documents papier, les images capturées par appareil photo ou tout fichier PDF basé sur une image en texte lisible par machine. Que l'objectif soit de numériser des archives papier, d'automatiser l'extraction de données ou de construire des chaînes de traitement de documents, la capacité d'effectuer une reconnaissance optique de caractères (OCR) sur des fichiers PDF en C# est une fonctionnalité essentielle.
IronOCR est une bibliothèque OCR .NET basée sur le moteur Tesseract 5 avec des améliorations supplémentaires en matière de précision. Il permet aux développeurs d'extraire du texte de n'importe quel document PDF — numérisé ou non — avec un nombre réduit de lignes de code. Cet article décrit les principaux flux de travail : OCR PDF de base, traitement sélectif des pages, extraction ciblée par région et prétraitement d'images pour les numérisations complexes.
Comment effectuez-vous un OCR sur un PDF en C# ?
La méthode la plus rapide pour extraire du texte PDF dans .NET commence par l'installation IronOCR via NuGet . Ouvrez un terminal dans le répertoire de votre projet et exécutez :
dotnet add package IronOcr
Une fois le package installé, le programme suivant, exécuté au niveau supérieur, lit un PDF numérisé et imprime le texte extrait :
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");
// Run recognition
OcrResult result = ocr.Read(input);
// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");
// Run recognition
OcrResult result = ocr.Read(input);
// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load the PDF and perform OCR
Using input As New OcrInput()
input.LoadPdf("scanned-report.pdf")
' Run recognition
Dim result As OcrResult = ocr.Read(input)
' Access the extracted text
Dim text As String = result.Text
Console.WriteLine(text)
End Using
La classe IronTesseract enveloppe Tesseract 5 avec des optimisations natives .NET pour les cibles .NET Core et .NET Framework. L'objet OcrInput gère le chargement des PDF et le rendu interne des pages. Lorsque Read est appelé, le processus OCR analyse chaque page et renvoie un OcrResult contenant le texte intégral extrait, ainsi que des données structurées sur les paragraphes, les lignes, les mots et leurs coordonnées en pixels.
Le résultat peut être enregistré dans un fichier texte, transmis à un processus de traitement ultérieur, stocké dans une base de données ou intégré à un pipeline d'indexation de documents. Pour plus d'informations sur le moteur sous-jacent, consultez la documentation de Tesseract OCR et la référence de l'API IronOCR .
Entrée

Sortie

Comment lire des pages spécifiques d'un fichier PDF ?
Traiter chaque page d'un long document est une perte de temps et de mémoire alors que seules certaines pages contiennent des informations pertinentes. IronOCR vous permet de cibler des pages spécifiques en transmettant des indices de pages basés sur zéro à LoadPdf :
using IronOcr;
using System.Collections.Generic;
var ocr = new IronTesseract();
// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };
using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using System.Collections.Generic;
var ocr = new IronTesseract();
// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };
using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System.Collections.Generic
Dim ocr As New IronTesseract()
' Specify pages to process (zero-based: 0 = first page)
Dim targetPages As New List(Of Integer) From {0, 2, 4}
Using input As New OcrInput()
input.LoadPdf("lengthy-document.pdf", pageIndices:=targetPages)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Le chargement sélectif des pages réduit à la fois le temps de traitement et la consommation de mémoire, ce qui est important lors du traitement d'archives de plusieurs centaines de pages où seules quelques pages contiennent les données nécessaires. La convention d'indexation à partir de zéro correspond aux collections .NET standard : la page d'index 0 correspond à la première page du document.
Pour les documents dont les pages concernées ne sont pas connues à l'avance, envisagez d'effectuer d'abord une première analyse rapide de l'ensemble du document avec une résolution DPI réduite afin d'identifier les numéros de page, puis une seconde analyse avec les paramètres complets uniquement sur ces pages.
En savoir plus sur le contrôle au niveau de la page dans la documentation sur la sélection de pages IronOCR.
Comment extraire des données d'une région spécifique d'une page ?
Le traitement des factures, la numérisation des formulaires et l'analyse de documents structurés nécessitent souvent l'extraction de texte à partir d'une zone définie plutôt que la numérisation d'une page entière. IronOCR prend en charge l'OCR ciblé par région via le paramètre ContentAreas, qui accepte un tableau d'objets Rectangle spécifiant quelles parties de chaque page analyser :
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
new Rectangle(130, 290, 250, 50) // Invoice number field
};
using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
new Rectangle(130, 290, 250, 50) // Invoice number field
};
using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
' Define the scan region: X, Y, Width, Height (all in pixels from top-left)
Dim invoiceFields As Rectangle() = {
New Rectangle(130, 290, 250, 50) ' Invoice number field
}
Using input As New OcrInput()
input.LoadPdf("invoice.pdf", contentAreas:=invoiceFields)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Le constructeur Rectangle prend quatre paramètres entiers : la coordonnée X, la coordonnée Y, la largeur et la hauteur - tous mesurés en pixels depuis le coin supérieur gauche de la page rendue. Cibler une petite région plutôt qu'une page entière réduit à la fois le temps de reconnaissance optique de caractères et le risque que le moteur capte du bruit environnant ou des champs de texte sans rapport.
Pour les workflows de traitement de factures par lots, combinez l'extraction par région avec l'itération sur result.Pages pour extraire des données structurées à partir de la même position de champ sur des centaines de documents. Chaque page de résultats affiche indépendamment le texte reconnu pour sa zone de contenu.
L' exemple de zones de contenu IronOCR fournit des options de configuration supplémentaires pour les scénarios multi-régions.
Entrée

Sortie

Comment améliorer la précision de la reconnaissance optique de caractères (OCR) sur les documents numérisés ?
Les documents numérisés du monde réel présentent fréquemment des problèmes de qualité : pages déformées, faible résolution ou bruit numérique introduit par le matériel ou le logiciel de numérisation. IronOCR comprend un ensemble de filtres de prétraitement d'images qui corrigent ces problèmes avant l'exécution du moteur de reconnaissance :
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);
// Apply image correction filters
input.Deskew(); // Automatically straighten rotated pages
input.DeNoise(); // Remove scanning artifacts and speckles
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);
// Apply image correction filters
input.Deskew(); // Automatically straighten rotated pages
input.DeNoise(); // Remove scanning artifacts and speckles
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr = New IronTesseract()
Using input = New OcrInput()
' Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi:=300)
' Apply image correction filters
input.Deskew() ' Automatically straighten rotated pages
input.DeNoise() ' Remove scanning artifacts and speckles
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Le paramètre dpi contrôle la résolution à laquelle les pages PDF sont rendues avant que la reconnaissance ne s'exécute. Des valeurs plus élevées (de 200 à 300 DPI) améliorent la précision des documents contenant du texte petit ou dense, au prix d'une consommation de mémoire légèrement supérieure lors du traitement. La méthode Deskew détecte et corrige automatiquement la rotation des pages. DeNoise élimine les taches et artefacts qui peuvent perturber l'étape de reconnaissance des caractères.
Pour les documents nécessitant une correction d'image plus poussée, IronOCR propose également une amélioration du contraste, une binarisation (conversion des pages en noir et blanc) et des ajustements d'échelle. La combinaison séquentielle de plusieurs filtres permet de récupérer du texte exploitable à partir de numérisations qui, autrement, produiraient un résultat illisible. Consultez la référence des filtres d'image IronOCR pour la liste complète des opérations de prétraitement disponibles.
Comment gérez-vous les documents protégés par mot de passe et multiformats ?
IronOCR ne se limite pas aux fichiers PDF standard. La bibliothèque gère une gamme de scénarios d'entrée qui apparaissent fréquemment dans les flux de travail de traitement de documents.
Les fichiers PDF protégés par mot de passe sont pris en charge en transmettant les informations d'identification lors de la construction des données d'entrée :
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("protected.pdf", password:="secret123")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Formats d'image -- PNG, JPEG, TIFF, BMP, GIF et TIFF multipages -- sont chargés avec les méthodes correspondantes LoadImage ou LoadImageFrames. Les mêmes filtres de prétraitement et options de ciblage régional s'appliquent quel que soit le format d'entrée.
Les documents multilingues sont gérés par le système de packs de langues d'IronOCR. La bibliothèque est livrée avec l'anglais par défaut et prend en charge plus de 125 packs linguistiques supplémentaires couvrant le latin, le cyrillique, le CJC, l'arabe et d'autres écritures. Chargez des langues supplémentaires avant d'appeler Read :
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
Pour les documents qui mélangent plusieurs langues sur la même page, le mode MultiLanguage est disponible. Ceci est particulièrement précieux pour le traitement des factures dans les environnements internationaux où les en-têtes, les lignes de commande et les adresses peuvent apparaître dans différentes langues.
Le déploiement fonctionne sur Windows, Linux, macOS et dans les environnements cloud, y compris Azure et les conteneurs Docker.
Comment créer des PDF consultables à partir de documents numérisés ?
Au-delà de l'extraction de texte en chaînes de caractères, IronOCR peut produire un PDF consultable : un PDF où l'image numérisée originale est préservée comme couche visuelle tandis qu'une couche de texte invisible est intégrée pour les opérations de recherche et de copie. Il s'agit du format standard produit par les scanners de documents Professional .
La fonctionnalité de PDF recherchable de IronOCR accepte un OcrResult et écrit un nouveau fichier PDF :
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");
OcrResult result = ocr.Read(input);
// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");
OcrResult result = ocr.Read(input);
// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("scanned-archive.pdf")
Dim result As OcrResult = ocr.Read(input)
' Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf")
End Using
Le fichier de sortie peut être ouvert dans n'importe quel lecteur PDF. Les opérations de sélection, de recherche et de copie de texte fonctionnent sur la couche de texte intégrée tout en préservant l'apparence originale du scan. Ce format est généralement requis pour les archives de conformité, les référentiels de documents juridiques et les systèmes de gestion de contenu Enterprise .
Pour d'autres formats de sortie, l'objet OcrResult expose également des scores de confiance par page, des boîtes englobantes au niveau des mots et des données paragraphes structurées - toutes utiles pour des tâches de classification ou d'indexation en aval.
Comment lire les codes-barres et les codes QR en même temps que du texte ?
Les chaînes de traitement de documents doivent souvent extraire à la fois du texte lisible par l'homme et des codes lisibles par la machine à partir d'un même document. IronOCR peut détecter et décoder les codes-barres et les codes QR lors du même passage OCR, sans nécessiter de bibliothèque séparée.
Activez la lecture de codes-barres sur l'instance IronTesseract avant le traitement :
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");
OcrResult result = ocr.Read(input);
// Access recognized text
Console.WriteLine(result.Text);
// Access barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");
OcrResult result = ocr.Read(input);
// Access recognized text
Console.WriteLine(result.Text);
// Access barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadPdf("shipment-labels.pdf")
Dim result As OcrResult = ocr.Read(input)
' Access recognized text
Console.WriteLine(result.Text)
' Access barcode data
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}")
Next
End Using
Ceci est particulièrement utile pour le traitement des étiquettes d'expédition, la gestion des stocks et tout flux de travail où les codes-barres et le texte imprimé apparaissent ensemble sur des documents numérisés. Le guide de lecture de code-barres IronOCR couvre les formats pris en charge, y compris le Code 128, les QR codes, le Data Matrix et le PDF417.
Quelle est la différence entre les types d'entrée IronOCR ?
IronOCR propose deux approches principales pour le chargement des fichiers PDF, chacune adaptée à des scénarios différents :
| Approche | Classe | Idéal pour | Remarques |
|---|---|---|---|
| Entrée générale | OcrInput.LoadPdf() |
La plupart des cas d'utilisation | Prend en charge tous les filtres de prétraitement, la sélection de pages et les zones de contenu. |
| Spécifique au PDF | OcrPdfInput |
Scénarios simples | Interface simplifiée ; moins d'options de configuration |
| fichiers image | OcrInput.LoadImage() |
PNG, JPEG, TIFF, BMP | Même prétraitement et ciblage régional que pour l'entrée PDF |
| TIFF multi-pages | OcrInput.LoadImageFrames() |
Archives de télécopie, sortie du scanner | Traite chaque image comme une page distincte |
Pour la plupart des scénarios de production, OcrInput.LoadPdf() est l'approche recommandée car elle expose l'intégralité de l'API de prétraitement et de configuration. OcrPdfInput fonctionne bien pour des prototypages rapides ou des situations où les paramètres par défaut suffisent.
Quelles sont vos prochaines étapes ?
Les exemples de code ci-dessus couvrent les flux de travail principaux IronOCR pour la reconnaissance optique de caractères (OCR) de fichiers PDF en C#. Voici une brève liste de contrôle pour passer à l'étape suivante :
- Install the package:
dotnet add package IronOcror search for IronOCR on NuGet - Exécutez l'exemple de base : vérifiez l'extraction de texte à partir d'un PDF d'exemple avant de mettre en place la logique de pipeline complète.
- Appliquez le prétraitement : Si vous travaillez avec des documents scannés, ajoutez des appels
DeskewetDeNoiseet testez avec des échantillons représentatifs - Explorez des fonctionnalités supplémentaires : Sortie PDF consultable PDF consultable, lecture de codes-barres codes-barres, prise en charge de plusieurs langues, et sortie de données structurées données structurées
- Consultez les guides de déploiement : les articles sur le déploiement d'Azure, de Docker et de Linux couvrent la configuration spécifique à chaque environnement.
- Essayez la version d'essai gratuite : Démarrez un essai gratuit pour tester toutes les fonctionnalités avant de souscrire à une licence.
- Obtenez une licence : Les options de licence IronOCR couvrent les développeurs individuels jusqu'aux déploiements en Enterprise , avec une redistribution sans redevance.
Pour toute question relative à des cas d'utilisation spécifiques, la bibliothèque de tutoriels IronOCR propose des articles détaillés couvrant des dizaines de scénarios. L'intégralité de l'interface API est documentée dans la référence de l'API IronOCR .
Questions Fréquemment Posées
Quel est le code minimal nécessaire pour effectuer une reconnaissance optique de caractères (OCR) d'un PDF en C# ?
Avec IronOCR, le code minimal est le suivant : créer une instance d’IronTesseract, créer un objet OcrInput, appeler input.LoadPdf avec le chemin du fichier, puis appeler ocr.Read(input). La propriété result.Text renvoie la chaîne extraite.
Comment installer IronOCR dans un projet .NET ?
Exécutez la commande « dotnet add package IronOCR» dans le terminal, ou recherchez IronOCR dans le gestionnaire de packages NuGet de Visual Studio.
IronOCR peut-il traiter uniquement certaines pages d'un PDF ?
Oui. Transmettez une liste.
Comment extraire du texte d'une zone spécifique d'un PDF numérisé ?
Transmettez un tableau d'objets Rectangle au paramètre contentAreas de LoadPdf. Chaque rectangle spécifie sa position X, sa position Y, sa largeur et sa hauteur en pixels à partir du coin supérieur gauche de la page.
Quels filtres de prétraitement IronOCR propose-t-il pour les documents numérisés ?
IronOCR propose les fonctions de redressement (correction de la rotation de la page), de réduction du bruit (suppression des artefacts de numérisation), d'amélioration du contraste, de binarisation et d'ajustement d'échelle. Ces fonctions peuvent être combinées pour améliorer la précision des numérisations de mauvaise qualité.
IronOCR prend-il en charge les fichiers PDF protégés par mot de passe ?
Oui. Transmettez la chaîne de caractères du mot de passe au paramètre `password` de la fonction `LoadPdf`. La bibliothèque déchiffre le document avant de générer les pages pour la reconnaissance optique de caractères (OCR).
IronOCR peut-il générer un PDF consultable ?
Oui. Après avoir appelé ocr.Read(input), appelez result.SaveAsSearchablePdf avec le chemin du fichier de sortie. Le PDF résultant conserve la numérisation originale comme couche visuelle avec une couche de texte invisible intégrée pour les opérations de recherche et de copie.
Quelles langues IronOCR prend-il en charge ?
IronOCR prend en charge plus de 125 modules linguistiques couvrant les alphabets latin, cyrillique, CJK, arabe et autres. Définissez la propriété Language de l'instance IronTesseract avant d'appeler la méthode Read.
IronOCR peut-il lire les codes-barres et les codes QR des documents PDF ?
Oui. Définissez ocr.Configuration.ReadBarCodes sur true avant d'appeler Read. La collection OcrResult.Barcodes contient les valeurs décodées et les types de format pour tous les codes détectés.
IronOCR fonctionne-t-il sous Linux et dans les conteneurs Docker ?
Oui. IronOCR prend en charge le déploiement sur Windows, Linux, macOS et les environnements cloud, notamment Azure et les conteneurs Docker. La documentation d'IronSoftware contient des guides d'installation spécifiques à chaque environnement.



