Comment enregistrer des résultats en tant que PDF consultable en C#

Enregistrez des PDF consultables en C# ; avec IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR permet aux développeurs C# de convertir des documents et des images numérisés en PDF consultables à l'aide de la technologie OCR, en prenant en charge la sortie sous forme de fichiers, d'octets ou de flux avec seulement quelques lignes de code.

Un PDF consultable, souvent appelé PDF OCR (reconnaissance optique de caractères), est un type de document PDF qui contient à la fois des images numérisées et du texte lisible par machine. Ces fichiers PDF sont créés en effectuant une reconnaissance optique de caractères (OCR) sur des documents papier ou des images numérisés, en reconnaissant le texte dans les images et en le convertissant en texte sélectionnable et consultable.

SaveAsSearchablePdf est également disponible sur les résultats de ReadPhoto, ReadScreenShot et ReadDocumentAdvanced, permettant la création de PDF consultables à partir de photos et de workflows OCR avancés pour les documents. Cette fonctionnalité est particulièrement utile pour numériser des archives papier ou rendre les anciens fichiers PDF consultables, afin d'améliorer la gestion des documents.

Démarrage rapide : Exporter un PDF consultable en une seule ligne

Définissez RenderSearchablePdf = true, exécutez Read(...) sur votre entrée, puis appelez SaveAsSearchablePdf(...). C'est tout ce qu'il faut pour générer un PDF entièrement consultable avec IronOCR.

  1. Installez IronOCR avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronOcr
  2. Copiez et exécutez cet extrait de code.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer


Comment exporter les résultats de l'OCR sous forme de PDF consultable?

Pour exporter le résultat sous forme de PDF consultable à l'aide d'IronOCR, définissez la propriété Configuration.RenderSearchablePdf sur true, récupérez l'objet de résultat OCR à partir de la méthode Read, puis appelez SaveAsSearchablePdf avec le chemin d'accès au fichier de sortie.

Entrée

Une page d'un roman Harry Potter, numérisée au format TIFF et chargée via OcrImageInput. La page contient un texte imprimé dense, une entrée réaliste pour tester la couche de texte consultable du PDF.

Page du livre Harry Potter présentant le chapitre huit

potter.tiff : page de roman numérisée utilisée comme entrée OCR pour produire un PDF consultable avec une couche de texte invisible.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;

// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();

// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;

// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr

' Create the OCR engine: defaults to English with balanced speed and accuracy
Dim ocrTesseract As New IronTesseract()

' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = True

' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
Using imageInput As New OcrImageInput("Potter.tiff")
    ' Run OCR; returns a result containing the recognized text and spatial layout data
    Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

    ' Write the output: the original scanned image is preserved with an invisible text layer on top
    ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
End Using
$vbLabelText   $csharpLabel

Sortie

searchablePdf.pdf : Fichier PDF consultable. Sélectionnez ou recherchez n'importe quel mot pour vérifier la couche de texte OCR.

Le fichier PDF obtenu intègre l'image de la page numérisée d'origine avec une couche de texte invisible positionnée au-dessus de chaque mot reconnu. Sélectionnez ou recherchez n'importe quel WORD dans la visionneuse pour vérifier que le calque de texte est bien présent.

IronOCR utilise une police particulière pour la superposition, ce qui peut entraîner de légères différences dans la taille du texte affiché par rapport à l'original.

Lorsqu'il traite des fichiers TIFF de plusieurs pages ou des documents complexes, IronOCR traite automatiquement toutes les pages et les inclut dans le résultat. La bibliothèque gère automatiquement l'ordre des pages et le positionnement du texte en surimpression, ce qui garantit une correspondance précise entre le texte et l'image.

Comment créer des PDF consultables à partir de photos ou de numérisations de documents avancées ?

L'exportation au format PDF consultable est également disponible lors de l'utilisation de ReadPhoto, ReadScreenShot ou ReadDocumentAdvanced. Chacune de ces méthodes renvoie un type de résultat prenant en charge SaveAsSearchablePdf.

