No Linux, consulte a Ajuda do Desenvolvedor da distribuição Linux para ver a lista completa. Uma limitação importante é que os objetos que implementam IEngineLoader não estão disponíveis no Linux nem no macOS (consulte Diferenças entre ABBYY FineReader Engine 12 para Windows e Linux).
Adicionando a biblioteca FineReader Engine a um projeto Java
O ABBYY FineReader Engine inclui um arquivo com.abbyy.FREngine-%BUILD_ID%.jar, que contém a biblioteca de classes Java do FineReader Engine. Você pode encontrá-lo na pasta Inc/Java. O caminho para esse arquivo pode ser especificado no parâmetro classpath da linha de comando e nas configurações do projeto em diferentes ambientes de desenvolvimento Java. Exemplo:
Você pode usar a classe estática Engine para carregar o objeto Engine.A classe Engine fornece métodos que correspondem às funções do ABBYY FineReader Engine para carregar e descarregar o Engine:
O arquivo com.abbyy.FREngine-%BUILD_ID%.jar é um arquivo autoextraível que é extraído na sua máquina na primeira vez em que você usa a API Java do FineReader Engine. A pasta padrão em que o conteúdo é extraído é Inc/Java . Se você precisar usar outra pasta, chame o método Engine.SetJNIDllFolder antes de carregar o Engine usando qualquer um dos métodos descritos acima. Para descobrir qual pasta está definida no momento para extrair o arquivo, chame o Engine.GetJNIDllFolder .
O ABBYY FineReader Engine pode lançar exceções dos seguintes tipos:
java.lang.OutOfMemoryError
com.abbyy.FREngine.EngineException
A exceção com.abbyy.FREngine.EngineException herda de java.lang.Exception e contém um método adicional, int getHResult, que retorna o código HRESULT do erro ocorrido. Para uma exceção desse tipo, você pode não apenas recuperar a mensagem de erro usando o método getMessage(), mas também obter o código do erro.
A API do ABBYY FineReader Engine inclui vários métodos com parâmetros de saída, que recebem um novo valor após a chamada do método e devem ser passados por referência. Esses parâmetros são marcados na biblioteca de tipos e nas descrições dos métodos nesta Ajuda do Desenvolvedor como [out] ou [in, out].Ao trabalhar com o ABBYY FineReader Engine em Java, você precisa usar a classe especial Ref para passar um parâmetro por referência. Veja os exemplos abaixo.Exemplo em que os parâmetros de saída são passados por referência para o método IFRPage::FindPageSplitPosition:
Código de exemplo para parâmetros de saída
Ref<PageSplitDirectionEnum> _ps = new Ref<PageSplitDirectionEnum>();Ref<Integer> _start = new Ref<Integer>();Ref<Integer> _end = new Ref<Integer>();page.FindPageSplitPosition( null, null, _ps, _start, _end );PageSplitDirectionEnum ps = _ps.get();Integer start = _start.get();Integer end = _end.get();
O FineReader Engine oferece suporte ao uso da interface AutoCloseable, o que permite usar a instrução try para gerenciar os recursos alocados aos objetos. Isso significa que, quando o bloco try chega ao fim, todos os recursos alocados são fechados automaticamente, sem a necessidade de chamar explicitamente os métodos de fechamento. Recomendamos que você use a instrução try para todos os objetos no seu código (veja o exemplo abaixo):
Código de exemplo
try( IFRDocument document = engine.CreateDocument() ) { // Adicionar imagem a um documento document.AddImageFile( imagePath, null, null ); ... // Salvar resultados em PDF document.Export( pdfExportPath, FileExportFormatEnum.FEF_PDF, pdfParams ); }
Métodos e Properties que aceitam uma combinação de constantes de enumeração exigem que o valor int seja passado ao método/à propriedade. Para obter o valor int de uma constante de enumeração, use o método getValue, compatível com todas as enumerações.Veja abaixo um exemplo de código que mostra como definir a propriedade BwPictureFormats do objeto PDFPictureCompressionParams:
IPDFExportParams pep = engine.CreatePDFExportParams();IPDFPictureCompressionParams ppcp = pep.getPictureCompressionParams();ppcp.setBwPictureFormats(BwPictureFormatsEnum.BWPF_Auto.getValue());
Há uma versão separada do wrapper Java com suporte à invocação remota de métodos (RMI). Todas as classes herdam de UnicastRemoteObject e oferecem suporte à interface Remote; todos os métodos podem lançar RemoteException. Por padrão, o wrapper com suporte a RMI redireciona as chamadas de processamento de PDF para uma thread separada com o PDFium inicializado.
O wrapper com suporte a RMI requer o Java Development Kit. Consulte a lista de Java Development Kits compatíveis em Requisitos do sistema.
O pacote com.abbyy.rmi.FREngine contém as interfaces remotas usadas pelo aplicativo cliente; o pacote com.abbyy.rmi.server.FREngine é usado no lado do servidor. Devido às limitações da sobrecarga de métodos, você também precisará usar outra biblioteca dinâmica, libFREngine.rmi_server.so, em vez de libFREngine.so.Esses pacotes são suficientes para uma aplicação cliente-servidor simples. No entanto, o FineReader Engine não é thread-safe por si só e, portanto, exige um esforço adicional por parte do programador para garantir que cada instância de Engine seja acessada por apenas uma thread de trabalho por vez. Consulte os exemplos de código fornecidos com o pacote de distribuição para ver uma implementação reutilizável completa do pool de Engines no lado do servidor e de um cliente multithread que se conecta a ele (exemplos rmiPoolServer e threadPoolClient, pacotes com.abbyy.rmi.pool.FREngine e com.abbyy.rmi.pool.impl.FREngine).