Esta página puede contener texto traducido automáticamente.

Extraer texto de PDF en C# y VB.NET

Extraer texto de un documento PDF es una tarea común para los desarrolladores de C# y VB.NET. Puede utilizar la biblioteca Docotic.Pdf para extraer texto en solo unas pocas líneas de código en Windows, Linux, macOS, Android, iOS o en un entorno de nube.

Biblioteca Docotic.Pdf 9.5.17573-dev Pruebas de regresión 14,726 pasaron Descargas totales de NuGet 4,765,230

Necesitará la biblioteca Docotic.Pdf para probar el código de muestra. Obtenga la biblioteca y una clave de licencia gratuita por tiempo limitado en la página Descargar la biblioteca PDF de C# .NET.

Existen diferentes enfoques para la extracción de texto. Veamos algunos ejemplos prácticos.

Extraer texto de PDF

Convertir PDF a texto sin formato

Puede utilizar texto sin formato para indexar, leer o realizar algún tipo de análisis del contenido del PDF. Este ejemplo muestra cómo convertir PDF a texto en C#:

using BitMiracle.Docotic.Pdf;

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string documentText = pdf.GetText();
    Console.WriteLine(documentText);
}

PdfDocument.GetText() proporciona el siguiente resultado para el documento de muestra:

Resultado de la extracción de texto plano de un documento PDF en C# .NET

Alternativamente, puede extraer texto de páginas individuales:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    for (int i = 0; i < pdf.PageCount; ++i)
    {
        string pageText = pdf.Pages[i].GetText();
        using (var writer = new StreamWriter($"page_{i}.txt"))
            writer.Write(pageText);
    }
}

Hay ejemplos relacionados de C# y VB.NET disponibles en GitHub.

Convertir PDF a texto formateado

Puede utilizar texto formateado para analizar algunos datos de texto estructurado o para mostrar el texto en un formato legible por humanos. Este ejemplo muestra cómo convertir PDF a texto formateado en C#:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    string formattedText = pdf.GetTextWithFormatting(); // or use pdf.Pages[i].GetTextWithFormatting()
    Console.WriteLine(formattedText);
}

PdfDocument.GetTextWithFormatting() proporciona el siguiente resultado para el documento de muestra: Resultado de la extracción de texto formateado de un documento PDF en C# .NET

Extraiga texto sin formato o formateado de un área específica

Es posible que necesites extraer texto únicamente de una parte específica de una página PDF. Por ejemplo, para analizar únicamente el texto del encabezado de la página. La biblioteca también lo apoya. Ejemplo de C#:

using (var pdf = new PdfDocument("your_document.pdf"))
{
    var page = pdf.Pages[0];
    var options = new PdfTextExtractionOptions
    {
        Rectangle = new PdfRectangle(0, 0, page.Width, 100),
        WithFormatting = false
    };
    string areaText = page.GetText(options);
    Console.WriteLine(areaText);
}

Este ejemplo proporciona el siguiente resultado para el documento de muestra: Resultado de la extracción de texto de un área específica en C# .NET

Extraer información de texto detallada

También puede obtener información detallada sobre cada fragmento de texto para realizar un análisis completo. Docotic.Pdf proporciona métodos para extraer texto tal cual, por palabras o por caracteres. Para cada fragmento de texto, la biblioteca extrae:

  • Texto Unicode
  • Límites en la página.
  • Fuente
  • Tamaño de fuente
  • Matriz de transformación, que es útil para texto escalado y rotado.
  • Modo de renderizado
  • Color de relleno, opacidad, patrón.
  • Estilo de contorno
  • Información detallada sobre cada personaje.

Este ejemplo muestra cómo extraer texto por palabras de una página PDF en C#:

using (PdfDocument pdf = new PdfDocument("your_document.pdf"))
{
    PdfPage page = pdf.Pages[0];
    foreach (PdfTextData data in page.GetWords())
    {
        Console.WriteLine(
            $"{{\n" +
            $"  text: '{data.GetText()}',\n" +
            $"  bounds: {data.Bounds},\n" +
            $"  font name: '{data.Font.Name}',\n" +
            $"  font size: {data.FontSize},\n" +
            $"  transformation matrix: {data.TransformationMatrix},\n" +
            $"  rendering mode: '{data.RenderingMode}',\n" +
            $"  brush: {data.Brush},\n" +
            $"  pen: {data.Pen}\n" +
            $"}},"
        );

        page.Canvas.DrawRectangle(data.Bounds);
    }

    pdf.Save("result.pdf");
}

El ejemplo proporciona el siguiente resultado para el documento de muestra: Resultado de la extracción detallada de texto de PDF en C# .NET

Puede utilizar los siguientes métodos de Docotic.Pdf para obtener información de texto detallada:

Ejemplos de GitHub relacionados:

Extraiga texto de derecha a izquierda y bidireccional

Docotic.Pdf extrae correctamente texto árabe, hebreo y persa de documentos PDF.

Internamente, los documentos PDF almacenan texto según el orden visual. Significa que el texto en idiomas con escritura de derecha a izquierda se almacena al revés. Docotic.Pdf reordena el texto extraído según su orden lógico. Esto es lo que suelen esperar los lectores de texto de derecha a izquierda.

No tienes que hacer nada especial. Simplemente use los fragmentos de código anteriores para obtener el texto RTL en el orden correcto.

OCR (reconocimiento de texto)

Si los archivos PDF que maneja contienen imágenes con texto, puede extraer el texto usando [reconocimiento óptico de caracteres] (https://en.wikipedia.org/wiki/Optical_character_recognition). Los siguientes ejemplos muestran cómo hacerlo usando Docotic.Pdf y Tesseract:

Consulte el artículo OCR PDF en .NET para obtener más detalles.

Carga de fuentes en entornos de nube

Los ejemplos anteriores funcionan bien en cualquier entorno: en Windows, Linux, macOS. En plataformas en la nube, como AWS Lambda, es posible que deba realizar un paso de configuración adicional.

Hay documentos PDF que utilizan fuentes no incrustadas. De forma predeterminada, Docotic.Pdf carga dichas fuentes desde la colección de fuentes del sistema (por ejemplo, C:/Windows/Fonts o /usr/share/fonts). Sin embargo, las plataformas en la nube pueden restringir el acceso a estas colecciones de fuentes.

Puede implementar su propia colección de fuentes populares con su aplicación. Busque y copie archivos de fuentes públicas a su proyecto. Marque todos los archivos de fuentes con CopyToOutputDirectory = Always en su proyecto .NET. Para usar la colección, inicialice PdfDocument con un DirectoryFontLoader personalizado:

PdfConfigurationOptions config = PdfConfigurationOptions.Create();
config.FontLoader = new DirectoryFontLoader(new[] { "path_to_your_font_collection" }, true);
using (PdfDocument pdf = new PdfDocument("your_document.pdf", config))
{
   ...
}

Conclusión

Puede utilizar la biblioteca Docotic.Pdf para extraer texto sin formato o formateado de PDF en C# y VB.NET. También puede extraer información detallada sobre cada fragmento de texto. Puede descargar Docotic.Pdf aquí.

Mire ejemplos de C# y VB.NET para extraer texto de PDF: