Ekstrakcija teksta
Ekstrakcija teksta
Aspose.PDF FOSS za .NET pruža nekoliko mehanizama za izdvajanje teksta iz PDF stranica. TextFragmentAbsorber je primarni alat — on skenira sadržaj stranice i vraća strukturirane TextFragment objekte sa informacijama o položaju, fontu i stilu.
Osnovno izvlačenje teksta
TextAbsorber izvlači sav tekst sa stranice ili dokumenta kao jedan niz.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Izvlačenje tekstualnih fragmenata
TextFragmentAbsorber pruža strukturirane rezultate. Svaki TextFragment uključuje izvučeni tekst, njegov položaj na stranici i detalje o fontu.
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}");
}Pretraga regularnim izrazima
Prosledite regex obrazac TextFragmentAbsorber da biste pronašli određeni 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}");
}Текстуални сегменти
Svaki TextFragment može sadržati više TextSegment objekata kada tekst obuhvata različite font‑runove.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Upravljanje fontovima
FontRepository pruža metode za pronalaženje i učitavanje fontova.
var font = FontRepository.FindFont("Helvetica");Izgradnja tekstualnih odlomaka
TextParagraph omogućava konstruisanje višerednih tekstualnih blokova za umetanje u stranicu.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Saveti i najbolje prakse
- Koristite
TextFragmentAbsorberkada su vam potrebni podaci o položaju i fontu; koristiteTextAbsorberza izdvajanje običnog teksta. - Prihvatite apsorber na jednoj stranici za brže rezultate, ili na
doc.Pagesda pretražite ceo dokument. - Pretraga regularnim izrazom je po podrazumevanju osetljiva na veličinu slova — koristite prefiks
(?i)za podudaranje neosetljivo na veličinu slova. - Proverite
TextState.Font.IsEmbeddedda biste utvrdili da li je font ugrađen u PDF. - Za velike dokumente, obrađujte stranice po jednu kako biste upravljali upotrebom memorije.
Česti problemi
| Issue | Cause | Fix |
|---|---|---|
| Izvučeni tekst je iskrivljen | PDF koristi nestandardno kodiranje ili CID mapiranje fontova | Proverite ugrađivanje fontova; neki skenirani PDF‑ovi zahtevaju OCR |
| Nisu pronađeni fragmenti teksta | Sadržaj stranice je slika, a ne tekst | Koristite OCR alat da prvo pretvorite stranice slike u tekst |
| Regex ne vraća podudaranja | Šablon ne uzima u obzir razmake koje ubacuje PDF raspored teksta | Normalizujte razmake ili koristite labaviji šablon |
TextState.Font je null | Resurs fonta nedostaje u PDF‑u | Obradite provere null vrednosti prilikom ispitivanja svojstava fonta |
Često postavljana pitanja
Mogu li da izvučem tekst iz određenog područja stranice?
Да. Поставите TextFragmentAbsorber.TextSearchOptions.Rectangle да ограничите претрагу на одређено подручје странице.
Da li ekstrakcija teksta očuva redosled čitanja?
Biblioteka vraća tekst u redosledu content‑stream‑a. Za rasporede sa više kolona, možda ćete morati da sortirate fragmente po položaju.
Mogu li izvući tekst sa svih stranica odjednom?
Da. Pozovite doc.Pages.Accept(absorber) da pretražite svaku stranicu u dokumentu.
Sažetak API referencije
| Class / Method | Description |
|---|---|
TextAbsorber | Izvlači sav tekst kao jedan string |
TextFragmentAbsorber | Izvlači strukturirane fragmente teksta sa podacima o položaju i fontu |
TextFragment | Tekstualni niz sa položajem, stanjem teksta i segmentima |
TextFragment.Text | Izvlačeni tekstualni string |
TextFragment.Position | Koordinate na stranici |
TextFragment.TextState | Informacije o fontu, veličini i boji |
TextFragment.Segments | Pod‑nizovi unutar fragmenta |
TextParagraph | Graditelj za višeredne blokove teksta |
TextState | Naziv fonta, veličina, boja i svojstva stila |
FontRepository | Statičko pretraživanje i učitavanje fonta |
FontRepository.FindFont | Pronađi font po imenu |