Ir para o conteúdo do rodapé
UTILIZANDO O IRONOCR

Como realizar OCR em um PDF usando C#: Extrair texto de documentos digitalizados com .NET

Documentos PDF digitalizados apresentam um desafio persistente para desenvolvedores .NET: o texto existe apenas como imagens, tornando impossível pesquisar, copiar ou processar programaticamente. O Reconhecimento Óptico de Caracteres (OCR) resolve isso convertendo imagens digitalizadas em dados editáveis e pesquisáveis - transformando documentos em papel, imagens capturadas por câmeras ou qualquer arquivo PDF baseado em imagens em texto selecionável por máquina. Seja o objetivo digitalizar arquivos em papel, automatizar a extração de dados ou construir pipelines de processamento de documentos, a capacidade de realizar OCR em arquivos PDF em C# é uma capacidade crítica.

IronOCR é uma biblioteca OCR for .NET construída no motor Tesseract 5 com melhorias adicionais de precisão. Ela permite que desenvolvedores extraiam texto de qualquer documento PDF - digitalizado ou não - com um pequeno número de linhas de código. Este artigo percorre os fluxos de trabalho principais: OCR básico de PDF, processamento seletivo por página, extração direcionada por região e pré-processamento de imagens para digitalizações desafiadoras.

Como Você Realiza OCR em um PDF no C#?

O caminho mais rápido para extração de texto de PDF em .NET começa com a instalação do IronOCR via NuGet. Abra um terminal no diretório do seu projeto e execute:

dotnet add package IronOcr
dotnet add package IronOcr
SHELL

Com o pacote instalado, o seguinte programa de declaração de nível superior lê um PDF digitalizado e imprime seu texto extraído:

using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
using IronOcr;

// Initialize the OCR engine
var ocr = new IronTesseract();

// Load the PDF and perform OCR
using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");

// Run recognition
OcrResult result = ocr.Read(input);

// Access the extracted text
string text = result.Text;
Console.WriteLine(text);
$vbLabelText   $csharpLabel

A classe IronTesseract envolve o Tesseract 5 com otimizações nativas do .NET para ambos os alvos .NET Core e .NET Framework. O objeto OcrInput gerencia o carregamento de PDF e a renderização de páginas internas. Quando Read é chamado, o processo de OCR analisa cada página e retorna um OcrResult contendo o texto completo extraído, além de dados estruturados sobre parágrafos, linhas, palavras e suas coordenadas de pixels.

O resultado pode ser escrito em um arquivo de texto, passado para a lógica de processamento a jusante, armazenado em um banco de dados ou alimentado em um pipeline de indexação de documentos. Para mais leitura sobre o motor subjacente, consulte a documentação do Tesseract OCR e a referência da API do IronOCR.

Entrada

Como fazer OCR de um PDF: Extrair Texto de Documentos Digitalizados com C# .NET OCR PDF: Imagem 1 - PDF de Exemplo

Saída

Como fazer OCR de um PDF: Extrair Texto de Documentos Digitalizados com C# .NET OCR PDF: Imagem 2 - Saída do Console

Como você lê páginas específicas de um PDF?

Processar todas as páginas de um longo documento desperdiça tempo e memória quando apenas certas páginas contêm conteúdo relevante. O IronOCR permite que você direcione páginas específicas passando índices de páginas baseados em zero para LoadPdf:

using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using System.Collections.Generic;

var ocr = new IronTesseract();

// Specify pages to process (zero-based: 0 = first page)
var targetPages = new List<int> { 0, 2, 4 };

using var input = new OcrInput();
input.LoadPdf("lengthy-document.pdf", pageIndices: targetPages);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

O carregamento seletivo de páginas reduz tanto o tempo de processamento quanto o consumo de memória, o que é importante ao trabalhar com arquivos de centenas de páginas onde apenas algumas contêm os dados necessários. A convenção de índice baseado em zero coincide com coleções padrão do .NET: o índice de página 0 é a primeira página do documento.

Para documentos onde as páginas relevantes não são conhecidas antecipadamente, considere executar uma passagem rápida em todo o documento primeiro com DPI reduzido para identificar os números das páginas e, em seguida, reexecutar com configurações completas apenas nessas páginas.

