Estrazione del testo
Estrazione del testo
Aspose.PDF FOSS per .NET fornisce diversi meccanismi per estrarre il testo dalle pagine PDF. TextFragmentAbsorber è lo strumento principale — scansiona il contenuto della pagina e restituisce oggetti TextFragment strutturati con informazioni su posizione, carattere e stile.
Estrazione di testo di base
TextAbsorber estrae tutto il testo da una pagina o documento come una singola stringa.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Estrazione di frammenti di testo
TextFragmentAbsorber fornisce risultati strutturati. Ogni TextFragment include il testo estratto, la sua posizione sulla pagina e i dettagli del carattere.
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}");
}Ricerca con espressioni regolari
Passa un pattern regex a TextFragmentAbsorber per trovare testo specifico.
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}");
}Segmenti di testo
Ogni TextFragment può contenere più oggetti TextSegment quando il testo attraversa diverse esecuzioni di font.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Gestione dei font
FontRepository fornisce metodi per trovare e caricare i font.
var font = FontRepository.FindFont("Helvetica");Creazione di paragrafi di testo
TextParagraph consente di costruire blocchi di testo multilinea per l’inserimento in una pagina.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Suggerimenti e buone pratiche
- Usa
TextFragmentAbsorberquando hai bisogno di dati di posizione e carattere; usaTextAbsorberper l’estrazione del testo semplice. - Accetta l’assorbitore su una singola pagina per risultati più rapidi, oppure su
doc.Pagesper cercare l’intero documento. - La ricerca con espressioni regolari è sensibile al maiuscolo/minuscolo per impostazione predefinita — usa il prefisso
(?i)per corrispondenze senza distinzione di maiuscole. - Controlla
TextState.Font.IsEmbeddedper determinare se un carattere è incorporato nel PDF. - Per documenti di grandi dimensioni, elabora le pagine una alla volta per gestire l’uso della memoria.
Problemi comuni
| Problema | Causa | Correzione |
|---|---|---|
| Il testo estratto è illeggibile | Il PDF utilizza una codifica non standard o una mappatura dei font CID | Verifica l’incorporazione dei font; alcuni PDF scansionati richiedono OCR |
| Nessun frammento di testo trovato | Il contenuto della pagina è un’immagine, non testo | Utilizza uno strumento OCR per convertire le pagine immagine in testo prima |
| Regex non restituisce corrispondenze | Il modello non tiene conto degli spazi inseriti dal layout del testo PDF | Normalizza gli spazi o usa un modello più permissivo |
TextState.Font è nullo | La risorsa del font manca nel PDF | Gestisci i controlli di nullità quando ispezioni le proprietà del font |
FAQ
Posso estrarre testo da una regione specifica di una pagina?
Sì. Imposta TextFragmentAbsorber.TextSearchOptions.Rectangle per limitare la ricerca a un’area specifica della pagina.
L’estrazione del testo preserva l’ordine di lettura?
La libreria restituisce il testo nell’ordine del flusso di contenuto. Per layout a più colonne, potresti dover ordinare i frammenti per posizione.
Posso estrarre il testo da tutte le pagine in una volta?
Sì. Chiama doc.Pages.Accept(absorber) per cercare ogni pagina nel documento.
API Reference Sommario
| Classe / Metodo | Descrizione |
|---|---|
TextAbsorber | Estrae tutto il testo come una singola stringa |
TextFragmentAbsorber | Estrae frammenti di testo strutturati con dati di posizione e font |
TextFragment | Una sequenza di testo con posizione, stato del testo e segmenti |
TextFragment.Text | La stringa di testo estratta |
TextFragment.Position | Coordinate nella pagina |
TextFragment.TextState | Informazioni su carattere, dimensione e colore |
TextFragment.Segments | Sotto-run all’interno del frammento |
TextParagraph | Builder per blocchi di testo multilinea |
TextState | Nome del font, dimensione, colore e proprietà di stile |
FontRepository | Ricerca statica e caricamento del font |
FontRepository.FindFont | Trova un font per nome |