Vous pouvez éventuellement passer un ModelType lors de l'appel de ces méthodes. La valeur par défaut est Normal, tandis que Enhanced offre une meilleure précision au détriment de la vitesse.

Entrée

Une photo d'une fresque murale avec du texte peint, chargée via LoadImage. La scène contient plusieurs mots intégrés dans un environnement réel, ce qui en fait un test pratique pour ReadPhoto avec le modèle Enhanced.

Photo contenant du texte utilisée comme entrée pour l'OCR ReadPhoto

photo.png : photo de papier peint chargée via ReadPhoto avec le modèle Enhanced pour produire un PDF consultable.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");

// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);

// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");

// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);

// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("photo.png")

    ' ReadPhoto with Enhanced model
    Dim photoResult As OcrPhotoResult = ocr.ReadPhoto(input, ModelType.Enhanced)
    Console.WriteLine(photoResult.Text)

    ' Save as searchable PDF
    Dim pdfBytes As Byte() = photoResult.SaveAsSearchablePdf()
    File.WriteAllBytes("searchable-photo.pdf", pdfBytes)
End Using
$vbLabelText   $csharpLabel

Sortie

searchable-photo.pdf : Fichier PDF consultable généré par ReadPhoto. La couche de texte prend en charge la recherche en texte intégral dans n'importe quel lecteur de PDF.

Le PDF consultable obtenu contient une couche de texte invisible superposée aux mots reconnus. La recherche du mot " Milk " dans la visionneuse PDF renvoie 3 résultats, extraits directement du texte surligné dans la photo d'origine.

La même approche s'applique à ReadDocumentAdvanced, qui renvoie un OcrDocAdvancedResult :

Entrée

Une facture numérisée chargée via LoadImage. Elle contient des champs structurés (nom du fournisseur, lignes de commande et totaux) que ReadDocumentAdvanced avec le modèle Enhanced reconnaît et intègre sous forme de couche de texte consultable.

Document de facturation utilisé comme entrée pour ReadDocumentAdvanced OCR

invoice.png : facture numérisée chargée dans OcrInput et transmise à ReadDocumentAdvanced avec le modèle Enhanced.

using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");

// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("invoice.png")

    ' ReadDocumentAdvanced with Enhanced model
    Dim docResult As OcrDocAdvancedResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced)
    Dim docPdfBytes As Byte() = docResult.SaveAsSearchablePdf()
    File.WriteAllBytes("searchable-doc.pdf", docPdfBytes)
End Using
$vbLabelText   $csharpLabel

Sortie

searchable-doc.pdf : Fichier PDF consultable généré par ReadDocumentAdvanced. Les champs de la facture sont sélectionnables et consultables.

SaveAsSearchablePdf n'est pas pris en charge pour les résultats ReadPassport ou ReadLicensePlate et provoquera une exception ExtensionAdvancedScanException.

Travailler avec des documents de plusieurs pages

Lorsqu'il s'agit d'opérations d'OCR sur des documents PDF de plusieurs pages, IronOCR traite chaque page de manière séquentielle et conserve la structure originale du document.

Entrée

Un rapport annuel de 11 pages de Hartwell Capital Management chargé via OcrPdfInput. Les pages 1 à 10 (index 0 à 9) sont sélectionnées à l'aide de la plage PageIndices et traitées en un seul appel Read.

multi-page-scan.pdf : rapport annuel de 11 pages de Hartwell Capital Management utilisé comme source pour la conversion en PDF consultable de plusieurs pages.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-multi-page.cs
using IronOcr;

// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();

// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));

// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);

// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
Imports IronOcr

' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
Dim ocrTesseract As New IronTesseract()

' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10))
    ' Run OCR across all selected pages in order
    Dim result As OcrResult = ocrTesseract.Read(pdfInput)

    ' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
    result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)
End Using
$vbLabelText   $csharpLabel

Sortie

