Extracción de texto
Extracción de texto
Aspose.PDF FOSS for .NET proporciona varios mecanismos para extraer texto de páginas PDF. TextFragmentAbsorber es la herramienta principal — escanea el contenido de la página y devuelve objetos TextFragment estructurados con información de posición, fuente y estilo.
Extracción básica de texto
TextAbsorber extrae todo el texto de una página o documento como una cadena única.
using var doc = Document.Open(pdfBytes);
var absorber = new TextAbsorber();
doc.Pages[1].Accept(absorber);
string pageText = absorber.Text;Extrayendo fragmentos de texto
TextFragmentAbsorber proporciona resultados estructurados. Cada TextFragment incluye el texto extraído, su posición en la página y los detalles de la fuente.
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}");
}Búsqueda con expresiones regulares
Pase un patrón regex a TextFragmentAbsorber para encontrar texto específico.
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}");
}Segmentos de texto
Cada TextFragment puede contener varios objetos TextSegment cuando el texto abarca diferentes ejecuciones de fuente.
foreach (var fragment in absorber.TextFragments)
{
foreach (var segment in fragment.Segments)
{
Console.WriteLine($"Segment: {segment.Text}, Font: {segment.TextState.Font.FontName}");
}
}Gestión de fuentes
FontRepository proporciona métodos para encontrar y cargar fuentes.
var font = FontRepository.FindFont("Helvetica");Construcción de párrafos de texto
TextParagraph permite construir bloques de texto multilínea para insertarlos en una página.
var paragraph = new TextParagraph();
paragraph.AppendLine(new TextFragment("First line"));
paragraph.AppendLine(new TextFragment("Second line"));Consejos y mejores prácticas
- Use
TextFragmentAbsorbercuando necesite datos de posición y fuente; useTextAbsorberpara la extracción de texto sin formato. - Acepte el absorbente en una sola página para obtener resultados más rápidos, o en
doc.Pagespara buscar en todo el documento. - La búsqueda con expresiones regulares es sensible a mayúsculas y minúsculas por defecto — use el prefijo
(?i)para coincidencias sin distinción de mayúsculas. - Verifique
TextState.Font.IsEmbeddedpara determinar si una fuente está incrustada en el PDF. - Para documentos grandes, procese las páginas una a una para gestionar el uso de memoria.
Problemas comunes
| Problema | Causa | Solución |
|---|---|---|
| El texto extraído está distorsionado | El PDF usa una codificación no estándar o un mapeo de fuentes CID | Verifique la incrustación de fuentes; algunos PDFs escaneados requieren OCR |
| No se encontraron fragmentos de texto | El contenido de la página es una imagen, no texto | Utilice una herramienta OCR para convertir primero las páginas de imagen a texto |
| La expresión regular no devuelve coincidencias | El patrón no tiene en cuenta los espacios insertados por el diseño de texto del PDF | Normalice los espacios o use un patrón más flexible |
TextState.Font es nulo | Falta el recurso de fuente en el PDF | Realice verificaciones de nulos al inspeccionar las propiedades de la fuente |
Preguntas frecuentes
¿Puedo extraer texto de una región específica de una página?
Sí. Establezca TextFragmentAbsorber.TextSearchOptions.Rectangle para limitar la búsqueda a un área específica de la página.
¿La extracción de texto preserva el orden de lectura?
La biblioteca devuelve texto en orden de flujo de contenido. Para diseños de varias columnas, es posible que necesite ordenar los fragmentos por posición.
¿Puedo extraer texto de todas las páginas a la vez?
Sí. Llame doc.Pages.Accept(absorber) para buscar en cada página del documento.
Resumen de la referencia API
| Clase / Método | Descripción |
|---|---|
TextAbsorber | Extrae todo el texto como una única cadena |
TextFragmentAbsorber | Extrae fragmentos de texto estructurados con datos de posición y fuente |
TextFragment | Una ejecución de texto con posición, estado del texto y segmentos |
TextFragment.Text | La cadena de texto extraída |
TextFragment.Position | Coordenadas en la página |
TextFragment.TextState | Información de fuente, tamaño y color |
TextFragment.Segments | Sub‑ejecutaciones dentro del fragmento |
TextParagraph | Constructor para bloques de texto multilínea |
TextState | Propiedades de nombre de fuente, tamaño, color y estilo |
FontRepository | Búsqueda y carga estática de fuentes |
FontRepository.FindFont | Buscar una fuente por nombre |