Cómo guardar resultados como un PDF buscable en C#

Guarde archivos PDF con capacidad de búsqueda en C# con IronOCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR permite a los desarrolladores de C# convertir documentos e imágenes escaneados en archivos PDF con capacidad de búsqueda mediante tecnologíaOCR, admitiendo la salida como archivos, bytes o secuencias con sólo unas pocas líneas de código.

Un PDF con capacidad de búsqueda, a menudo referido como un PDF con OCR (Reconocimiento Óptico de Caracteres), es un tipo de documento PDF que contiene tanto imágenes escaneadas como texto legible por máquina. Estos PDFs se crean al realizar OCR en documentos de papel escaneados o imágenes, reconociendo el texto en las imágenes y convirtiéndolo en texto seleccionable y con capacidad de búsqueda.

IronOCR proporciona una solución para realizar reconocimiento óptico de caracteres en documentos y exportar los resultados como PDFs con capacidad de búsqueda. Soporta la exportación de PDFs con capacidad de búsqueda como archivos, bytes y flujos. Esta capacidad es especialmente útil cuando se trabaja con documentos escaneados, se digitalizan archivos en papel o se hacen búsquedas en archivos PDF heredados para mejorar la gestión de documentos.

Inicio rápido: Exportar PDF con capacidad de búsqueda en una línea

<Descripción: Diagrama o captura de pantalla que ilustre el concepto de código -->

Establezca RenderSearchablePdf = true, ejecute Read(...) en su entrada, e invoque SaveAsSearchablePdf(...) - eso es todo lo que se necesita para generar un PDF con capacidad de búsqueda completa con IronOCR.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. Copie y ejecute este fragmento de código.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


¿Cómo puedo exportar los resultados del OCR a un PDF que permita búsquedas?

Así exportas el resultado como PDF buscable con IronOCR. Primero debes establecer la propiedad Configuration.RenderSearchablePdf en true. Después de obtener el objeto de resultado de OCR del método Read, utiliza el método SaveAsSearchablePdf especificando la ruta del archivo de salida. El código a continuación demuestra el uso de un archivo TIFF de muestra.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Enable render as searchable PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;

// Add image
using var imageInput = new OcrImageInput("Potter.tiff");
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Export as searchable PDF
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Enable render as searchable PDF
ocrTesseract.Configuration.RenderSearchablePdf = True

' Add image
Dim imageInput = New OcrImageInput("Potter.tiff")
' Perform OCR
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Export as searchable PDF
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
$vbLabelText   $csharpLabel

Cuando se trabaja con archivos TIFF de varias páginas o documentos complejos, IronOcr procesa automáticamente todas las páginas y las incluye en el PDF de salida en el que se pueden realizar búsquedas. La biblioteca gestiona automáticamente el orden de las páginas y el posicionamiento del texto superpuesto, lo que garantiza una asignación precisa del texto a la imagen.

A continuación, una captura del TIFF de muestra y un PDF embebido buscable. Intenta seleccionar el texto en el PDF para confirmar su capacidad de búsqueda. La capacidad de selección también significa que el texto puede ser buscado en un visor de PDF.

IronOCR utiliza un tipo de letra particular para superponer el texto en el archivo de imagen, lo que puede dar lugar a algunas discrepancias en el tamaño del texto.

Page from Harry Potter book showing Chapter Eight 'The Deathday Party' with text about Harry meeting Nearly Headless Nick

Trabajar con documentos de varias páginas

Cuando se trata de operaciones de OCR de PDF en documentos de varias páginas, IronOcr procesa cada página secuencialmente y mantiene la estructura original del documento. He aquí un ejemplo de conversión de un PDF escaneado de varias páginas en un PDF con capacidad de búsqueda:

using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
using IronOcr;

// Initialize IronTesseract with configuration
var ocrTesseract = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        PageSegmentationMode = TesseractPageSegmentationMode.Auto
    }
};

// Load a multi-page PDF
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf");

// Optionally specify page range (e.g., pages 1-10)
pdfInput.SelectPages(1, 10);

// Perform OCR with progress tracking
OcrResult result = ocrTesseract.Read(pdfInput);