searchable-multi-page.pdf : fichier PDF consultable de 10 pages. Chaque page comporte un calque de texte invisible permettant la recherche en texte intégral.

Le fichier PDF obtenu contient 10 pages (pages 1 à 10 du rapport original), chacune comportant un calque de texte invisible qui rend le contenu extrait sélectionnable et consultable dans n'importe quel lecteur de PDF.

Comment puis-je appliquer des filtres lors de la création de PDF consultables ?

Le deuxième paramètre SaveAsSearchablePdf accepte une valeur booléenne qui détermine si des filtres d'image sont appliqués à la sortie intégrée. L'utilisation de filtres d'optimisation d'image peut améliorer de manière significative la précision de l'OCR, en particulier lorsqu'il s'agit de scans de mauvaise qualité.

L'exemple ci-dessous applique le filtre de niveaux de gris et transmet true comme deuxième argument pour intégrer l'image filtrée dans le fichier PDF de sortie consultable.

:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;

// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");

// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);

// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr

' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()

' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")

' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)

' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
$vbLabelText   $csharpLabel

Pour des résultats optimaux, pensez à utiliser l'Assistant de filtre pour déterminer automatiquement la meilleure combinaison de filtres pour votre type de document spécifique. Cet outil analyse vos données et vous propose des étapes de prétraitement appropriées.

Comment corriger les caractères incorrects dans les PDF consultables ?

Si le texte apparaît correctement visuellement dans le PDF mais présente des caractères corrompus lors de la recherche ou de la copie, le problème est dû à la police par défaut utilisée dans la couche de texte consultable. Par défaut, SaveAsSearchablePdf utilise la police Times New Roman, qui ne prend pas entièrement en charge tous les caractères Unicode. Cela affecte les langues comportant des caractères accentués ou non ASCII.

Pour résoudre ce problème, fournissez un fichier de police compatible Unicode comme troisième paramètre :

result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf")
$vbLabelText   $csharpLabel

Vous pouvez également spécifier un nom de police personnalisé comme quatrième paramètre :

result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf", "MyFont")
$vbLabelText   $csharpLabel

Cela s'applique à tous les types de résultats, y compris OcrResult, OcrPhotoResult et OcrDocAdvancedResult, de sorte que la correction fonctionne quelle que soit la méthode de lecture ayant produit le résultat.

Veuillez noterPour les documents composés à l'origine en Times New Roman, Liberation Serif est recommandé car il est métriquement compatible, préservant l'espacement et la mise en page d'origine. Pour une utilisation multilingue générale, Noto Sans ou DejaVu Sans sont de bonnes alternatives.

Dans les cas où l'écriture dans un chemin d'accès au fichier n'est pas possible, IronOCR prend également en charge le renvoi du PDF consultable sous forme de tableau d'octets ou de flux.


Comment exporter des PDF consultables sous forme d'octets ou de flux?

Le résultat du PDF consultable peut également être traité sous forme d'octets ou de flux à l'aide des méthodes SaveAsSearchablePdfBytes et SaveAsSearchablePdfStream, respectivement. L'exemple de code ci-dessous montre comment utiliser ces méthodes.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();

// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Return as a byte array: suited for storing in a database or sending in an HTTP response body
Dim pdfByte As Byte() = ocrResult.SaveAsSearchablePdfBytes()

' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
$vbLabelText   $csharpLabel

Ces options de sortie sont particulièrement utiles lors de l'intégration avec des services de stockage en nuage, des bases de données ou des applications web où l'accès au système de fichiers peut être limité. L'exemple ci-dessous illustre des applications pratiques :

using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
Imports IronOcr
Imports System.IO
Imports System.Threading.Tasks

