Ekstrakcja tekstu
Ekstrakcja tekstu
Aspose.PDF FOSS dla .NET zapewnia kilka mechanizmów do wyodrębniania tekstu z stron PDF. TextFragmentAbsorber jest głównym narzędziem — skanuje zawartość strony i zwraca ustrukturyzowane obiekty TextFragment z informacjami o położeniu, czcionce i stylu.
Podstawowa ekstrakcja tekstu
TextAbsorber wyodrębnia cały tekst z strony lub dokumentu jako pojedynczy ciąg znaków.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Wyodrębnianie fragmentów tekstu
TextFragmentAbsorber zapewnia ustrukturyzowane wyniki. Każdy TextFragment zawiera wyodrębniony tekst, jego pozycję na stronie oraz szczegóły czcionki.
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}");
}Wyszukiwanie przy użyciu wyrażeń regularnych
Przekaż wyrażenie regularne do TextFragmentAbsorber, aby znaleźć określony 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}");
}Segmenty tekstu
Każdy TextFragment może zawierać wiele obiektów TextSegment, gdy tekst obejmuje różne przebiegi czcionek.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Zarządzanie czcionkami
FontRepository udostępnia metody do znajdowania i ładowania czcionek.
var font = FontRepository.FindFont("Helvetica");Tworzenie akapitów tekstu
TextParagraph umożliwia konstruowanie wielowierszowych bloków tekstowych do wstawienia na stronie.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Wskazówki i najlepsze praktyki
- Użyj
TextFragmentAbsorber, gdy potrzebujesz danych o położeniu i czcionce; użyjTextAbsorberdo ekstrakcji zwykłego tekstu. - Zaakceptuj absorber na jednej stronie, aby uzyskać szybsze wyniki, lub na
doc.Pages, aby przeszukać cały dokument. - Wyszukiwanie wyrażeń regularnych jest domyślnie rozróżniające wielkość liter — użyj prefiksu
(?i)dla dopasowania bez rozróżniania wielkości liter. - Sprawdź
TextState.Font.IsEmbedded, aby określić, czy czcionka jest osadzona w pliku PDF. - W przypadku dużych dokumentów przetwarzaj strony pojedynczo, aby zarządzać zużyciem pamięci.
Typowe problemy
| Problem | Przyczyna | Naprawa |
|---|---|---|
| Wyodrębniony tekst jest zniekształcony | PDF używa niestandardowego kodowania lub mapowania czcionek CID | Sprawdź osadzenie czcionek; niektóre zeskanowane pliki PDF wymagają OCR |
| Nie znaleziono fragmentów tekstu | Zawartość strony to obraz, a nie tekst | Użyj narzędzia OCR, aby najpierw przekonwertować obrazy stron na tekst |
| Wyrażenie regularne nie zwraca żadnych dopasowań | Wzorzec nie uwzględnia spacji wstawianych przez układ tekstu w PDF | Znormalizuj spacje lub użyj luźniejszego wzorca |
TextState.Font jest null | Zasób czcionki brakuje w pliku PDF | Obsługuj sprawdzanie wartości null przy inspekcji właściwości czcionki |
FAQ
Czy mogę wyodrębnić tekst z określonego obszaru strony?
Tak. Ustaw TextFragmentAbsorber.TextSearchOptions.Rectangle, aby ograniczyć wyszukiwanie do określonego obszaru strony.
Czy wyodrębnianie tekstu zachowuje kolejność czytania?
Biblioteka zwraca tekst w kolejności strumienia zawartości. W układach wielokolumnowych może być konieczne posortowanie fragmentów według pozycji.
Czy mogę wyodrębnić tekst ze wszystkich stron jednocześnie?
Tak. Wywołaj doc.Pages.Accept(absorber), aby przeszukać każdą stronę w dokumencie.
API Reference Podsumowanie
| Klasa / Metoda | Opis |
|---|---|
TextAbsorber | Wyodrębnia cały tekst jako pojedynczy ciąg znaków |
TextFragmentAbsorber | Wyodrębnia strukturalne fragmenty tekstu wraz z danymi o położeniu i czcionce |
TextFragment | Fragment tekstu z pozycją, stanem tekstu i segmentami |
TextFragment.Text | Wyodrębniony ciąg znaków |
TextFragment.Position | Współrzędne na stronie |
TextFragment.TextState | Informacje o czcionce, rozmiarze i kolorze |
TextFragment.Segments | Podciągi w obrębie fragmentu |
TextParagraph | Konstruktor bloków tekstu wieloliniowego |
TextState | Nazwa czcionki, rozmiar, kolor i właściwości stylu |
FontRepository | Statyczne wyszukiwanie i ładowanie czcionki |
FontRepository.FindFont | Znajdź czcionkę po nazwie |