// Save as searchable PDF
result.SaveAsSearchablePdf("searchable-multi-page.pdf");

// Display total pages processed
Console.WriteLine($"Processed {result.Pages.Length} pages");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

¿Cómo puedo aplicar filtros al crear archivos PDF con capacidad de búsqueda?

El SaveAsSearchablePdf también acepta un indicador booleano como segundo parámetro que permite aplicar filtros a un PDF con capacidad de búsqueda o no, dando a los desarrolladores la flexibilidad de elegir. El uso de filtros de optimización de imágenes puede mejorar significativamente la precisión del OCR, especialmente cuando se trata de escaneados de baja calidad.

A continuación se muestra un ejemplo de cómo aplicar el filtro de escala de grises y luego guardar el PDF con un filtro poniendo true en el segundo parámetro de SaveAsSearchablePdf.

:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;

var ocr = new IronTesseract();
var ocrInput = new OcrInput();

// Load a PDF file
ocrInput.LoadPdf("invoice.pdf");

// Apply gray scale filter
ocrInput.ToGrayScale();
OcrResult result = ocr.Read(ocrInput);

// Save the result as a searchable PDF with filters applied
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para obtener resultados óptimos, considere la posibilidad de utilizar el Asistente para filtros para determinar automáticamente la mejor combinación de filtros para su tipo de documento específico. Esta herramienta analiza su entrada y sugiere los pasos de preprocesamiento adecuados.


¿Cómo puedo exportar archivos PDF con capacidad de búsqueda como bytes o secuencias?

La salida del PDF con capacidad de búsqueda también se puede manejar como bytes o flujos utilizando los métodos SaveAsSearchablePdfBytes y SaveAsSearchablePdfStream, respectivamente. El ejemplo de código a continuación muestra cómo utilizar estos métodos.

:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Export searchable PDF byte
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();

// Export searchable PDF stream
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Export searchable PDF byte
Dim pdfByte() As Byte = ocrResult.SaveAsSearchablePdfBytes()

' Export searchable PDF stream
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
$vbLabelText   $csharpLabel

Estas opciones de salida son especialmente útiles cuando se integran con servicios de almacenamiento en la nube, bases de datos o aplicaciones web en las que el acceso al sistema de archivos puede ser limitado. He aquí un ejemplo ampliado que muestra aplicaciones prácticas:

using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
using IronOcr;
using System.IO;

public class SearchablePdfExporter
{
    public async Task ProcessAndUploadPdf(string inputPath)
    {
        var ocr = new IronTesseract
        {
            Configuration = { RenderSearchablePdf = true }
        };

        // Process the input
        using var input = new OcrImageInput(inputPath);
        var result = ocr.Read(input);

        // Option 1: Save to database as byte array
        byte[] pdfBytes = result.SaveAsSearchablePdfBytes();
        // Store pdfBytes in database BLOB field

        // Option 2: Upload to cloud storage using stream
        using (Stream pdfStream = result.SaveAsSearchablePdfStream())
        {
            // Upload stream to Azure Blob Storage, AWS S3, etc.
            await UploadToCloudStorage(pdfStream, "searchable-output.pdf");
        }

        // Option 3: Return as web response
        // return File(pdfBytes, "application/pdf", "searchable.pdf");
    }

