Como salvar resultados como um PDF pesquisável em C#

Salve PDFs pesquisáveis ​​em C# com IronOCR.

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

O IronOCR permite que desenvolvedores C# convertam documentos e imagens digitalizados em PDFs pesquisáveis ​​usando a tecnologia OCR , com suporte para saída em arquivos, bytes ou fluxos com apenas algumas linhas de código.

Um PDF pesquisável, também conhecido como PDF OCR (Reconhecimento Óptico de Caracteres), é um tipo de documento PDF que contém imagens digitalizadas e texto legível por máquina. Esses PDFs são criados por meio da aplicação de OCR (Reconhecimento Óptico de Caracteres) em documentos ou imagens digitalizados, reconhecendo o texto nas imagens e convertendo-o em texto selecionável e pesquisável.

O IronOCR oferece uma solução para realizar o reconhecimento óptico de caracteres em documentos e exportar os resultados como PDFs pesquisáveis. Ele permite exportar PDFs pesquisáveis ​​como arquivos, bytes e fluxos. Essa funcionalidade é particularmente útil ao trabalhar com documentos digitalizados , digitalizar arquivos em papel ou tornar PDFs antigos pesquisáveis ​​para melhor gerenciamento de documentos.

Início rápido: Exportar PDF pesquisável em uma linha

Defina RenderSearchablePdf = true, execute Read(...) em sua entrada e invoque SaveAsSearchablePdf(...) — é tudo o que precisa para gerar um PDF totalmente pesquisável com IronOCR.

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. Copie e execute este trecho de código.

    new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf");
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer


Como faço para exportar os resultados do OCR como um PDF pesquisável?

Veja como você pode exportar o resultado como um PDF pesquisável usando o IronOCR. Você deve primeiro definir a propriedade Configuration.RenderSearchablePdf para true. Após obter o objeto de resultado do OCR do método Read, use o método SaveAsSearchablePdf especificando o caminho do arquivo de saída. O código abaixo demonstra o uso de um arquivo TIFF de exemplo.

: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");
$vbLabelText   $csharpLabel

Ao trabalhar com arquivos TIFF de várias páginas ou documentos complexos, o IronOCR processa automaticamente todas as páginas e as inclui no PDF pesquisável. A biblioteca gerencia automaticamente a ordem das páginas e o posicionamento da sobreposição de texto, garantindo um mapeamento preciso entre texto e imagem.

Abaixo, segue uma captura de tela do arquivo TIFF de exemplo e um PDF pesquisável incorporado. Tente selecionar o texto no PDF para confirmar se ele pode ser pesquisado. A possibilidade de selecionar também significa que o texto pode ser pesquisado em um visualizador de PDF.

O IronOCR utiliza uma fonte específica para sobrepor o texto ao arquivo de imagem, o que pode resultar em algumas discrepâncias no tamanho do texto.

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

Trabalhando com documentos de várias páginas

Ao lidar com operações de OCR em PDFs com várias páginas, o IronOCR processa cada página sequencialmente e mantém a estrutura original do documento. Aqui está um exemplo de como converter um PDF digitalizado com várias páginas em um PDF pesquisável:

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");
$vbLabelText   $csharpLabel

Como posso aplicar filtros ao criar PDFs pesquisáveis?

O SaveAsSearchablePdf também aceita uma bandeira booleana como segundo parâmetro que permite aplicar filtros a um PDF pesquisável ou não, dando aos desenvolvedores a flexibilidade de escolher. O uso de filtros de otimização de imagem pode melhorar significativamente a precisão do OCR, especialmente ao lidar com digitalizações de baixa qualidade .

Abaixo está um exemplo de aplicação do filtro de escala de cinza e depois salvar o PDF com um filtro colocando true como o 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);
$vbLabelText   $csharpLabel

Para obter os melhores resultados, considere usar o Assistente de Filtros para determinar automaticamente a melhor combinação de filtros para o seu tipo de documento específico. Esta ferramenta analisa os seus dados de entrada e sugere etapas de pré-processamento adequadas.


Como faço para exportar PDFs pesquisáveis ​​como bytes ou fluxos?

A saída do PDF pesquisável também pode ser manipulada como bytes ou streams usando os métodos SaveAsSearchablePdfBytes e SaveAsSearchablePdfStream, respectivamente. O exemplo de código abaixo mostra como utilizar esses 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();
$vbLabelText   $csharpLabel

