Extraction de texte

Extraction de texte

Aspose.PDF FOSS for .NET propose plusieurs mécanismes pour extraire du texte à partir des pages PDF. TextFragmentAbsorber est l’outil principal — il analyse le contenu des pages et renvoie des objets TextFragment structurés contenant les informations de position, de police et de style.


Extraction de texte de base

TextAbsorber extrait tout le texte d’une page ou d’un document sous forme d’une chaîne unique.

using var doc = Document.Open(pdfBytes);

var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);

string pageText = absorber.Text;

Extraction de fragments de texte

TextFragmentAbsorber fournit des résultats structurés. Chaque TextFragment comprend le texte extrait, sa position sur la page et les détails de la police.

using var doc = Document.Open(pdfBytes);

var absorber = new TextFragmentAbsorber();
doc.Pages[1].Accept(absorber);

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Position: ({fragment.Position.XIndent}, {fragment.Position.YIndent})");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}");
}

Recherche avec des expressions régulières

Passez un motif regex à TextFragmentAbsorber pour trouver du texte spécifique.

var absorber = new TextFragmentAbsorber(@"\d{3}-\d{2}-\d{4}");
doc.Pages.Accept(absorber);  // Search all pages

foreach (var fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found: {fragment.Text}");
}

Segments de texte

Chaque TextFragment peut contenir plusieurs objets TextSegment lorsque le texte s’étend sur différentes exécutions de police.

foreach (var fragment in absorber.TextFragments)
{
    foreach (var segment in fragment.Segments)
    {
        Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
    }
}

Gestion des polices

FontRepository fournit des méthodes pour rechercher et charger des polices.

var font = FontRepository.FindFont("Helvetica");

Création de paragraphes de texte

TextParagraph permet de construire des blocs de texte multilignes pour les insérer dans une page.

var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));

Conseils et meilleures pratiques

  • Utilisez TextFragmentAbsorber lorsque vous avez besoin de données de position et de police ; utilisez TextAbsorber pour l’extraction de texte brut.
  • Acceptez l’absorbeur sur une seule page pour des résultats plus rapides, ou sur doc.Pages pour rechercher dans tout le document.
  • La recherche d’expressions régulières est sensible à la casse par défaut — utilisez le préfixe (?i) pour une correspondance insensible à la casse.
  • Vérifiez TextState.Font.IsEmbedded pour déterminer si une police est incorporée dans le PDF.
  • Pour les documents volumineux, traitez les pages une à une afin de gérer l’utilisation de la mémoire.

Problèmes courants

IssueCauseFix
Le texte extrait est illisibleLe PDF utilise un encodage non standard ou une cartographie de police CIDVérifiez l’incorporation des polices ; certains PDF numérisés nécessitent l’OCR
Aucun fragment de texte trouvéLe contenu de la page est une image, pas du texteUtilisez un outil OCR pour convertir les pages image en texte d’abord
L’expression régulière ne renvoie aucun résultatLe modèle ne tient pas compte des espaces insérés par la mise en page du texte PDFNormalisez les espaces ou utilisez un modèle plus souple
TextState.Font est nulLa ressource de police est manquante dans le PDFGérez les vérifications de null lors de l’inspection des propriétés de police

FAQ

Puis‑je extraire du texte d’une région spécifique d’une page ?

Oui. Définissez TextFragmentAbsorber.TextSearchOptions.Rectangle pour limiter la recherche
à une zone spécifique de la page.

L’extraction de texte préserve-t-elle l’ordre de lecture ?

La bibliothèque renvoie le texte dans l’ordre du flux de contenu. Pour les mises en page à plusieurs colonnes, il peut être nécessaire de trier les fragments par position.

Puis-je extraire le texte de toutes les pages en une seule fois ?

Oui. Appelez doc.Pages.Accept(absorber) pour rechercher chaque page du document.


Résumé de la référence API

Classe / MéthodeDescription
TextAbsorberExtrait tout le texte sous forme d’une chaîne unique
TextFragmentAbsorberExtrait des fragments de texte structurés avec les données de position et de police
TextFragmentUne séquence de texte avec position, état du texte et segments
TextFragment.TextLa chaîne de texte extraite
TextFragment.PositionCoordonnées sur la page
TextFragment.TextStateInformations sur la police, la taille et la couleur
TextFragment.SegmentsSous-séquences au sein du fragment
TextParagraphConstructeur pour les blocs de texte multilignes
TextStateNom de la police, taille, couleur et propriétés de style
FontRepositoryRecherche et chargement statiques de polices
FontRepository.FindFontTrouver une police par son nom

Voir aussi

 Français