    private async Task UploadToCloudStorage(Stream stream, string fileName)
    {
        // Cloud upload implementation
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Consideraciones sobre el rendimiento

Al procesar grandes volúmenes de documentos, considere la posibilidad de implementar operaciones de OCR multihilo para mejorar el rendimiento. IronOCR admite el procesamiento concurrente, lo que permite manejar varios documentos a la vez:

using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
using IronOcr;
using System.Threading.Tasks;
using System.Collections.Concurrent;

public class BatchPdfProcessor
{
    private readonly IronTesseract _ocr;

    public BatchPdfProcessor()
    {
        _ocr = new IronTesseract
        {
            Configuration = 
            {
                RenderSearchablePdf = true,
                // Configure for optimal performance
                Language = OcrLanguage.English
            }
        };
    }

    public async Task ProcessBatchAsync(string[] filePaths)
    {
        var results = new ConcurrentBag<(string source, string output)>();

        await Parallel.ForEachAsync(filePaths, async (filePath, ct) =>
        {
            using var input = new OcrImageInput(filePath);
            var result = _ocr.Read(input);

            string outputPath = Path.ChangeExtension(filePath, ".searchable.pdf");
            result.SaveAsSearchablePdf(outputPath);

            results.Add((filePath, outputPath));
        });

        Console.WriteLine($"Processed {results.Count} files");
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Opciones de configuración avanzadas

Para situaciones más avanzadas, puede aprovechar configuración detallada de Tesseract para ajustar el motor de OCR a tipos de documentos o idiomas específicos:

var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
var advancedOcr = new IronTesseract
{
    Configuration = 
    {
        RenderSearchablePdf = true,
        TesseractVariables = new Dictionary<string, object>
        {
            { "preserve_interword_spaces", 1 },
            { "tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" }
        },
        PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
    },
    Language = OcrLanguage.EnglishBest
};
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Resumen

La creación de archivos PDF con capacidad de búsqueda con IronOCR es sencilla y flexible. Tanto si necesita procesar imágenes individuales, documentos de varias páginas u operaciones por lotes, la biblioteca proporciona métodos sólidos para generar PDF con capacidad de búsqueda en varios formatos. La posibilidad de exportar como archivos, bytes o flujos hace que se adapte a cualquier arquitectura de aplicación, desde aplicaciones de escritorio hasta servicios basados en la nube.

Para escenarios de OCR más avanzados, explore los exhaustivos ejemplos de código o consulte la documentación de la API para obtener firmas de métodos y opciones detalladas.

Preguntas Frecuentes

¿Cómo puedo crear un PDF con función de búsqueda a partir de imágenes escaneadas en C#?

IronOCR simplifica la creación de archivos PDF con capacidad de búsqueda a partir de imágenes escaneadas. Basta con establecer RenderSearchablePdf en true en la configuración, utilizar el método Read() en la imagen de entrada y llamar a SaveAsSearchablePdf() con la ruta de salida deseada. IronOCR realizará el OCR en la imagen y generará un PDF con texto seleccionable y buscable superpuesto en la imagen original.

¿Qué formatos de archivo se pueden convertir en PDF con función de búsqueda?

IronOCR puede convertir varios formatos de imagen, incluidos JPG, PNG, TIFF y documentos PDF existentes en PDF con capacidad de búsqueda. La biblioteca admite tanto imágenes de una sola página como documentos de varias páginas, como archivos TIFF, procesando automáticamente todas las páginas y manteniendo el orden correcto de las páginas en el PDF de salida.

¿Puedo exportar archivos PDF con función de búsqueda como matrices de bytes o secuencias en lugar de archivos?

Sí, IronOCR permite exportar archivos PDF con capacidad de búsqueda en varios formatos. Además de guardar directamente en un archivo mediante SaveAsSearchablePdf(), también puede exportar los resultados del OCR como matrices de bytes o flujos, lo que facilita la integración con aplicaciones web, almacenamiento en la nube o sistemas de bases de datos sin crear archivos temporales.

¿Cuál es el código mínimo necesario para crear un PDF con capacidad de búsqueda?

La creación de un PDF con capacidad de búsqueda con IronOCR se puede hacer en una sola línea de código: new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"). Esto demuestra el diseño simplificado de la API de IronOCR.

¿Cómo funciona la superposición de texto en los PDF con función de búsqueda?

IronOCR gestiona automáticamente el posicionamiento del texto reconocido como una superposición invisible sobre la imagen original en el PDF. De este modo se garantiza una asignación precisa del texto a la imagen, lo que permite a los usuarios seleccionar y buscar texto manteniendo el aspecto visual del documento original. Para ello, la biblioteca utiliza fuentes y algoritmos de posicionamiento especializados.

Chaknith Bin
Ingeniero de Software
Chaknith trabaja en IronXL e IronBarcode. Tiene un profundo conocimiento en C# y .NET, ayudando a mejorar el software y apoyar a los clientes. Sus conocimientos derivados de las interacciones con los usuarios contribuyen a mejores productos, documentación y experiencia en general.
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,246,844 | Versión: 2025.12 recién lanzado