Saiba mais sobre controle de nível de página na documentação de seleção de página do IronOCR.

Como você extrai dados de uma região específica de uma página?

O processamento de faturas, digitalização de formulários e análise estruturada de documentos frequentemente requerem a extração de texto de uma área definida, em vez de digitalizar uma página inteira. O IronOCR suporta OCR direcionado por região através do parâmetro ContentAreas, que aceita um array de objetos Rectangle especificando quais partes de cada página analisar:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

// Define the scan region: X, Y, Width, Height (all in pixels from top-left)
var invoiceFields = new Rectangle[]
{
    new Rectangle(130, 290, 250, 50)   // Invoice number field
};

using var input = new OcrInput();
input.LoadPdf("invoice.pdf", contentAreas: invoiceFields);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

O construtor Rectangle recebe quatro parâmetros inteiros: as coordenadas X, coordenadas Y, largura e altura -- todos medidos em pixels a partir do canto superior esquerdo da página renderizada. Direcionar uma pequena região em vez de uma página completa reduz tanto o tempo de OCR quanto a chance de o motor captar ruído ao redor ou campos de texto não relacionados.

Para fluxos de trabalho de processamento de faturas em lote, combine a extração de regiões com iteração sobre result.Pages para extrair dados estruturados da mesma posição de campo em centenas de documentos. Cada resultado de página expõe o texto reconhecido para sua área de conteúdo de forma independente.

O exemplo de áreas de conteúdo do IronOCR oferece opções adicionais de configuração para cenários de múltiplas regiões.

Entrada

Como fazer OCR de um PDF: Extrair Texto de Documentos Digitalizados com C# .NET OCR PDF: Imagem 3 - Fatura de Exemplo

Saída

Como fazer OCR de um PDF: Extrair Texto de Documentos Digitalizados com C# .NET OCR PDF: Imagem 4 - Saída dos Dados Extraídos

Como você melhora a precisão do OCR em documentos digitalizados?

Documentos digitalizados do mundo real frequentemente chegam com problemas de qualidade: páginas tortas, baixa resolução ou ruído digital introduzido pelo hardware ou software de digitalização. IronOCR inclui um conjunto de filtros de pré-processamento de imagem que corrigem esses problemas antes que o motor de reconhecimento funcione:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
// Load PDF at higher DPI for improved text recognition on small fonts
input.LoadPdf("poor-quality-scan.pdf", dpi: 300);

// Apply image correction filters
input.Deskew();    // Automatically straighten rotated pages
input.DeNoise();   // Remove scanning artifacts and speckles

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

O parâmetro dpi controla a resolução na qual as páginas do PDF são renderizadas antes de iniciar o reconhecimento. Valores mais altos -- de 200 a 300 DPI -- melhoram a precisão para documentos com texto pequeno ou denso, ao custo de um pouco mais de memória durante o processamento. O método Deskew detecta e corrige automaticamente a rotação da página. DeNoise remove manchas e artefatos que podem confundir a etapa de reconhecimento de caracteres.

Para documentos que requerem correção de imagem mais agressiva, IronOCR também fornece aumento de contraste, binarização (convertendo páginas para preto e branco) e ajustes de escala. Combinar vários filtros em sequência pode recuperar texto utilizável de digitalizações que, de outra forma, produziriam saída confusa. Revise a referência de filtros de imagem do IronOCR para a lista completa de operações de pré-processamento disponíveis.

Como você lida com documentos protegidos por senha e em múltiplos formatos?

IronOCR não está limitado a arquivos PDF padrão. A biblioteca lida com uma variedade de cenários de entrada que aparecem frequentemente em fluxos de trabalho de processamento de documentos.

PDFs protegidos por senha são suportados passando credenciais durante a construção da entrada:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("protected.pdf", password: "secret123");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Formatos de imagem -- PNG, JPEG, TIFF, BMP, GIF e TIFF multipágina -- são carregados com os métodos correspondentes LoadImage ou LoadImageFrames. Os mesmos filtros de pré-processamento e opções de direcionamento de regiões se aplicam independentemente do formato de entrada.

