Cette page peut contenir du texte traduit automatiquement.

Extraire le texte d'un PDF en C# et VB.NET

L'extraction de texte d'un document PDF est une tâche courante pour les développeurs C# et VB.NET. Vous pouvez utiliser la bibliothèque Docotic.Pdf pour extraire du texte en quelques lignes de code sous Windows, Linux, macOS, Android, iOS ou dans un environnement cloud.

Vous aurez besoin de la bibliothèque Docotic.Pdf pour essayer l'exemple de code. Téléchargez Docotic.Pdf binaires ou utilisez son package NuGet. Pour essayer la bibliothèque sans restrictions du mode d'évaluation, vous pouvez obtenir la clé de licence gratuite à durée limitée ici.

Il existe différentes approches pour l'extraction de texte. Regardons quelques exemples pratiques.

Extraire le texte d'un PDF

Convertir un PDF en texte brut

Vous pouvez utiliser du texte brut pour l'indexation, la lecture ou une sorte d'analyse du contenu PDF. Cet exemple montre comment convertir un PDF en texte en C# :

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string documentText = pdf.GetText();
    Console.WriteLine(documentText);
}

PdfDocument.GetText() fournit le résultat suivant pour le exemple de document :

Résultat de l'extraction de texte brut à partir d'un document PDF en C# .NET

Alternativement, vous pouvez extraire le texte de pages individuelles :

using (var pdf = new PdfDocument("your_document.pdf"))
{
    for (int i = 0; i < pdf.PageCount; ++i)
    {
        string pageText = pdf.Pages[i].GetText();
        using (var writer = new StreamWriter($"page_{i}.txt"))
            writer.Write(pageText);
    }
}

Des exemples C# et VB.NET associés sont disponibles sur GitHub.

Convertir un PDF en texte formaté

Vous pouvez utiliser du texte formaté pour analyser certaines données textuelles structurées ou pour afficher le texte dans un format lisible par l'homme. Cet exemple montre comment convertir un PDF en texte formaté en C# :

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string formattedText = pdf.GetTextWithFormatting(); // ou utiliser pdf.Pages[i].GetTextWithFormatting()
    Console.WriteLine(formattedText);
}

PdfDocument.GetTextWithFormatting() fournit le résultat suivant pour le exemple de document : Résultat de l'extraction de texte formaté à partir d'un document PDF en C# .NET

Extraire du texte brut ou formaté d'une zone spécifique

Vous devrez peut-être extraire le texte d'une partie spécifique d'une page PDF uniquement. Par exemple, pour analyser uniquement le texte de l'en-tête de la page. La bibliothèque le prend également en charge. Exemple C# :

using (var pdf = new PdfDocument("your_document.pdf"))
{
    var page = pdf.Pages[0];
    var options = new PdfTextExtractionOptions
    {
        Rectangle = new PdfRectangle(0, 0, page.Width, 100),
        WithFormatting = false
    };
    string areaText = page.GetText(options);
    Console.WriteLine(areaText);
}

Cet exemple fournit le résultat suivant pour le exemple de document : Résultat de l'extraction de texte d'une zone spécifique en C# .NET

Extraire des informations textuelles détaillées

Vous pouvez également obtenir des informations détaillées sur chaque morceau de texte pour une analyse complète. Docotic.Pdf fournit des méthodes pour extraire du texte tel quel, par mots ou par caractères. Pour chaque morceau de texte, la bibliothèque extrait :

  • Texte Unicode
  • Limites sur la page
  • Police de caractère
  • Taille de police
  • Matrice de transformation, utile pour le texte mis à l'échelle et pivoté
  • Mode de rendu
  • Couleur de remplissage, opacité, motif
  • Style de contour
  • Des informations détaillées sur chaque personnage

Cet exemple montre comment extraire du texte par mots à partir d'une page PDF en C# :

using (PdfDocument pdf = new PdfDocument("your_document.pdf"))
{
    PdfPage page = pdf.Pages[0];
    foreach (PdfTextData data in page.GetWords())
    {
        Console.WriteLine(
            $"{{\n" +
            $"  text: '{data.GetText()}',\n" +
            $"  bounds: {data.Bounds},\n" +
            $"  font name: '{data.Font.Name}',\n" +
            $"  font size: {data.FontSize},\n" +
            $"  transformation matrix: {data.TransformationMatrix},\n" +
            $"  rendering mode: '{data.RenderingMode}',\n" +
            $"  brush: {data.Brush},\n" +
            $"  pen: {data.Pen}\n" +
            $"}},"
        );

        page.Canvas.DrawRectangle(data.Bounds);
    }

    pdf.Save("result.pdf");
}

L'exemple fournit le résultat suivant pour le exemple de document : Résultat de l'extraction de texte détaillée à partir d'un PDF en C# .NET

Vous pouvez utiliser les méthodes Docotic.Pdf suivantes pour obtenir des informations textuelles détaillées :

Exemples GitHub associés :

Extraire du texte de droite à gauche et bidirectionnel

Docotic.Pdf extrait correctement le texte arabe, hébreu et persan des documents PDF.

En interne, les documents PDF stockent le texte selon l'ordre visuel. Cela signifie que le texte dans les langues avec des écritures de droite à gauche est stocké inversé. Docotic.Pdf réorganise le texte extrait selon son ordre logique. C’est ce à quoi s’attendent généralement les lecteurs de texte de droite à gauche.

Vous n'avez rien de spécial à faire. Utilisez simplement les extraits de code ci-dessus pour obtenir le texte RTL dans le bon ordre.

OCR (reconnaissance de texte)

Si les PDF que vous traitez contiennent des images avec du texte, vous pouvez extraire le texte à l'aide de la reconnaissance optique de caractères. Les exemples suivants montrent comment procéder à l'aide de Docotic.Pdf et Tesseract :

Consultez l'article OCR PDF in .NET pour plus de détails.

Chargement de polices dans les environnements cloud

Les exemples ci-dessus fonctionnent correctement dans n'importe quel environnement: sous Windows, Linux, macOS. Sur les plateformes cloud, comme AWS Lambda, vous devrez peut-être effectuer une étape de configuration supplémentaire.

Certains documents PDF utilisent des polices non intégrées. Par défaut, Docotic.Pdf charge ces polices à partir de la collection de polices système (par exemple, C:/Windows/Fonts ou /usr/share/fonts). Cependant, les plateformes cloud peuvent restreindre l'accès à ces collections de polices.

Vous pouvez déployer votre propre collection de polices populaires avec votre application. Recherchez et copiez des fichiers de polices publiques dans votre projet. Marquez tous les fichiers de polices avec CopyToOutputDirectory = Always dans votre projet .NET. Pour utiliser la collection, initialisez PdfDocument avec un DirectoryFontLoader personnalisé :

PdfConfigurationOptions config = PdfConfigurationOptions.Create();
config.FontLoader = new DirectoryFontLoader(new[] { "path_to_your_font_collection" }, true);
using (PdfDocument pdf = new PdfDocument("your_document.pdf", config))
{
   ...
}

Conclusion

Vous pouvez utiliser la bibliothèque Docotic.Pdf pour extraire du texte brut ou formaté à partir d'un PDF en C# et VB.NET. Vous pouvez également extraire des informations détaillées sur chaque morceau de texte. Vous pouvez télécharger Docotic.Pdf ici.

Regardez les exemples C# et VB.NET pour extraire du texte à partir d'un PDF :