Per Linux, consultare la Guida per sviluppatori della distribuzione Linux per l’elenco completo. Una limitazione rilevante è che gli oggetti che implementano IEngineLoader non sono disponibili su Linux o macOS (vedere Differenze tra ABBYY FineReader Engine 12 per Windows e Linux).
Aggiunta della libreria FineReader Engine a un progetto Java
ABBYY FineReader Engine include il file com.abbyy.FREngine-%BUILD_ID%.jar, che contiene la libreria di classi Java per FineReader Engine. È possibile trovarlo nella cartella Inc/Java. Il percorso di questo file può essere specificato nel parametro classpath nella riga di comando e nelle impostazioni del progetto nei vari ambienti di sviluppo Java. Esempio:
È possibile utilizzare la classe statica Engine per caricare l’oggetto Engine.La classe Engine fornisce metodi corrispondenti alle funzioni di ABBYY FineReader Engine per il caricamento e lo scaricamento dell’Engine:
Il file com.abbyy.FREngine-%BUILD_ID%.jar è un archivio auto-estraente che viene decompresso sul computer al primo utilizzo dell’API Java di FineReader Engine. La cartella predefinita in cui vengono estratti i contenuti è Inc/Java. Se è necessario utilizzare una cartella diversa, chiamare il metodo Engine.SetJNIDllFolder prima di caricare l’Engine con uno dei metodi descritti sopra. Per verificare quale cartella è attualmente impostata per l’estrazione dell’archivio, chiamare Engine.GetJNIDllFolder.
ABBYY FineReader Engine può generare eccezioni dei seguenti tipi:
java.lang.OutOfMemoryError
com.abbyy.FREngine.EngineException
L’eccezione com.abbyy.FREngine.EngineException eredita da java.lang.Exception e contiene un metodo aggiuntivo int getHResult, che restituisce il codice HRESULT dell’errore verificatosi. Per un’eccezione di questo tipo, è possibile non solo recuperare il messaggio di errore tramite il metodo getMessage(), ma anche ottenere il codice di errore.
Nell’API di ABBYY FineReader Engine esistono diversi metodi con parametri out che ricevono un nuovo valore dopo la chiamata al metodo e devono essere passati per riferimento. Questi parametri sono contrassegnati nella type library e nelle descrizioni dei metodi in questa Guida per sviluppatori come [out] o [in, out].Quando si lavora con ABBYY FineReader Engine in Java, è necessario utilizzare una classe Ref apposita per passare un parametro per riferimento. Vedere gli esempi di seguito.Esempio in cui i parametri out vengono passati per riferimento al metodo IFRPage::FindPageSplitPosition:
Codice di esempio per i parametri out
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();
FineReader Engine supporta l’utilizzo dell’interfaccia AutoCloseable, che consente di usare l’istruzione try per accedere alle risorse allocate per gli oggetti. Ciò significa che, una volta raggiunta la fine del blocco try, tutte le risorse allocate verranno chiuse automaticamente, senza dover chiamare esplicitamente i metodi di chiusura. Si consiglia di utilizzare l’istruzione try per tutti gli oggetti nel codice (vedere l’esempio di seguito):
Codice di esempio
try( IFRDocument document = engine.CreateDocument() ) { // Aggiunge un'immagine a un documento document.AddImageFile( imagePath, null, null ); ... // Salva i risultati in PDF document.Export( pdfExportPath, FileExportFormatEnum.FEF_PDF, pdfParams ); }
I metodi e le proprietà che accettano una combinazione di costanti di enumerazione richiedono che il valore int venga passato al metodo o alla proprietà. Per ottenere il valore int di una costante di enumerazione, utilizzare il metodo getValue, supportato da tutte le enumerazioni.Di seguito è riportato un esempio di codice che mostra come impostare la proprietà BwPictureFormats dell’oggetto PDFPictureCompressionParams:
IPDFExportParams pep = engine.CreatePDFExportParams();IPDFPictureCompressionParams ppcp = pep.getPictureCompressionParams();ppcp.setBwPictureFormats(BwPictureFormatsEnum.BWPF_Auto.getValue());
Esiste una versione separata del wrapper Java che supporta la chiamata remota di metodi (RMI). Tutte le classi ereditano da UnicastRemoteObject e supportano l’interfaccia Remote; tutti i metodi possono generare RemoteException. Per impostazione predefinita, il wrapper compatibile con RMI reindirizza le chiamate di elaborazione PDF a un thread separato con PDFium inizializzato.
Il wrapper compatibile con RMI richiede il Java Development Kit. Consultare l’elenco dei Java Development Kit supportati in Requisiti di sistema.
Il pacchetto com.abbyy.rmi.FREngine contiene le interfacce remote utilizzate dall’applicazione client; il pacchetto com.abbyy.rmi.server.FREngine viene utilizzato lato server. A causa delle limitazioni dell’overloading dei metodi, sarà necessario utilizzare anche la libreria dinamica libFREngine.rmi_server.so al posto di libFREngine.so.Questi pacchetti sono sufficienti per una semplice applicazione client-server. Tuttavia, FineReader Engine non è thread-safe di per sé e richiede pertanto un impegno aggiuntivo da parte del programmatore per garantire che ogni istanza di Engine sia accessibile da un solo thread di lavoro alla volta. Consultare gli esempi di codice forniti con il pacchetto di distribuzione per un’implementazione riutilizzabile completa del pool lato server di Engine e di un client multi-thread che vi si connette (esempi rmiPoolServer e threadPoolClient, pacchetti com.abbyy.rmi.pool.FREngine e com.abbyy.rmi.pool.impl.FREngine).