Tekstudtrækning
Tekstudtrækning
Aspose.PDF FOSS for .NET leverer flere mekanismer til at udtrække tekst fra PDF‑sider. TextFragmentAbsorber er det primære værktøj — det scanner sideindhold og returnerer strukturerede TextFragment‑objekter med position, skrifttype og stilinformation.
Grundlæggende tekstudtrækning
TextAbsorber udtrækker al tekst fra en side eller dokument som en enkelt streng.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Udtrækning af tekstfragmenter
TextFragmentAbsorber leverer strukturerede resultater. Hver TextFragment indeholder den udtrukne tekst, dens placering på siden og fontdetaljer.
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}");
}Søgning med regulære udtryk
Send et regex‑mønster til TextFragmentAbsorber for at finde specifik tekst.
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}");
}Tekstsegmenter
Hver TextFragment kan indeholde flere TextSegment-objekter, når teksten strækker sig over forskellige fontkørsler.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Fontstyring
FontRepository leverer metoder til at finde og indlæse skrifttyper.
var font = FontRepository.FindFont("Helvetica");Bygge tekstafsnit
TextParagraph tillader konstruktion af flerrækkede tekstblokke til indsættelse i en side.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Tips og bedste praksis
- Brug
TextFragmentAbsorbernår du har brug for positions- og skrifttypedata; brugTextAbsorbertil udtræk af ren tekst. - Accepter absorberen på en enkelt side for hurtigere resultater, eller på
doc.Pagesfor at søge i hele dokumentet. - Søgning med regulære udtryk er som standard case‑sensitive — brug
(?i)‑præfikset for case‑insensitiv matchning. - Tjek
TextState.Font.IsEmbeddedfor at afgøre, om en skrifttype er indlejret i PDF‑filen. - For store dokumenter, behandl sider én ad gangen for at håndtere hukommelsesforbruget.
Almindelige problemer
| Problem | Årsag | Løsning |
|---|---|---|
| Uddraget tekst er forvrænget | PDF bruger en ikke-standard kodning eller CID-skrifttypekortlægning | Kontroller skrifttypeindlejring; nogle scannede PDF’er kræver OCR |
| Ingen tekstfragmenter fundet | Sideindholdet er et billede, ikke tekst | Brug et OCR-værktøj til først at konvertere billedsider til tekst |
| Regex returnerer ingen matches | Mønsteret tager ikke højde for mellemrum indsat af PDF-tekstlayout | Normaliser mellemrum eller brug et mere løst mønster |
TextState.Font er null | Skrifttype‑ressource mangler i PDF’en | Håndter null‑tjek når du inspicerer skrifttypeegenskaber |
Ofte stillede spørgsmål
Kan jeg udtrække tekst fra et specifikt område på en side?
Ja. Indstil TextFragmentAbsorber.TextSearchOptions.Rectangle for at begrænse søgningen til et specifikt område på siden.
Bevarer tekstudtræk læserækkefølgen?
Biblioteket returnerer tekst i content-stream rækkefølge. For flerkolonne‑layout kan du have brug for at sortere fragmenter efter position.
Kan jeg udtrække tekst fra alle sider på én gang?
Ja. Kald doc.Pages.Accept(absorber) for at søge på hver side i dokumentet.
API-referencens oversigt
| Klasse / Metode | Beskrivelse |
|---|---|
TextAbsorber | Ekstraherer al tekst som en enkelt streng |
TextFragmentAbsorber | Ekstraherer strukturerede tekstfragmenter med position- og skrifttypeoplysninger |
TextFragment | En tekstkørsel med position, teksttilstand og segmenter |
TextFragment.Text | Den ekstraherede tekststreng |
TextFragment.Position | Koordinater på siden |
TextFragment.TextState | Skrifttype, størrelse og farveinformation |
TextFragment.Segments | Delkørsler inden for fragmentet |
TextParagraph | Builder til flerrækkede tekstblokke |
TextState | Skrifttypenavn, størrelse, farve og stil‑egenskaber |
FontRepository | Statisk skrifttypeopslag og indlæsning |
FontRepository.FindFont | Find en skrifttype efter navn |