Public Class SearchablePdfExporter
    Public Async Function ProcessAndUploadPdf(inputPath As String) As Task
        Dim ocr As New IronTesseract With {
            .Configuration = New TesseractConfiguration With {
                .RenderSearchablePdf = True
            }
        }

        ' Process the input
        Using input As New OcrImageInput(inputPath)
            Dim result = ocr.Read(input)

            ' Option 1: Save to database as byte array
            Dim pdfBytes As Byte() = result.SaveAsSearchablePdfBytes()
            ' Store pdfBytes in database BLOB field

            ' Option 2: Upload to cloud storage using stream
            Using pdfStream As Stream = result.SaveAsSearchablePdfStream()
                ' Upload stream to Azure Blob Storage, AWS S3, etc.
                Await UploadToCloudStorage(pdfStream, "searchable-output.pdf")
            End Using

            ' Option 3: Return as web response
            ' Return File(pdfBytes, "application/pdf", "searchable.pdf")
        End Using
    End Function

    Private Async Function UploadToCloudStorage(stream As Stream, fileName As String) As Task
        ' Cloud upload implementation
    End Function
End Class
$vbLabelText   $csharpLabel

Considérations de performance

Lorsque vous traitez de gros volumes de documents, envisagez de mettre en œuvre des opérations d'OCR multithreadées pour améliorer le débit. IronOcr prend en charge le traitement simultané, ce qui vous permet de traiter plusieurs documents simultanément :

using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
Imports IronOcr
Imports System.Threading.Tasks
Imports System.Collections.Concurrent

Public Class BatchPdfProcessor
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract With {
            .Configuration = New OcrConfiguration With {
                .RenderSearchablePdf = True,
                ' Configure for optimal performance
                .Language = OcrLanguage.English
            }
        }
    End Sub

    Public Async Function ProcessBatchAsync(filePaths As String()) As Task
        Dim results As New ConcurrentBag(Of (source As String, output As String))()

        Await Task.Run(Sub()
                           Parallel.ForEach(filePaths, Sub(filePath)
                                                           Using input As New OcrImageInput(filePath)
                                                               Dim result = _ocr.Read(input)

                                                               Dim outputPath As String = Path.ChangeExtension(filePath, ".searchable.pdf")
                                                               result.SaveAsSearchablePdf(outputPath)

                                                               results.Add((filePath, outputPath))
                                                           End Using
                                                       End Sub)
                       End Sub)

        Console.WriteLine($"Processed {results.Count} files")
    End Function
End Class
$vbLabelText   $csharpLabel

Options de configuration avancées

Pour des scénarios plus avancés, vous pouvez utiliser configuration détaillée de Tesseract pour affiner le moteur OCR pour des types de documents ou des langues spécifiques :

var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
Imports IronOcr

