Tekstextractie
Tekstextractie
Aspose.PDF FOSS for .NET biedt verschillende mechanismen voor het extraheren van tekst uit PDF-pagina’s. TextFragmentAbsorber is de primaire tool — het scant paginainhoud en retourneert gestructureerde TextFragment objecten met positie-, lettertype- en stijlgegevens.
Basis tekstextractie
TextAbsorber extraheert alle tekst van een pagina of document als één enkele tekenreeks.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Tekstfragmenten extraheren
TextFragmentAbsorber levert gestructureerde resultaten. Elke TextFragment bevat de geëxtraheerde tekst, de positie op de pagina en de lettertype‑details.
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}");
}Zoeken met reguliere expressies
Geef een regex‑patroon door aan TextFragmentAbsorber om specifieke tekst te vinden.
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}");
}Tekstsegmenten
Elke TextFragment kan meerdere TextSegment objecten bevatten wanneer de tekst zich uitstrekt over verschillende lettertype‑reeksen.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Lettertypebeheer
FontRepository biedt methoden om lettertypen te vinden en te laden.
var font = FontRepository.FindFont("Helvetica");Tekstparagrafen bouwen
TextParagraph maakt het mogelijk om meerregelige tekstblokken te construeren voor invoeging in een pagina.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Tips en Best Practices
- Gebruik
TextFragmentAbsorberwanneer u positie- en lettertypegegevens nodig hebt; gebruikTextAbsorbervoor platte‑tekstextractie. - Accepteer de absorber op één enkele pagina voor snellere resultaten, of op
doc.Pagesom het hele document te doorzoeken. - Reguliere‑expressie zoeken is standaard hoofdlettergevoelig — gebruik het
(?i)‑voorvoegsel voor hoofdletterongevoelig zoeken. - Controleer
TextState.Font.IsEmbeddedom te bepalen of een lettertype in de PDF is ingebed. - Voor grote documenten, verwerk pagina’s één voor één om het geheugenverbruik te beheersen.
Veelvoorkomende problemen
| Issue | Cause | Fix |
|---|---|---|
| Uitgehaalde tekst is onleesbaar | PDF gebruikt een niet-standaard codering of CID-lettertypekoppeling | Controleer of lettertypen zijn ingesloten; sommige gescande PDF’s vereisen OCR |
| Geen tekstfragmenten gevonden | Paginainhoud is een afbeelding, geen tekst | Gebruik een OCR‑tool om afbeeldingspagina’s eerst naar tekst te converteren |
| Regex geeft geen overeenkomsten terug | Patroon houdt geen rekening met witruimte die door de PDF-tekstlay-out wordt ingevoegd | Normaliseer witruimte of gebruik een lossere patroon |
TextState.Font is null | Lettertypebron ontbreekt in de PDF | Voer null‑controles uit bij het inspecteren van lettertype‑eigenschappen |
Veelgestelde vragen
Kan ik tekst extraheren uit een specifiek gebied van een pagina?
Ja. Stel TextFragmentAbsorber.TextSearchOptions.Rectangle in om de zoekopdracht te beperken tot een specifiek gebied van de pagina.
Behoudt tekstextractie de leesvolgorde?
De bibliotheek retourneert tekst in content‑stream volgorde. Voor meerkolomindelingen moet u mogelijk fragmenten sorteren op positie.
Kan ik tekst van alle pagina’s in één keer extraheren?
Ja. Roep doc.Pages.Accept(absorber) aan om elke pagina in het document te doorzoeken.
API-referentieoverzicht
| Klasse / Methode | Beschrijving |
|---|---|
TextAbsorber | Haalt alle tekst op als één enkele string |
TextFragmentAbsorber | Haalt gestructureerde tekstfragmenten op met positie- en lettertypegegevens |
TextFragment | Een tekstreeks met positie, tekststatus en segmenten |
TextFragment.Text | De opgehaalde tekststring |
TextFragment.Position | Coördinaten op de pagina |
TextFragment.TextState | Lettertype-, grootte- en kleurinformatie |
TextFragment.Segments | Sub‑reeksen binnen het fragment |
TextParagraph | Bouwer voor meerregelige tekstblokken |
TextState | Lettertype‑naam, grootte, kleur en stijl‑eigenschappen |
FontRepository | Statische lettertype‑opzoeking en -laden |
FontRepository.FindFont | Zoek een lettertype op naam |