Documentos em vários idiomas são manipulados através do sistema de pacotes de idiomas do IronOCR. A biblioteca vem com o inglês por padrão e suporta mais de 125 pacotes de idiomas adicionais cobrindo scripts latinos, cirílicos, CJK, árabes e outros. Carregue idiomas adicionais antes de chamar Read:

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;
$vbLabelText   $csharpLabel

Para documentos que misturam vários idiomas na mesma página, o modo MultiLanguage está disponível. Isso é particularmente valioso para o processamento de faturas em ambientes internacionais onde cabeçalhos, itens de linha e endereços podem aparecer em diferentes idiomas.

A implantação funciona em ambientes Windows, Linux, macOS e em nuvem, incluindo contêineres Azure e Docker.

Como criar PDFs pesquisáveis a partir de documentos digitalizados?

Além de extrair texto em strings, IronOCR pode produzir saída de PDF pesquisável -- um PDF onde a imagem digitalizada original é preservada como a camada visual enquanto uma camada de texto invisível é incorporada para operações de pesquisa e cópia. Este é o formato padrão produzido por scanners de documentos profissionais.

A função de PDF pesquisável do IronOCR aceita um OcrResult e grava um novo arquivo PDF:

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-archive.pdf");

OcrResult result = ocr.Read(input);

// Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf");
$vbLabelText   $csharpLabel

O arquivo de saída pode ser aberto em qualquer leitor de PDF. Operações como seleção de texto, pesquisa e cópia funcionam na camada de texto incorporada, enquanto a aparência original da digitalização é preservada. Este formato é comumente necessário para arquivos de conformidade, repositórios de documentos legais e sistemas de gerenciamento de conteúdo corporativo.

Para formatos de saída adicionais, o objeto OcrResult também expõe pontuações de confiança por página, caixas delimitadoras de nível de palavra e dados estruturados de parágrafos -- todos úteis para tarefas de classificação ou indexação a jusante.

Como você lê códigos de barras e QR junto com texto?

Pipelines de processamento de documentos frequentemente precisam extrair tanto texto legível por humanos quanto códigos legíveis por máquinas do mesmo documento. IronOCR pode detectar e decodificar códigos de barras e QR durante a mesma passagem de OCR, sem exigir uma biblioteca separada.

Ative a leitura de códigos de barras na instância IronTesseract antes do processamento:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadPdf("shipment-labels.pdf");

OcrResult result = ocr.Read(input);

// Access recognized text
Console.WriteLine(result.Text);

// Access barcode data
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}");
}
$vbLabelText   $csharpLabel

Isso é particularmente útil para processamento de etiquetas de envio, gerenciamento de inventário e qualquer fluxo de trabalho onde códigos de barras e texto impresso apareçam juntos em documentos digitalizados. O guia de leitura de códigos de barras do IronOCR cobre formatos suportados incluindo Code 128, códigos QR, Data Matrix e PDF417.

Qual é a diferença entre os tipos de entrada do IronOCR?

O IronOCR oferece duas abordagens principais para carregar arquivos PDF, cada uma adequada a diferentes cenários:

Métodos de entrada de PDF do IronOCR Comparados
Abordagem Aula Ideal para Notas
Entrada geral `OcrInput.LoadPdf()` A maioria dos casos de uso Suporta todos os filtros de pré-processamento, seleção de páginas, áreas de conteúdo
Específico para PDF `OcrPdfInput` Cenários simples Envoltório de conveniência; menos opções de configuração
Arquivos de imagem `OcrInput.LoadImage()` PNG, JPEG, TIFF, BMP Mesmo pré-processamento e direcionamento de regiões que a entrada de PDF
TIFF de várias páginas `OcrInput.LoadImageFrames()` Arquivos de fax, saída do scanner Processa cada quadro como uma página separada

Para a maioria dos cenários de produção, OcrInput.LoadPdf() é a abordagem recomendada porque expõe a API completa de pré-processamento e configuração. OcrPdfInput funciona bem para prototipagem rápida ou situações em que as configurações padrão são suficientes.

Quais são os seus próximos passos?