Essas opções de saída são particularmente úteis ao integrar com serviços de armazenamento em nuvem, bancos de dados ou aplicativos da web, onde o acesso ao sistema de arquivos pode ser limitado. Aqui está um exemplo mais detalhado mostrando aplicações práticas:

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
    }
}
$vbLabelText   $csharpLabel

Considerações sobre o desempenho

Ao processar grandes volumes de documentos, considere implementar operações OCR multithread para melhorar a produtividade. O IronOCR suporta processamento simultâneo, permitindo que você processe vários documentos ao mesmo tempo:

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");
    }
}
$vbLabelText   $csharpLabel

Opções de configuração avançadas

Para cenários mais avançados, você pode aproveitar a configuração detalhada do Tesseract para ajustar o mecanismo de OCR a tipos de documentos ou 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
};
$vbLabelText   $csharpLabel

Resumo

Criar PDFs pesquisáveis ​​com o IronOCR é simples e flexível. Quer você precise processar imagens individuais, documentos com várias páginas ou operações em lote, a biblioteca oferece métodos robustos para gerar PDFs pesquisáveis ​​em diversos formatos. A capacidade de exportar como arquivos, bytes ou fluxos torna o sistema adaptável a qualquer arquitetura de aplicação, desde aplicativos de desktop até serviços baseados em nuvem.

Para cenários de OCR mais avançados, explore os exemplos de código abrangentes ou consulte a documentação da API para obter assinaturas de métodos e opções detalhadas.

Perguntas frequentes

Como posso criar um PDF pesquisável a partir de imagens digitalizadas em C#?

O IronOCR facilita a criação de PDFs pesquisáveis a partir de imagens digitalizadas. Basta definir `RenderSearchablePdf` como `true` na configuração, usar o método `Read()` na imagem de entrada e chamar `SaveAsSearchablePdf()` com o caminho de saída desejado. O IronOCR realizará o OCR na imagem e gerará um PDF com texto selecionável e pesquisável sobreposto à imagem original.

Quais formatos de arquivo podem ser convertidos em PDFs pesquisáveis?

O IronOCR pode converter diversos formatos de imagem, incluindo JPG, PNG, TIFF e documentos PDF existentes, em PDFs pesquisáveis. A biblioteca suporta tanto imagens de página única quanto documentos com várias páginas, como arquivos TIFF, processando automaticamente todas as páginas e mantendo a ordem correta das páginas no PDF pesquisável resultante.

Posso exportar PDFs pesquisáveis como matrizes de bytes ou fluxos em vez de arquivos?

Sim, o IronOCR suporta a exportação de PDFs pesquisáveis em vários formatos. Além de salvar diretamente em um arquivo usando SaveAsSearchablePdf(), você também pode exportar os resultados do OCR como matrizes de bytes ou fluxos, facilitando a integração com aplicativos da web, armazenamento em nuvem ou sistemas de banco de dados sem a necessidade de criar arquivos temporários.

Qual é o código mínimo necessário para criar um PDF pesquisável?

Criar um PDF pesquisável com o IronOCR pode ser feito com apenas uma linha de código: `new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } }.Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf").` Isso demonstra o design simplificado da API do IronOCR.

Como funciona a sobreposição de texto em PDFs pesquisáveis?

O IronOCR lida automaticamente com o posicionamento do texto reconhecido como uma sobreposição invisível sobre a imagem original no PDF. Isso garante um mapeamento preciso de texto para imagem, permitindo que os usuários selecionem e pesquisem texto, mantendo a aparência visual do documento original. A biblioteca utiliza fontes especializadas e algoritmos de posicionamento para alcançar esse resultado.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Analisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente de Programa Principal - Equipe da Comunidade .NET
Jeff também é Gerente de Programa Principal das equipes do .NET e do Visual Studio. Ele é o produtor executivo da série de conferências virtuais .NET Conf e apresenta o "Fritz and Friends", uma transmissão ao vivo para desenvolvedores que vai ao ar duas vezes por semana, onde ele conversa sobre tecnologia e escreve código junto com os espectadores. Jeff cria workshops, apresentações e planeja conteúdo para os maiores eventos de desenvolvedores da Microsoft, incluindo o Microsoft Build, o Microsoft Ignite, a .NET Conf e o Microsoft MVP Summit.
Pronto para começar?
Nuget Downloads 5,525,971 | Versão: 2026.3 acaba de ser lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronOcr
executar um exemplo Veja sua imagem se transformar em texto pesquisável.