Extracció de text
Extracció de text
Aspose.PDF FOSS for .NET proporciona diversos mecanismes per extreure text de
les pàgines PDF. TextFragmentAbsorber és l’eina principal — escaneja el contingut de la pàgina
i retorna objectes estructurats TextFragment amb informació de posició, tipografia i estil
informació.
Extracció de text bàsica
TextAbsorber extreu tot el text d’una pàgina o document com una única cadena.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Extracció de fragments de text
TextFragmentAbsorber proporciona resultats estructurats. Cada TextFragment inclou el text extret, la seva posició a la pàgina i els detalls de la font.
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}");
}Cerca amb expressions regulars
Passa un patró regex a TextFragmentAbsorber per trobar text específic.
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}");
}Segments de text
Cada TextFragment pot contenir múltiples objectes TextSegment quan el text s’estén per diferents execucions de tipografia.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Gestió de fonts
FontRepository proporciona mètodes per trobar i carregar fonts.
var font = FontRepository.FindFont("Helvetica");Construint paràgrafs de text
TextParagraph permet construir blocs de text multilínia per inserir‑los en una pàgina.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Consells i bones pràctiques
- Utilitzeu
TextFragmentAbsorberquan necessiteu dades de posició i de tipografia; utilitzeuTextAbsorberper a l’extracció de text pla. - Accepteu l’absorbedor en una sola pàgina per a resultats més ràpids, o a
doc.Pagesper cercar tot el document. - La cerca d’expressions regulars és sensible a majúscules per defecte — utilitzeu el prefix
(?i)per a coincidències sense distinció de majúscules. - Comproveu
TextState.Font.IsEmbeddedper determinar si una tipografia està incrustada al PDF. - Per a documents grans, processa les pàgines una a una per gestionar l’ús de memòria.
Problemes comuns
| Problema | Causa | Solució |
|---|---|---|
| El text extret és il·legible | El PDF utilitza una codificació no estàndard o un mapatge de fonts CID | Comproveu la incrustació de fonts; alguns PDFs escanejats requereixen OCR |
| No s’han trobat fragments de text | El contingut de la pàgina és una imatge, no text | Utilitzeu una eina OCR per convertir primer les pàgines d’imatge a text |
| L’expressió regular no retorna coincidències | El patró no té en compte els espais inserits per la disposició del text del PDF | Normalitzeu els espais o utilitzeu un patró més flexible |
TextState.Font és nul | Falta el recurs de font al PDF | Gestioneu les comprovacions de nul·litat en inspeccionar les propietats de la font |
PMF
Puc extreure text d’una regió específica d’una pàgina?
Sí. Estableix TextFragmentAbsorber.TextSearchOptions.Rectangle per limitar la cerca a una àrea específica de la pàgina.
L’extracció de text conserva l’ordre de lectura?
La biblioteca retorna text en l’ordre del content-stream. Per a disposicions de diverses columnes, pot ser necessari ordenar els fragments per posició.
Puc extreure text de totes les pàgines alhora?
Sí. Crida doc.Pages.Accept(absorber) per cercar cada pàgina del document.
Resum de la referència de l’API
| Classe / Mètode | Descripció |
|---|---|
TextAbsorber | Extreu tot el text com una única cadena |
TextFragmentAbsorber | Extreu fragments de text estructurat amb posició i dades de tipografia |
TextFragment | Una seqüència de text amb posició, estat del text i segments |
TextFragment.Text | La cadena de text extreta |
TextFragment.Position | Coordenades a la pàgina |
TextFragment.TextState | Informació de tipografia, mida i color |
TextFragment.Segments | Subseqüències dins del fragment |
TextParagraph | Constructor per a blocs de text multilínia |
TextState | Nom de la tipografia, mida, color i propietats d’estil |
FontRepository | Cerca i càrrega estàtica de tipografies |
FontRepository.FindFont | Troba una tipografia per nom |