Dim advancedOcr As New IronTesseract With {
    .Configuration = New TesseractConfiguration With {
        .RenderSearchablePdf = True,
        .TesseractVariables = New Dictionary(Of String, Object) From {
            {"preserve_interword_spaces", 1},
            {"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}
        },
        .PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    .Language = OcrLanguage.EnglishBest
}
$vbLabelText   $csharpLabel

Ces options de configuration s'appliquent de la même manière aux trois méthodes de sortie : SaveAsSearchablePdf, SaveAsSearchablePdfBytes et SaveAsSearchablePdfStream. Le résumé ci-dessous répertorie l'ensemble complet des méthodes PDF consultables avec leurs formats de sortie correspondants.

Résumé

La création de PDF interrogeables avec IronOCR est simple et flexible. Que vous ayez besoin de traiter des images individuelles, des documents de plusieurs pages, des photos via ReadPhoto ou des numérisations de documents avancées via ReadDocumentAdvanced, la bibliothèque fournit des méthodes robustes pour générer des PDF consultables dans divers formats. Utilisez le paramètre ModelType pour choisir entre les modèles ML standard et améliorés afin d'optimiser la précision. La possibilité d'exporter sous forme de fichiers, d'octets ou de flux permet d'adapter le logiciel à toute architecture d'application, des applications de bureau aux services basés sur le cloud.

Pour des scénarios OCR plus avancés, explorez les exemples de code complets ou consultez la documentation de l'API pour connaître en détail les signatures de méthodes et les options disponibles.

Questions Fréquemment Posées

Comment créer un PDF interrogeable à partir d'images numérisées en C# ?

IronOCR simplifie la création de PDF consultables à partir d'images numérisées. Il suffit de définir RenderSearchablePdf à true dans la configuration, d'utiliser la méthode Read() sur votre image d'entrée, et d'appeler SaveAsSearchablePdf() avec le chemin de sortie souhaité. IronOcr effectuera l'OCR sur l'image et générera un PDF avec du texte sélectionnable et consultable superposé à l'image originale.

Quels formats de fichiers peuvent être convertis en PDF interrogeables ?

IronOcr peut convertir divers formats d'image, notamment JPG, PNG, TIFF, et des documents PDF existants en PDF interrogeables. La bibliothèque prend en charge les images d'une seule page et les documents de plusieurs pages comme les fichiers TIFF, en traitant automatiquement toutes les pages et en conservant l'ordre des pages dans le PDF consultable de sortie.

Puis-je exporter des PDF consultables sous forme de tableaux d'octets ou de flux au lieu de fichiers ?

Oui, IronOcr prend en charge l'exportation de PDF consultables dans plusieurs formats. Outre l'enregistrement direct dans un fichier à l'aide de SaveAsSearchablePdf(), vous pouvez également exporter les résultats de l'OCR sous forme de tableaux d'octets ou de flux, ce qui facilite l'intégration dans des applications web, des systèmes de stockage en nuage ou des systèmes de base de données sans créer de fichiers temporaires.

Quel est le code minimum requis pour créer un PDF interrogeable ?

La création d'un PDF interrogeable avec IronOCR peut se faire en une seule ligne de code : new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"). Ceci démontre la conception rationalisée de l'API d'IronOCR.

Comment fonctionne la couche de texte invisible dans les PDF consultables ?

IronOCR gère automatiquement le positionnement du texte reconnu comme une couche invisible superposée à l'image originale du PDF. Ceci garantit une correspondance texte-image précise, permettant aux utilisateurs de sélectionner et de rechercher du texte tout en conservant l'apparence visuelle du document original. La bibliothèque utilise des polices et des algorithmes de positionnement spécialisés pour y parvenir.

Puis-je créer des PDF consultables à partir de photos ou de captures d'écran ?

Oui, SaveAsSearchablePdf est prise en charge pour les résultats des fonctions ReadPhoto , ReadScreenShot et ReadDocumentAdvanced . Chaque méthode renvoie un type de résultat compatible avec l'exportation de PDF interrogeables, ce qui facilite la conversion de photos, de captures d'écran ou de documents numérisés complexes en PDF interrogeables.

À quoi sert le paramètre ModelType ?

Le paramètre ModelType détermine le modèle d'apprentissage automatique pré-entraîné utilisé pour la reconnaissance optique de caractères (OCR). Le Normal , sélectionné par défaut, traite les images redimensionnées à 960 pixels pour des résultats rapides. Le Enhanced prend en charge les images jusqu'à 2 560 pixels, préservant ainsi les détails les plus fins et améliorant la précision pour les entrées haute résolution.

Pourquoi les caractères copiés ou recherchés apparaissent-ils corrompus dans mon PDF consultable ?

Cela se produit car la police par défaut (Times New Roman) utilisée dans la couche de texte consultable ne prend pas entièrement en charge tous les caractères Unicode. Pour résoudre ce problème, fournissez un fichier de police compatible Unicode comme troisième paramètre de la fonction SaveAsSearchablePdf . Si vos documents ont été initialement composés en Times New Roman et que vous constatez des incohérences d'espacement avec d'autres polices, essayez Liberation Serif : cette police utilise les mêmes métriques de glyphes et préserve la mise en page d'origine.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer?
Nuget Téléchargements 5,571,678 | Version : 2026.4 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronOcr
lancez un échantillon regardez votre image se transformer en texte consultable.