Os exemplos de código acima cobrem os fluxos de trabalho principais do IronOCR para OCR de PDF em C#. Aqui está uma breve lista de verificação para dar o próximo passo:

  • Instale o pacote: dotnet add package IronOcr ou procure por IronOcr no NuGet
  • Execute o exemplo básico: Confirme a extração de texto de um PDF de amostra antes de construir toda a lógica do pipeline
  • Aplique pre-processamento: Se estiver trabalhando com documentos digitalizados, adicione chamadas Deskew e DeNoise e teste com amostras representativas
  • Explore recursos adicionais: Saída de PDF pesquisável, leitura de códigos de barras, suporte a múltiplos idiomas, e saída de dados estruturados
  • Revise as orientações de implantação: Artigos sobre implantação no Azure, Docker e Linux cobrem a configuração específica do ambiente
  • Experimente o teste gratuito: Inicie um teste gratuito para testar todo o conjunto de recursos antes de se comprometer com uma licença
  • Obtenha uma licença: As opções de licenciamento do IronOCR cobrem desenvolvedores individuais até implantações empresariais, com redistribuição livre de royalties

Para perguntas sobre casos de uso específicos, a biblioteca de como fazer do IronOCR fornece artigos passo a passo cobrindo dezenas de cenários. Toda a superfície da API está documentada na referência da API do IronOCR.

Perguntas frequentes

Qual é o código mínimo necessário para realizar OCR em um PDF em C#?

Usando o IronOCR, o código mínimo é: criar uma instância do IronTesseract, criar um OcrInput, chamar input.LoadPdf com o caminho do arquivo e, em seguida, chamar ocr.Read(input). A propriedade result.Text retorna a string extraída.

Como instalar o IronOCR em um projeto .NET ?

Execute o comando 'dotnet add package IronOCR' no terminal ou procure por IronOCR no Gerenciador de Pacotes NuGet dentro do Visual Studio.

O IronOCR consegue processar apenas páginas específicas de um PDF?

Sim. Passe uma lista. de índices de página baseados em zero para o parâmetro pageIndices de LoadPdf. Somente as páginas especificadas são renderizadas e processadas, reduzindo o tempo e o uso de memória.

Como extrair texto de uma região específica de um PDF digitalizado?

Passe um array de objetos Rectangle para o parâmetro contentAreas de LoadPdf. Cada retângulo especifica a posição X, a posição Y, a largura e a altura em pixels a partir do canto superior esquerdo da página.

Quais filtros de pré-processamento o IronOCR oferece para documentos digitalizados?

O IronOCR oferece correção de inclinação (corrige a rotação da página), redução de ruído (remove artefatos de digitalização), aprimoramento de contraste, binarização e ajuste de escala. Essas funções podem ser combinadas para melhorar a precisão em digitalizações de baixa qualidade.

O IronOCR suporta arquivos PDF protegidos por senha?

Sim. Passe a senha para o parâmetro `password` da função `LoadPdf`. A biblioteca descriptografa o documento antes de renderizar as páginas para OCR.

O IronOCR consegue gerar PDFs pesquisáveis?

Sim. Após chamar ocr.Read(input), chame result.SaveAsSearchablePdf com o caminho do arquivo de saída. O PDF resultante preserva a digitalização original como camada visual com uma camada de texto invisível incorporada para operações de busca e cópia.

Quais idiomas o IronOCR suporta?

O IronOCR suporta mais de 125 pacotes de idiomas, incluindo alfabetos latino, cirílico, CJK, árabe e outros. Defina a propriedade Language na instância do IronTesseract antes de chamar o método Read.

O IronOCR consegue ler códigos de barras e códigos QR em documentos PDF?

Sim. Defina ocr.Configuration.ReadBarCodes como true antes de chamar Read. A coleção OcrResult.Barcodes contém os valores decodificados e os tipos de formato para todos os códigos detectados.

O IronOCR funciona no Linux e em contêineres Docker?

Sim. O IronOCR suporta implantação em ambientes Windows, Linux, macOS e nuvem, incluindo Azure e contêineres Docker. A documentação da IronSoftware inclui guias de configuração específicos para cada ambiente.

Kannaopat Udonpant
Engenheiro de Software
Antes de se tornar Engenheiro de Software, Kannapat concluiu um doutorado em Recursos Ambientais pela Universidade de Hokkaido, no Japão. Durante o doutorado, Kannapat também integrou o Laboratório de Robótica Veicular, que faz parte do Departamento de Engenharia de Bioprodução. Em 2022, ele utilizou suas habilidades ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me