Salve PDFs pesquisáveis em C# com IronOCR.
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 código SaveAsSearchablePdf também está disponível nos resultados de ReadPhoto, ReadScreenShot e ReadDocumentAdvanced, permitindo a criação de PDFs pesquisáveis a partir de fotos e fluxos de trabalho avançados de OCR de documentos. Essa funcionalidade é particularmente útil ao digitalizar arquivos em papel ou tornar PDFs antigos pesquisáveis para uma melhor gestão documental.
Início rápido: Exportar PDF pesquisável em uma linha
Defina RenderSearchablePdf = true, execute Read(...) em sua entrada e invoque SaveAsSearchablePdf(...). É só isso que você precisa para gerar um PDF totalmente pesquisável com o IronOCR.
-
Instale IronOCR com o Gerenciador de Pacotes NuGet
PM > Install-Package IronOcr -
Copie e execute este trecho de código.
new IronOcr.IronTesseract { Configuration = { RenderSearchablePdf = true } } .Read(new IronOcr.OcrImageInput("file.jpg")).SaveAsSearchablePdf("searchable.pdf"); -
Implante para testar em seu ambiente de produção.
Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita
Fluxo de trabalho mínimo (5 etapas)
- Baixe uma biblioteca C# para salvar resultados como PDF pesquisável.
- Prepare a imagem e o documento PDF para OCR.
- Defina a propriedade RenderSearchablePdf como
true - Utilize o método
SaveAsSearchablePdfpara gerar um arquivo PDF pesquisável. - Exporte o PDF pesquisável como byte e fluxo.
Como faço para exportar os resultados do OCR como um PDF pesquisável?
Para exportar o resultado como um PDF pesquisável usando o IronOCR, defina a propriedade Configuration.RenderSearchablePdf para true, obtenha o objeto de resultado do OCR do método Read e chame SaveAsSearchablePdf com o caminho do arquivo de saída.
Entrada
Uma única página de um romance de Harry Potter, digitalizada como um arquivo TIFF e carregada via OcrImageInput. A página contém texto impresso denso, uma entrada realista para testar a camada de texto pesquisável do PDF.
potter.tiff: Página digitalizada do romance usada como entrada de OCR para produzir um PDF pesquisável com uma camada de texto invisível.
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf.cs
using IronOcr;
// Create the OCR engine: defaults to English with balanced speed and accuracy
IronTesseract ocrTesseract = new IronTesseract();
// Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = true;
// Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
using var imageInput = new OcrImageInput("Potter.tiff");
// Run OCR; returns a result containing the recognized text and spatial layout data
OcrResult ocrResult = ocrTesseract.Read(imageInput);
// Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf");
Imports IronOcr
' Create the OCR engine: defaults to English with balanced speed and accuracy
Dim ocrTesseract As New IronTesseract()
' Required: without this flag the text overlay layer is not built, and SaveAsSearchablePdf produces a plain image PDF
ocrTesseract.Configuration.RenderSearchablePdf = True
' Wrap the TIFF in OcrImageInput: handles DPI detection and page layout automatically
Using imageInput As New OcrImageInput("Potter.tiff")
' Run OCR; returns a result containing the recognized text and spatial layout data
Dim ocrResult As OcrResult = ocrTesseract.Read(imageInput)
' Write the output: the original scanned image is preserved with an invisible text layer on top
ocrResult.SaveAsSearchablePdf("searchablePdf.pdf")
End Using
Saída
searchablePdf.pdf: PDF pesquisável. Selecione ou pesquise qualquer palavra para verificar a camada de texto OCR.
O PDF resultante incorpora a imagem original da página digitalizada com uma camada de texto invisível posicionada sobre cada palavra reconhecida. Selecione ou pesquise qualquer palavra no visualizador para confirmar se a camada de texto está presente.
O IronOCR utiliza uma fonte específica para a sobreposição, o que pode causar pequenas discrepâncias no tamanho do texto renderizado em comparação com o original.
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 resultado. 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.
Como criar PDFs pesquisáveis a partir de fotos ou digitalizações avançadas de documentos?
A exportação de PDF pesquisável também está disponível ao usar ReadPhoto, ReadScreenShot ou ReadDocumentAdvanced. Cada um desses métodos retorna um tipo de resultado que suporta SaveAsSearchablePdf.
Você pode opcionalmente passar um ModelType ao chamar esses métodos. O valor padrão é Normal, enquanto Enhanced oferece melhor precisão, porém com menor velocidade.
Entrada
Uma foto de um mural com texto pintado, carregada via LoadImage. A cena contém várias palavras inseridas em um ambiente do mundo real, tornando-se um teste prático para ReadPhoto com o modelo Enhanced.
photo.png: Foto de mural carregada via ReadPhoto com o modelo Aprimorado para produzir um PDF pesquisável.
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");
// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);
// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("photo.png");
// ReadPhoto with Enhanced model
OcrPhotoResult photoResult = ocr.ReadPhoto(input, ModelType.Enhanced);
Console.WriteLine(photoResult.Text);
// Save as searchable PDF
byte[] pdfBytes = photoResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-photo.pdf", pdfBytes);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("photo.png")
' ReadPhoto with Enhanced model
Dim photoResult As OcrPhotoResult = ocr.ReadPhoto(input, ModelType.Enhanced)
Console.WriteLine(photoResult.Text)
' Save as searchable PDF
Dim pdfBytes As Byte() = photoResult.SaveAsSearchablePdf()
File.WriteAllBytes("searchable-photo.pdf", pdfBytes)
End Using
Saída
searchable-photo.pdf: PDF pesquisável gerado pelo ReadPhoto. A camada de texto permite a busca de texto completo em qualquer visualizador de PDF.
O PDF pesquisável resultante contém uma camada de texto invisível sobre as palavras reconhecidas. A busca por "Leite" no visualizador de PDF retorna 3 resultados, extraídos diretamente do texto pintado na foto original.
A mesma abordagem funciona com ReadDocumentAdvanced, que retorna um OcrDocAdvancedResult:
Entrada
Uma fatura digitalizada foi carregada via LoadImage. Contém campos estruturados (nome do fornecedor, itens de linha e totais) que o modelo ReadDocumentAdvanced reconhece e incorpora como uma camada de texto pesquisável.
invoice.png: Fatura digitalizada carregada no OcrInput e passada para ReadDocumentAdvanced com o modelo Enhanced.
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("invoice.png");
// ReadDocumentAdvanced with Enhanced model
OcrDocAdvancedResult docResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced);
byte[] docPdfBytes = docResult.SaveAsSearchablePdf();
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("invoice.png")
' ReadDocumentAdvanced with Enhanced model
Dim docResult As OcrDocAdvancedResult = ocr.ReadDocumentAdvanced(input, ModelType.Enhanced)
Dim docPdfBytes As Byte() = docResult.SaveAsSearchablePdf()
File.WriteAllBytes("searchable-doc.pdf", docPdfBytes)
End Using
Saída
searchable-doc.pdf: PDF pesquisável gerado pelo ReadDocumentAdvanced. Os campos da fatura podem ser selecionados e pesquisados.
SaveAsSearchablePdf não é compatível com os resultados ReadPassport ou ReadLicensePlate e lançará um erro ExtensionAdvancedScanException.
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.
Entrada
Um relatório anual de 11 páginas da Hartwell Capital Management carregado via OcrPdfInput. As páginas 1–10 (índices 0–9) são selecionadas usando o intervalo PageIndices e processadas em uma única chamada Read.
multi-page-scan.pdf: Relatório anual de 11 páginas da Hartwell Capital Management usado como entrada para a conversão em PDF pesquisável de várias páginas.
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-multi-page.cs
using IronOcr;
// Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
var ocrTesseract = new IronTesseract();
// Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
using var pdfInput = new OcrPdfInput("multi-page-scan.pdf", PageIndices: Enumerable.Range(0, 10));
// Run OCR across all selected pages in order
OcrResult result = ocrTesseract.Read(pdfInput);
// Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", true);
Imports IronOcr
' Create the OCR engine. RenderSearchablePdf is false by default; no need to set it when using OcrPdfInput directly
Dim ocrTesseract As New IronTesseract()
' Load pages 1–10 (indices 0–9) only; PageIndices avoids loading and OCR-ing the full document unnecessarily
Using pdfInput As New OcrPdfInput("multi-page-scan.pdf", PageIndices:=Enumerable.Range(0, 10))
' Run OCR across all selected pages in order
Dim result As OcrResult = ocrTesseract.Read(pdfInput)
' Write the searchable PDF; true = apply the input's image filters to the embedded page images in the output
result.SaveAsSearchablePdf("searchable-multi-page.pdf", True)
End Using
Saída
searchable-multi-page.pdf: PDF pesquisável de 10 páginas. Cada página possui uma camada de texto invisível para pesquisa de texto completo.
O PDF resultante contém 10 páginas (páginas 1 a 10 do relatório original), cada uma com uma camada de texto invisível que torna o conteúdo extraído selecionável e pesquisável em qualquer visualizador de PDF.
Como posso aplicar filtros ao criar PDFs pesquisáveis?
O segundo parâmetro SaveAsSearchablePdf aceita um valor booleano que controla se os filtros de imagem são aplicados à saída incorporada. 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 .
O exemplo abaixo aplica o filtro de escala de cinza e passa true como segundo argumento para incorporar a imagem filtrada na saída PDF pesquisável.
:path=/static-assets/ocr/content-code-examples/how-to/image-quality-correction-searchable-pdf.cs
using IronOcr;
// Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
var ocr = new IronTesseract();
var ocrInput = new OcrInput();
// Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf");
// Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale();
// Run OCR on the preprocessed input
OcrResult result = ocr.Read(ocrInput);
// Write the searchable PDF; true = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", true);
Imports IronOcr
' Create OCR engine: filters are applied at the OcrInput level, so no configuration changes are needed here
Dim ocr As New IronTesseract()
Dim ocrInput As New OcrInput()
' Load the scanned PDF as the OCR source
ocrInput.LoadPdf("invoice.pdf")
' Convert to grayscale: removes color noise that can reduce OCR accuracy on color-printed documents
ocrInput.ToGrayScale()
' Run OCR on the preprocessed input
Dim result As OcrResult = ocr.Read(ocrInput)
' Write the searchable PDF; True = embed the grayscale-filtered image rather than the original color scan
result.SaveAsSearchablePdf("outputGrayscale.pdf", True)
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 corrigir caracteres incorretos em PDFs pesquisáveis?
Se o texto parecer correto visualmente no PDF, mas apresentar caracteres corrompidos ao pesquisar ou copiar, o problema é causado pela fonte padrão usada na camada de texto pesquisável. Por padrão, SaveAsSearchablePdf usa Times New Roman, que não oferece suporte completo a todos os caracteres Unicode. Isso afeta idiomas com caracteres acentuados ou não ASCII.
Para corrigir isso, forneça um arquivo de fonte compatível com Unicode como terceiro parâmetro:
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf")
Você também pode especificar um nome de fonte personalizado como quarto parâmetro:
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", false, "Fonts/LiberationSerif-Regular.ttf", "MyFont");
result.SaveAsSearchablePdf("output.pdf", False, "Fonts/LiberationSerif-Regular.ttf", "MyFont")
Isso se aplica a todos os tipos de resultado, incluindo OcrResult, OcrPhotoResult e OcrDocAdvancedResult, portanto, a correção funciona independentemente do método de leitura que produziu o resultado.
Para cenários em que não é possível escrever em um caminho de arquivo, o IronOCR também oferece suporte ao retorno do PDF pesquisável como uma matriz de bytes ou um fluxo.
Como faço para exportar PDFs pesquisáveis como bytes ou fluxos?
A saída do PDF pesquisável também pode ser tratada como bytes ou fluxos usando os métodos SaveAsSearchablePdfBytes e SaveAsSearchablePdfStream, respectivamente. O exemplo de código abaixo mostra como usar esses métodos.
:path=/static-assets/ocr/content-code-examples/how-to/searchable-pdf-searchable-pdf-byte-stream.cs
// Return as a byte array: suited for storing in a database or sending in an HTTP response body
byte[] pdfByte = ocrResult.SaveAsSearchablePdfBytes();
// Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Stream pdfStream = ocrResult.SaveAsSearchablePdfStream();
' Return as a byte array: suited for storing in a database or sending in an HTTP response body
Dim pdfByte As Byte() = ocrResult.SaveAsSearchablePdfBytes()
' Return as a stream: suited for uploading to cloud storage or piping to another I/O operation without buffering the full file
Dim pdfStream As Stream = ocrResult.SaveAsSearchablePdfStream()
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. O exemplo abaixo demonstra 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
}
}
Imports IronOcr
Imports System.IO
Imports System.Threading.Tasks
Public Class SearchablePdfExporter
Public Async Function ProcessAndUploadPdf(inputPath As String) As Task
Dim ocr As New IronTesseract With {
.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True
}
}
' Process the input
Using input As New OcrImageInput(inputPath)
Dim result = ocr.Read(input)
' Option 1: Save to database as byte array
Dim pdfBytes As Byte() = result.SaveAsSearchablePdfBytes()
' Store pdfBytes in database BLOB field
' Option 2: Upload to cloud storage using stream
Using pdfStream As Stream = result.SaveAsSearchablePdfStream()
' Upload stream to Azure Blob Storage, AWS S3, etc.
Await UploadToCloudStorage(pdfStream, "searchable-output.pdf")
End Using
' Option 3: Return as web response
' Return File(pdfBytes, "application/pdf", "searchable.pdf")
End Using
End Function
Private Async Function UploadToCloudStorage(stream As Stream, fileName As String) As Task
' Cloud upload implementation
End Function
End Class
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");
}
}
Imports IronOcr
Imports System.Threading.Tasks
Imports System.Collections.Concurrent
Public Class BatchPdfProcessor
Private ReadOnly _ocr As IronTesseract
Public Sub New()
_ocr = New IronTesseract With {
.Configuration = New OcrConfiguration With {
.RenderSearchablePdf = True,
' Configure for optimal performance
.Language = OcrLanguage.English
}
}
End Sub
Public Async Function ProcessBatchAsync(filePaths As String()) As Task
Dim results As New ConcurrentBag(Of (source As String, output As String))()
Await Task.Run(Sub()
Parallel.ForEach(filePaths, Sub(filePath)
Using input As New OcrImageInput(filePath)
Dim result = _ocr.Read(input)
Dim outputPath As String = Path.ChangeExtension(filePath, ".searchable.pdf")
result.SaveAsSearchablePdf(outputPath)
results.Add((filePath, outputPath))
End Using
End Sub)
End Sub)
Console.WriteLine($"Processed {results.Count} files")
End Function
End Class
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
};
Imports IronOcr
Dim advancedOcr As New IronTesseract With {
.Configuration = New TesseractConfiguration With {
.RenderSearchablePdf = True,
.TesseractVariables = New Dictionary(Of String, Object) From {
{"preserve_interword_spaces", 1},
{"tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"}
},
.PageSegmentationMode = TesseractPageSegmentationMode.SingleColumn
},
.Language = OcrLanguage.EnglishBest
}
Essas opções de configuração se aplicam igualmente aos três métodos de saída: SaveAsSearchablePdf, SaveAsSearchablePdfBytes e SaveAsSearchablePdfStream. O resumo abaixo reúne o conjunto completo de métodos de PDF pesquisáveis com seus respectivos formatos de saída.
Resumo
Criar PDFs pesquisáveis com o IronOCR é simples e flexível. Quer você precise processar imagens individuais, documentos com várias páginas, fotos via ReadPhoto ou digitalizações avançadas de documentos via ReadDocumentAdvanced, a biblioteca fornece métodos robustos para gerar PDFs pesquisáveis em vários formatos. Use o parâmetro ModelType para escolher entre os modelos de aprendizado de máquina padrão e aprimorado para obter maior precisão. 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 camada de texto invisível em PDFs pesquisáveis?
O IronOCR lida automaticamente com o posicionamento do texto reconhecido como uma camada 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.
Posso criar PDFs pesquisáveis a partir de fotos ou capturas de tela?
Sim, SaveAsSearchablePdf é compatível com os resultados de ReadPhoto , ReadScreenShot e ReadDocumentAdvanced . Cada método retorna um tipo de resultado que permite a exportação para PDF pesquisável, facilitando a conversão de fotos, capturas de tela ou digitalizações complexas de documentos em PDFs pesquisáveis.
Qual a função do parâmetro ModelType?
O parâmetro ModelType controla qual modelo de aprendizado de máquina pré-treinado é usado para OCR. Normal é o padrão e processa imagens redimensionadas para 960 pixels para resultados rápidos. Enhanced suporta imagens de até 2560 pixels, preservando detalhes mais finos e melhorando a precisão para entradas de alta resolução.
Por que os caracteres copiados ou pesquisados aparecem corrompidos no meu PDF pesquisável?
Isso ocorre porque a fonte padrão (Times New Roman) usada na camada de texto pesquisável não oferece suporte completo a todos os caracteres Unicode. Para corrigir isso, passe um arquivo de fonte compatível com Unicode como terceiro parâmetro de SaveAsSearchablePdf . Se seus documentos foram originalmente compostos em Times New Roman e você notar inconsistências de espaçamento com outras fontes, experimente Liberation Serif, pois ela compartilha as mesmas métricas de glifos e preserva o layout original.

