Tekstin poiminta
Tekstin poiminta
Aspose.PDF FOSS for .NET tarjoaa useita mekanismeja tekstin poimimiseksi PDF-sivuista. TextFragmentAbsorber on ensisijainen työkalu — se skannaa sivun sisällön ja palauttaa rakenteellisia TextFragment-objekteja, joissa on sijainti-, fontti- ja tyylitiedot.
Perustekstin poiminta
TextAbsorber poimii kaiken tekstin sivulta tai asiakirjasta yhtenä merkkijonona.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Tekstin fragmenttien poiminta
TextFragmentAbsorber tarjoaa rakenteellisia tuloksia. Jokainen TextFragment sisältää poimitun tekstin, sen sijainnin sivulla ja fonttitiedot.
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}");
}Haku säännöllisillä lausekkeilla
Syötä regex‑malli TextFragmentAbsorber:iin löytääksesi tiettyä tekstiä.
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}");
}Tekstikatkelmat
Jokainen TextFragment voi sisältää useita TextSegment-objekteja, kun teksti kattaa eri fonttijaksoja.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Fonttien hallinta
FontRepository tarjoaa menetelmiä fonttien etsimiseen ja lataamiseen.
var font = FontRepository.FindFont("Helvetica");Tekstikappaleiden rakentaminen
TextParagraph mahdollistaa monirivisten tekstilohkojen rakentamisen sivulle lisättäväksi.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Vinkkejä ja parhaita käytäntöjä
- Käytä
TextFragmentAbsorberkun tarvitset sijainti- ja fonttitietoja; käytäTextAbsorbertavallisen tekstin poimintaan. - Hyväksy absorberi yhdellä sivulla nopeampien tulosten saamiseksi tai
doc.Pageskoko asiakirjan hakemiseen. - Säännöllinen lausekkeen haku on oletuksena kirjainkoolla riippuva — käytä
(?i)-etuliitettä kirjainkoolla riippumattomaan vastaavuuteen. - Tarkista
TextState.Font.IsEmbeddedselvittääksesi, onko fontti upotettu PDF:ssä. - Suurille asiakirjoille käsittele sivut yksi kerrallaan muistin käytön hallitsemiseksi.
Yleiset ongelmat
| Ongelma | Syy | Korjaus |
|---|---|---|
| Poimittu teksti on sotkuista | PDF käyttää epästandardia koodausta tai CID-fonttien kartoitusta | Tarkista fontin upotus; jotkut skannatut PDF:t vaativat OCR:n |
| Tekstikatkelmia ei löytynyt | Sivun sisältö on kuva, ei teksti | Käytä OCR-työkalua muuntaaksesi kuvasivut ensin tekstiksi |
| Regex ei anna osumia | Mallissa ei oteta huomioon PDF-tekstin asettelun lisäämää välilyöntiä | Normalisoi välilyönnit tai käytä löysempää mallia |
TextState.Font on null | Fonttiresurssi puuttuu PDF:stä | Käsittele null-tarkistukset fonttien ominaisuuksia tarkasteltaessa |
UKK
Voinko poimia tekstiä sivun tietystä alueesta?
Kyllä. Aseta TextFragmentAbsorber.TextSearchOptions.Rectangle rajoittamaan hakua sivun tiettyyn alueeseen.
Säilyttääkö tekstin poiminta lukujärjestyksen?
Kirjasto palauttaa tekstin content‑stream -järjestyksessä. Monisarakkeisissa asetteluissa saatat joutua järjestämään fragmentit sijainnin mukaan.
Voinko poimia tekstiä kaikilta sivuilta kerralla?
Kyllä. Kutsu doc.Pages.Accept(absorber) hakeaksesi jokaisen sivun asiakirjasta.
API-viittauksen yhteenveto
| Luokka / Metodi | Kuvaus |
|---|---|
TextAbsorber | Poimii kaiken tekstin yhtenä merkkijonona |
TextFragmentAbsorber | Poimii rakenteellisia tekstikatkelmia, joissa on sijainti- ja fonttitiedot |
TextFragment | Tekstijakso, jossa on sijainti, tekstin tila ja segmentit |
TextFragment.Text | Poimittu tekstimerkkijono |
TextFragment.Position | Koordinaatit sivulla |
TextFragment.TextState | Fontti-, koko- ja väritiedot |
TextFragment.Segments | Alijaksoja fragmentissa |
TextParagraph | Rakentaja monirivisille tekstilohkoille |
TextState | Fontin nimi, koko, väri ja tyyliominaisuudet |
FontRepository | Staattinen fonttihaku ja -lataus |
FontRepository.FindFont | Etsi fontti nimen perusteella |