
Buscar texto específico en PDF documentos es una tarea común en sistemas de gestión de documentos, herramientas de revisión legal, procesadores de facturas y otras aplicaciones empresariales. Ya sea que esté intentando localizar una palabra clave, extraer ciertos valores o redactar información sensible, automatizar la búsqueda en PDF puede ahorrar mucho tiempo y esfuerzo.
En esta publicación del blog, aprenderás cómo buscar texto en archivos PDF programáticamente utilizando C#. Te guiaremos a través de las características clave paso a paso con ejemplos de código práctico en C#.
Este artículo cubre los siguientes temas:
- C# Biblioteca para Buscar en Documentos PDF
- Buscar texto en PDF usando C#
- Búsqueda sin distinguir entre mayúsculas y minúsculas y búsqueda de palabras completas en PDF
- Buscar con expresiones regulares en PDF
- Buscar y extraer texto con detalles de posición
- Resaltando o Reemplazando el Texto Encontrado
- Buscar en todas las páginas o en páginas específicas
- Buscar y redactar información sensible
- Recursos gratuitos
C# Biblioteca para Buscar en Documentos PDF
Aspose.PDF for .NET simplifica el proceso de búsqueda de texto en archivos PDF utilizando C#. Te permite encontrar palabras exactas, coincidir patrones utilizando expresiones regulares e incluso resaltar o reemplazar texto coincidente, todo con solo unas pocas líneas de código. Esta poderosa biblioteca proporciona características robustas para manipular documentos PDF. Permite a los desarrolladores implementar fácilmente funcionalidades de búsqueda. Con Aspose.PDF, puedes encontrar rápidamente palabras en un PDF, lo que lo convierte en una herramienta invaluable para los desarrolladores de software.
Antes de sumergirte en la búsqueda de texto en PDF, necesitas configurar tu entorno de desarrollo. Sigue estos pasos para comenzar con Aspose.PDF for .NET:
1. Instalar Aspose.PDF for .NET.
Descárgalo desde el releases o instálalo a través de NuGet.Abre tu proyecto .NET en Visual Studio y ejecuta el siguiente comando en la Consola del Administrador de Paquetes NuGet:
PM> Install-Package Aspose.PDF
Este comando añade la biblioteca Aspose.PDF a tu proyecto para que puedas acceder a sus poderosas funciones de procesamiento de PDF.
2. Importar los espacios de nombres requeridos
En la parte superior de tu archivo C#, añade estas directivas using:
using Aspose.Pdf;
using Aspose.Pdf.Text;
Ahora estás listo para comenzar a buscar texto dentro de tus archivos PDF utilizando la API de Aspose.PDF.
Buscar texto en PDF usando C#
Con Aspose.PDF for .NET, puedes buscar fácilmente palabras o frases específicas en un PDF, localizar todas sus instancias y tomar acciones como resaltarlas o extraer sus detalles.
Sigue estos pasos para realizar una búsqueda de texto básica:
- Cargue el archivo PDF de destino utilizando la clase Document.
- Cree un TextFragmentAbsorber para definir la palabra clave de búsqueda.
- Ejecuta el absorbedor en todas las páginas utilizando el método Accept().
- Recuperar todos los fragmentos de texto que coincidan.
- Imprima el número de coincidencias encontradas.
- Recorra y muestre cada coincidencia con su número de página.
El siguiente ejemplo de código implementa estos pasos.
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Crea un absorbedor de texto con la palabra clave de búsqueda
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");
// Aplique el absorbente a todas las páginas
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Get the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Imprimir cuántas veces se encontró la palabra clave
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Recorrer e imprimir cada texto encontrado
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Ejemplo de salida
Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3
Este ejemplo demuestra una búsqueda simple de palabras clave que funciona en todas las páginas del PDF. Verás el texto coincidente junto con su número de página.
Comprender las Clases Clave Utilizadas en la Búsqueda de PDF
Para entender mejor lo que está sucediendo en el código, aquí hay un breve desglose de las clases y métodos clave involucrados:
Documento
: Representa todo el archivo PDF. Proporciona acceso a páginas, contenido y estructura.TextFragmentAbsorber
: Encuentra todas las ocurrencias de una cadena o patrón dado dentro del PDF. También puedes habilitar características como búsqueda sin distinción entre mayúsculas y minúsculas o búsqueda basada en expresiones regulares.Accept()
: Aplica el absorbente a cada página. Escanea el documento y recoge fragmentos que coinciden.TextFragments
: Una colección de todos los fragmentos de texto coincidentes devueltos por el absorbedor.TextFragment
: Cada coincidencia individual con detalles como contenido, posición y número de página.
Búsqueda sin tener en cuenta mayúsculas y minúsculas y de palabra completa utilizando C#
Cuando buscas contenido en PDF, necesitas controlar cómo el sistema encuentra coincidencias para asegurar resultados precisos. A veces, quieres ignorar la capitalización de letras (“Invoice” vs. “invoice”), o quieres coincidir solo palabras completas—no coincidencias parciales dentro de otras palabras.
Aspose.PDF for .NET te ofrece las herramientas para hacer ambas cosas.
Búsqueda sin distinción de mayúsculas y minúsculas
Por defecto, las búsquedas son sensibles a mayúsculas y minúsculas. Para ignorar el uso de mayúsculas, utiliza TextSearchOptions
con IgnoreCase
habilitado:
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Crear un absorbente de texto con una expresión regular que no distinga entre mayúsculas y minúsculas.
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");
// Establecer opciones de búsqueda de texto para habilitar el uso de expresiones regulares
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Aplica el absorbedor a todas las páginas
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Recorrer y mostrar cada fragmento de texto encontrado
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Esto encontrará tanto "Invoice", "invoice", "INVOICE", como otras variaciones.
Coincidir Solo Palabras Completas
También puedes prevenir coincidencias parciales. Por ejemplo, buscar car
no debería coincidir con care
o scar
.
// Load the PDF file
Document pdfDocument = new Document("sample.pdf");
// Crea un absorbente de texto con un patrón de expresión regular para coincidencia de palabras completas
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");
// Establecer opciones de búsqueda de texto para habilitar el uso de expresiones regulares
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// Aplica el absorbente a todas las páginas
pdfDocument.Pages.Accept(textFragmentAbsorber);
// Retrieve the matched text fragments
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// Recorra y muestre cada fragmento de texto encontrado
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
Esto asegura que solo se coincidan instancias independientes de la palabra “car”.
Buscando con Expresiones Regulares en PDF
En ciertos casos, necesitas encontrar más que una palabra específica: quieres coincidir con patrones como fechas, direcciones de correo electrónico o números de referencia. Ahí es donde entran las expresiones regulares (regex).
Aspose.PDF for .NET te permite usar regex para la búsqueda avanzada de texto en cualquier parte de tu documento PDF.
Ejemplo: Encontrar todas las fechas en un PDF
Supongamos que quieres encontrar todas las fechas en el formato dd/mm/yyyy
:
// Cargar PDF y buscar texto
Document pdfDocument = new Document("sample.pdf");
// Habilitar regex en las opciones de búsqueda
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
IsRegularExpressionUsed = true
};
// Crear absorbente con patrón de fecha
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);
// Aplicar absorbente a las páginas
pdfDocument.Pages.Accept(absorber);
// Bucle e imprime patrones encontrados
foreach (TextFragment fragment in absorber.TextFragments)
{
Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}
Otros patrones útiles:
- Emails:
\b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
- Números de teléfono:
\d{3}[-.\s]??\d{3}[-.\s]??\d{4}
- Números de Factura:
INV-\d+
Regex amplía tus capacidades de búsqueda más allá del texto estático, ayudándote a extraer datos estructurados de documentos no estructurados.
Buscar y extraer texto con detalles de posición
A veces, encontrar el texto no es suficiente: es posible que necesites saber dónde aparece exactamente en el PDF. Aspose.PDF te permite extraer el número de página, las coordenadas y los detalles de formato de cada coincidencia.
Esta función es especialmente útil para construir índices, etiquetar documentos o crear enlaces clicables.
Ejemplo: Obtener la posición de cada coincidencia
// Cargar PDF y buscar texto
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
// Obtener fragmentos emparejados
TextFragmentCollection fragments = absorber.TextFragments;
// Imprimir posición y texto para cada coincidencia
foreach (TextFragment fragment in fragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Page: {fragment.Page.Number}");
Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
Console.WriteLine("------------");
}
Sample Output
Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Ahora sabes exactamente dónde aparece la palabra “factura”, junto con cómo está estilizada. Este nivel de detalle abre la puerta a un procesamiento avanzado, como anotaciones, información sobre herramientas o resaltados dinámicos.
Resaltar o Reemplazar Texto Encontrado
Una vez que haya localizado texto específico en un PDF, puede llevarlo un paso más allá destacándolo o incluso reemplazándolo con nuevo contenido. Aspose.PDF for .NET le permite dar estilo o modificar el texto coincidente fácilmente utilizando el TextFragment
objeto.
Buscar y resaltar texto en PDF
Puedes resaltar visualmente el texto cambiando su color de fondo y de fuente.
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
foreach (TextFragment fragment in absorber.TextFragments)
{
// Highlight by changing text appearance
fragment.TextState.BackgroundColor = Color.Yellow;
fragment.TextState.ForegroundColor = Color.Red;
fragment.TextState.FontStyle = FontStyles.Bold;
}
Esto es útil para revisar, marcar en rojo o generar informes anotados.
Encontrar y Reemplazar Texto
¿Necesitas redactar o actualizar el texto en el documento? Simplemente reemplace directamente:
foreach (TextFragment fragment in absorber.TextFragments)
{
fragment.Text = "REDACTED";
}
Puedes incluso aplicar un nuevo formato al reemplazar:
fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;
Resaltar y reemplazar texto de manera programática te permite automatizar muchas tareas de procesamiento de documentos, como limpiar plantillas, actualizar contenido desactualizado o censurar datos privados.
Buscar en Todas las Páginas o Páginas Específicas
Por defecto, Aspose.PDF busca en todas las páginas de un PDF. Pero a veces, es posible que desee limitar la búsqueda a una página específica o a un rango de páginas, especialmente al trabajar con archivos grandes o cuando el contenido es predecible.
Aspose.PDF facilita hacer ambas cosas.
Buscar en todas las páginas (predeterminado)
Si no especificas una página, el absorbedor busca automáticamente en cada página.
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages
Buscar en una página específica
También puedes buscar una sola página dirigiéndote directamente a ella:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);
Buscar en un rango de páginas
Para buscar un rango personalizado (por ejemplo, páginas 2 a 4), simplemente itera a través del rango:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
pdfDocument.Pages[i].Accept(absorber);
}
Este enfoque te brinda control total sobre el rendimiento y la precisión, especialmente útil para documentos escaneados o seccionados.
Caso de Uso Avanzado: Buscar y Redactar Información Sensible
En documentos legales, de recursos humanos o financieros, es común ocultar contenido sensible—como nombres, identificaciones o números de cuentas—antes de compartir. Aspose.PDF for .NET facilita esto al combinar funciones de búsqueda con características de redacción.
Puedes buscar términos y luego aplicar una superposición negra usando RedactionAnnotation
.
// Cargar PDF y buscar texto
Document pdfDocument = new Document("sample.pdf");
// Buscar el nombre "John Doe"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);
// Recorra los fragmentos encontrados y redacte
foreach (TextFragment fragment in absorber.TextFragments)
{
// Obtener posición y dimensiones
Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
fragment.Position.XIndent,
fragment.Position.YIndent,
fragment.Position.XIndent + fragment.Rectangle.Width,
fragment.Position.YIndent + fragment.Rectangle.Height
);
// Crear una anotación de redacción
RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
{
FillColor = Color.Black,
Color = Color.Black
};
// Agregar y aplicar la redacción
fragment.Page.Annotations.Add(redaction);
redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");
¿Qué sucede?
- El texto objetivo ("John Doe") se encuentra y está cubierto con una caja negra.
- Esto no es solo visual: elimina el contenido de la capa PDF, haciéndolo irrecuperable del archivo.
Obtén una licencia gratuita
Ahora que has aprendido cómo buscar, extraer, resaltar y redactar texto en PDFs utilizando Aspose.PDF for .NET, es hora de poner ese conocimiento en acción.
Pruébalo tú mismo: Descarga una licencia temporal gratuita y comienza a construir tus propias herramientas PDF inteligentes.
Buscar en PDF: Recursos Gratis
¿Quieres ir más allá de solo buscar texto en PDFs? Explora todas las capacidades de Aspose.PDF for .NET con estos recursos gratuitos, amigables para desarrolladores:
Guía del desarrollador Aprende a crear, modificar, convertir y proteger archivos PDF de forma programática. Aspose.PDF for .NET Documentation
Herramientas en Línea Gratis Convierta, combine, divida y edite archivos PDF directamente en su navegador. Aspose Free PDF Tools
Referencia de API Aprenda más sobre clases, propiedades y métodos disponibles en Aspose.PDF for .NET para acelerar su desarrollo. Aspose.PDF API Reference
Soporte del foro Haga preguntas, informe problemas y obtenga respuestas directamente de los expertos de Aspose. Aspose Support Forum
Estos recursos son gratuitos y están disponibles para ayudarte a aprovechar al máximo tu viaje de desarrollo de PDF.
Conclusión
Buscar texto en archivos PDF es una función vital para muchas aplicaciones basadas en documentos, ya sea que estés extrayendo datos, auditando contenido o preparando archivos para ser redactados. Con Aspose.PDF for .NET, puedes realizar búsquedas de palabras clave fácilmente, utilizar expresiones regulares, resaltar resultados e incluso redactar información sensible con precisión y control. Aspose.PDF ofrece una API amigable para desarrolladores que simplifica operaciones complejas en PDF, ahorrándote tiempo mientras habilitas una poderosa automatización.
Si tiene alguna pregunta o necesita más ayuda, no dude en comunicarse en nuestro foro de soporte gratuito.