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
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);
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load the PDF and perform OCR
Using input As New OcrInput()
input.LoadPdf("scanned-report.pdf")
' Run recognition
Dim result As OcrResult = ocr.Read(input)
' Access the extracted text
Dim text As String = result.Text
Console.WriteLine(text)
End Using
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

Saída

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);
Imports IronOcr
Imports System.Collections.Generic
Dim ocr As New IronTesseract()
' Specify pages to process (zero-based: 0 = first page)
Dim targetPages As New List(Of Integer) From {0, 2, 4}
Using input As New OcrInput()
input.LoadPdf("lengthy-document.pdf", pageIndices:=targetPages)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
' Define the scan region: X, Y, Width, Height (all in pixels from top-left)
Dim invoiceFields As Rectangle() = {
New Rectangle(130, 290, 250, 50) ' Invoice number field
}
Using input As New OcrInput()
input.LoadPdf("invoice.pdf", contentAreas:=invoiceFields)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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

Saída

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);
Imports IronOcr
Dim ocr = New IronTesseract()
Using 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
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("protected.pdf", password:="secret123")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
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");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf("scanned-archive.pdf")
Dim result As OcrResult = ocr.Read(input)
' Save as a searchable PDF
result.SaveAsSearchablePdf("output-searchable.pdf")
End Using
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}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadPdf("shipment-labels.pdf")
Dim result As OcrResult = ocr.Read(input)
' Access recognized text
Console.WriteLine(result.Text)
' Access barcode data
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Format}, Value: {barcode.Value}")
Next
End Using
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:
| 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 IronOcrou 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
DeskeweDeNoisee 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.
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.



