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
TextFragmentAbsorberlorsque vous avez besoin de données de position et de police ; utilisezTextAbsorberpour l’extraction de texte brut. - Acceptez l’absorbeur sur une seule page pour des résultats plus rapides, ou sur
doc.Pagespour 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.IsEmbeddedpour 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
| Issue | Cause | Fix |
|---|---|---|
| Le texte extrait est illisible | Le PDF utilise un encodage non standard ou une cartographie de police CID | Vé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 texte | Utilisez un outil OCR pour convertir les pages image en texte d’abord |
| L’expression régulière ne renvoie aucun résultat | Le modèle ne tient pas compte des espaces insérés par la mise en page du texte PDF | Normalisez les espaces ou utilisez un modèle plus souple |
TextState.Font est nul | La ressource de police est manquante dans le PDF | Gé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éthode | Description |
|---|---|
TextAbsorber | Extrait tout le texte sous forme d’une chaîne unique |
TextFragmentAbsorber | Extrait des fragments de texte structurés avec les données de position et de police |
TextFragment | Une séquence de texte avec position, état du texte et segments |
TextFragment.Text | La chaîne de texte extraite |
TextFragment.Position | Coordonnées sur la page |
TextFragment.TextState | Informations sur la police, la taille et la couleur |
TextFragment.Segments | Sous-séquences au sein du fragment |
TextParagraph | Constructeur pour les blocs de texte multilignes |
TextState | Nom de la police, taille, couleur et propriétés de style |
FontRepository | Recherche et chargement statiques de polices |
FontRepository.FindFont | Trouver une police par son nom |