Szövegkinyerés
Szövegkinyerés
Aspose.PDF FOSS for .NET több mechanizmust biztosít a PDF oldalak szövegének kinyerésére. TextFragmentAbsorber az elsődleges eszköz — beolvassa az oldal tartalmát, és strukturált TextFragment objektumokat ad vissza pozícióval, betűtípussal és stílusinformációval.
Alap szövegkinyerés
TextAbsorber kinyeri az összes szöveget egy oldalról vagy dokumentumról egyetlen karakterláncként.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Szövegrészletek kinyerése
TextFragmentAbsorber strukturált eredményeket biztosít. Minden TextFragment tartalmazza a kinyert szöveget, annak pozícióját az oldalon, valamint a betűtípus részleteit.
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}");
}Keresés reguláris kifejezésekkel
Adjon át egy regex mintát a TextFragmentAbsorber-nek, hogy megtalálja a konkrét szöveget.
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}");
}Szövegszegmensek
Minden TextFragment több TextSegment objektumot tartalmazhat, ha a szöveg különböző betűtípus-futamokban terjed.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Betűkészlet‑kezelés
FontRepository módszereket biztosít a betűtípusok kereséséhez és betöltéséhez.
var font = FontRepository.FindFont("Helvetica");Szöveges bekezdések létrehozása
TextParagraph lehetővé teszi több soros szöveges blokkok létrehozását egy oldalba való beszúráshoz.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Tippek és legjobb gyakorlatok
- Használja a
TextFragmentAbsorberjelölőt, ha pozíció- és betűtípusadatokra van szükség; használja aTextAbsorberjelölőt egyszerű szöveg kinyeréséhez. - Fogadja el az abszorbert egyetlen oldalon a gyorsabb eredményekért, vagy a
doc.Pagesjelölővel a teljes dokumentum kereséséhez. - A reguláris kifejezés keresés alapértelmezés szerint kis- és nagybetű érzékeny — használja a
(?i)előtagot a kis- és nagybetű érzéketlen egyezéshez. - Ellenőrizze a
TextState.Font.IsEmbeddedjelölőt, hogy megállapítsa, be van-e ágyazva egy betűtípus a PDF-ben. - Nagy dokumentumok esetén dolgozza fel az oldalakat egyesével a memóriahasználat kezeléséhez.
Gyakori problémák
| Probléma | Ok | Megoldás |
|---|---|---|
| A kinyert szöveg torz | A PDF nem szabványos kódolást vagy CID betűkészlet leképezést használ | Ellenőrizze a betűkészlet beágyazását; egyes beolvasott PDF-ekhez OCR szükséges |
| Nem találhatók szövegrészek | Az oldal tartalma kép, nem szöveg | Használjon OCR eszközt a képes oldalakat először szöveggé konvertálni |
| A reguláris kifejezés nem ad egyezést | A minta nem veszi figyelembe a PDF szövegelrendezés által beillesztett szóközöket | Normalizálja a szóközöket, vagy használjon lazább mintát |
TextState.Font null | A betűkészlet erőforrás hiányzik a PDF-ből | Végezzen null-ellenőrzéseket a betűkészlet tulajdonságainak vizsgálatakor |
GYIK
Kivonhatok szöveget egy oldal egy meghatározott területéről?
Igen. Állítsa be TextFragmentAbsorber.TextSearchOptions.Rectangle-t, hogy a keresést a lap egy meghatározott területére korlátozza.
Megőrzi a szövegkinyerés az olvasási sorrendet?
A könyvtár a szöveget a tartalomfolyam sorrendjében adja vissza. Többoszlopos elrendezéseknél előfordulhat, hogy a töredékeket pozíció szerint kell rendezni.
Kivonhatok szöveget az összes oldalról egyszerre?
Igen. Hívja meg doc.Pages.Accept(absorber) a dokumentum minden oldalának kereséséhez.
API Referencia Összefoglaló
| Osztály / Metódus | Leírás |
|---|---|
TextAbsorber | Kivonja az összes szöveget egyetlen karakterláncként |
TextFragmentAbsorber | Kivonja a strukturált szövegrészleteket pozíció- és betűtípusadatokkal |
TextFragment | Egy szövegszakasz pozícióval, szövegállapottal és szegmensekkel |
TextFragment.Text | A kivont szöveges karakterlánc |
TextFragment.Position | Koordináták az oldalon |
TextFragment.TextState | Betűtípus, méret és szín információ |
TextFragment.Segments | Al-szakaszok a részleten belül |
TextParagraph | Építő több soros szövegtömbök számára |
TextState | Betűtípus neve, mérete, színe és stílus tulajdonságai |
FontRepository | Statikus betűtípus keresés és betöltés |
FontRepository.FindFont | Betűtípus keresése név alapján |