Textextraktion
Textextraktion
Aspose.PDF FOSS for .NET bietet mehrere Mechanismen zum Extrahieren von Text aus PDF‑Seiten. TextFragmentAbsorber ist das primäre Werkzeug — es scannt den Seiteninhalt und gibt strukturierte TextFragment‑Objekte mit Positions‑, Schrift‑ und Stilinformationen zurück.
Grundlegende Textextraktion
TextAbsorber extrahiert den gesamten Text von einer Seite oder einem Dokument als einzelne Zeichenkette.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Extrahieren von Textfragmenten
TextFragmentAbsorber liefert strukturierte Ergebnisse. Jeder TextFragment enthält den extrahierten Text, seine Position auf der Seite und Schriftartdetails.
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}");
}Suche mit regulären Ausdrücken
Übergeben Sie ein Regex‑Muster an TextFragmentAbsorber, um bestimmten Text zu finden.
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}");
}Textabschnitte
Jedes TextFragment kann mehrere TextSegment‑Objekte enthalten, wenn der Text verschiedene Schriftlaufabschnitte umfasst.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Font-Verwaltung
FontRepository bietet Methoden zum Suchen und Laden von Schriftarten.
var font = FontRepository.FindFont("Helvetica");Erstellung von Textabsätzen
TextParagraph ermöglicht das Erstellen von mehrzeiligen Textblöcken zum Einfügen in eine Seite.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Tipps und bewährte Verfahren
- Verwenden Sie
TextFragmentAbsorber, wenn Sie Positions‑ und Schriftartdaten benötigen; verwenden SieTextAbsorberfür die reine Text‑Extraktion. - Akzeptieren Sie den Absorber auf einer einzelnen Seite für schnellere Ergebnisse oder auf
doc.Pages, um das gesamte Dokument zu durchsuchen. - Die reguläre Ausdruckssuche ist standardmäßig case-sensitive — verwenden Sie das Präfix
(?i)für case-insensitive Übereinstimmungen. - Überprüfen Sie
TextState.Font.IsEmbedded, um festzustellen, ob eine Schriftart im PDF eingebettet ist. - Bei großen Dokumenten verarbeiten Sie die Seiten einzeln, um den Speicherverbrauch zu steuern.
Allgemeine Probleme
| Issue | Cause | Fix |
|---|---|---|
| Extrahierter Text ist unleserlich | PDF verwendet eine nicht standardmäßige Kodierung oder CID-Schriftzuordnung | Überprüfen Sie die Schriftart‑Einbettung; einige gescannte PDFs erfordern OCR |
| Keine Textfragmente gefunden | Seiteninhalt ist ein Bild, kein Text | Verwenden Sie ein OCR‑Tool, um Bildseiten zuerst in Text zu konvertieren |
| Regex liefert keine Treffer | Muster berücksichtigt nicht die durch das PDF‑Textlayout eingefügte Leerzeichen | Normalisieren Sie Leerzeichen oder verwenden Sie ein lockeres Muster |
TextState.Font ist null | Schriftressource fehlt im PDF | Führen Sie Nullprüfungen durch, wenn Sie Schriftarteigenschaften untersuchen |
FAQ
Kann ich Text aus einem bestimmten Bereich einer Seite extrahieren?
Ja. Setzen Sie TextFragmentAbsorber.TextSearchOptions.Rectangle, um die Suche auf einen bestimmten Bereich der Seite zu beschränken.
Bewahrt die Textextraktion die Lesereihenfolge?
Die Bibliothek gibt Text in Content-Stream-Reihenfolge zurück. Für mehrspaltige Layouts müssen Sie möglicherweise Fragmente nach Position sortieren.
Kann ich Text von allen Seiten auf einmal extrahieren?
Ja. Rufen Sie doc.Pages.Accept(absorber) auf, um jede Seite im Dokument zu durchsuchen.
API-Referenzübersicht
| Klasse / Methode | Beschreibung |
|---|---|
TextAbsorber | Extrahiert gesamten Text als einzelne Zeichenkette |
TextFragmentAbsorber | Extrahiert strukturierte Textfragmente mit Positions- und Schriftartdaten |
TextFragment | Ein Textlauf mit Position, Textstatus und Segmenten |
TextFragment.Text | Der extrahierte Textstring |
TextFragment.Position | Koordinaten auf der Seite |
TextFragment.TextState | Schriftart, Größe und Farbinformation |
TextFragment.Segments | Unterläufe innerhalb des Fragments |
TextParagraph | Builder für mehrzeilige Textblöcke |
TextState | Schriftname, Größe, Farbe und Stileigenschaften |
FontRepository | Statischer Schriftart-Lookup und Laden |
FontRepository.FindFont | Finde eine Schriftart nach Namen |