Pular para o conteúdo principal
Este tópico se aplica ao FRE para Windows.
Para executar sua aplicação .NET Core em diferentes sistemas operacionais e containers, o ABBYY FineReader Engine fornece um wrapper .NET Core pronto para uso para a biblioteca do Engine. Esse wrapper permite que você acesse diretamente a API do ABBYY FineReader Engine, que é a mesma para todas as plataformas, com algumas exceções pontuais. Uma limitação importante é que os objetos que implementam IEngineLoader não estão disponíveis no Linux (consulte Differences between ABBYY FineReader Engine 12 for Windows and for Linux para a lista completa de diferenças).
Nesta versão, o wrapper .NET Core não oferece suporte ao trabalho com os objetos InprocLoader e OutprocLoader.
Para usar sua aplicação em containers, inclua-a junto com o .NET Core Runtime na imagem do container. Consulte os detalhes sobre como implantar o ABBYY FineReader Engine em um Docker container em Running ABBYY FineReader Engine 12 inside a Docker container.

Adicionando a biblioteca ABBYY FineReader Engine a um projeto .NET Core

O ABBYY FineReader Engine inclui o arquivo FREngine.DotNet.Interop.dll, que contém o wrapper do .NET Core para o FineReader Engine. Você pode encontrar esse arquivo na pasta Bin ou Bin64 do diretório de instalação. Adicione o FREngine.DotNet.Interop.dll às dependências do seu projeto e redistribua-o com seu aplicativo baseado no ABBYY FineReader Engine.
A única versão compatível do .NET Core é a 6.

Carregando e descarregando o ABBYY FineReader Engine

Para inicializar o objeto Engine, defina o caminho para FREngine.dll com o método SetFREnginePath da classe estática FREngine e, em seguida, use a função InitializeEngine da mesma classe. Para descarregar o objeto Engine, use a função DeinitializeEngine.
// Especifique o caminho para a ABBYY FineReader Engine Library (freRootPath)
// antes da inicialização
FREngine.FREngine.SetFREnginePath ( freRootPath );
// Carregando o objeto Engine
engine = FREngine.FREngine.InitializeEngine( customerProjectId, licensePath, licensePassword, "", "", false );    
...
// Descarregando o objeto Engine
if ( engine == null )
{
   // O Engine não foi carregado
   return;
}
 
engine = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
 
FREngine.FREngine.DeinitializeEngine();

Coleta de lixo

Todos os objetos no wrapper do .NET Core derivam da interface IDisposable, responsável por liberar os recursos alocados para os objetos. A implementação dessa interface garante a coleta automática de lixo quando um objeto não é mais necessário. É necessário usar a instrução using ao concluir o trabalho com os objetos, especialmente com objetos pesados relacionados ao processamento de documentos, síntese ou exportação, como IFRDocument, IFRPages, PDFExportParams etc. (veja o exemplo abaixo):
using (FREngine.FRDocument document = engineLoader.Engine.CreateFRDocument()) 
{
   try 
   {
     // Adicionar arquivo de imagem a um documento
     Console.WriteLine("Loading image...");
     document.AddImageFile(imagePath, null, null);
     ...
     // Salvar resultados em PDF usando o cenário 'balanced'
     using (FREngine.PDFExportParams pdfParams = engineLoader.Engine.CreatePDFExportParams()) 
     {
       pdfParams.Scenario = FREngine.PDFExportScenarioEnum.PES_Balanced;
       document.Export(Path.Combine(FreConfig.GetSamplesFolder(), @"SampleImages\Demo.pdf"),
       FREngine.FileExportFormatEnum.FEF_PDF, pdfParams);
     }
   }
}
Caso prefira não usar a instrução using, chame explicitamente o método Dispose. Exemplos Veja o exemplo de código Hello, que ilustra o funcionamento do ABBYY FineReader Engine no .NET Core.