Unter Linux finden Sie die vollständige Liste in der Developer’s Help der Linux-Distribution. Eine wichtige Einschränkung besteht darin, dass Objekte, die IEngineLoader implementieren, unter Linux und macOS nicht verfügbar sind (siehe Unterschiede zwischen ABBYY FineReader Engine 12 für Windows und Linux).
Einbinden der FineReader Engine-Bibliothek in ein Java-Projekt
ABBYY FineReader Engine umfasst die Datei com.abbyy.FREngine-%BUILD_ID%.jar, die die Java-Klassenbibliothek für FineReader Engine enthält. Sie finden sie im Ordner Inc/Java. Der Pfad zu dieser Datei kann über den Parameter classpath in der Befehlszeile sowie in den Projekteinstellungen verschiedener Java-Entwicklungsumgebungen angegeben werden. Beispiel:
Sie können die statische Engine-Klasse verwenden, um das Engine-Objekt zu laden.Die Engine-Klasse stellt Methoden bereit, die den ABBYY FineReader Engine-Funktionen zum Laden und Entladen der Engine entsprechen:
Die Datei com.abbyy.FREngine-%BUILD_ID%.jar ist ein selbstentpackendes Archiv, das bei der ersten Verwendung der FineReader Engine Java API auf Ihrem Computer entpackt wird. Standardmäßig wird der Inhalt in den Ordner Inc/Java entpackt. Wenn Sie einen anderen Ordner verwenden möchten, rufen Sie vor dem Laden der Engine mit einer der oben beschriebenen Methoden die Methode Engine.SetJNIDllFolder auf. Um festzustellen, welcher Ordner derzeit zum Entpacken des Archivs festgelegt ist, rufen Sie Engine.GetJNIDllFolder auf.
ABBYY FineReader Engine kann Ausnahmen der folgenden Typen auslösen:
java.lang.OutOfMemoryError
com.abbyy.FREngine.EngineException
Die Ausnahme com.abbyy.FREngine.EngineException erbt von java.lang.Exception und enthält eine zusätzliche Methode int getHResult, die den HRESULT-Fehlercode des aufgetretenen Fehlers zurückgibt. Bei einer Ausnahme dieses Typs können Sie nicht nur die Fehlermeldung mit der Methode getMessage() abrufen, sondern auch den Fehlercode.
In der ABBYY FineReader Engine API gibt es mehrere Methoden mit Out-Parametern, die nach dem Methodenaufruf einen neuen Wert erhalten und per Referenz übergeben werden müssen. Diese Parameter sind in der Typbibliothek und in den Methodenbeschreibungen dieser Developer’s Help als [out] oder [in, out] gekennzeichnet.Wenn Sie mit ABBYY FineReader Engine in Java arbeiten, müssen Sie eine spezielle Ref-Klasse verwenden, um einen Parameter per Referenz zu übergeben. Siehe die folgenden Beispiele.Beispiel, in dem die Out-Parameter per Referenz an die Methode IFRPage::FindPageSplitPosition übergeben werden:
Beispielcode für Out-Parameter
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 unterstützt die AutoCloseable-Schnittstelle, sodass Sie mit der try-Anweisung auf die von Objekten belegten Ressourcen zugreifen können. Das bedeutet, dass beim Verlassen des try-Blocks alle belegten Ressourcen automatisch geschlossen werden, ohne dass Schließmethoden explizit aufgerufen werden müssen. Wir empfehlen, die try-Anweisung für alle Objekte in Ihrem Code zu verwenden (siehe Beispiel unten):
Beispielcode
try( IFRDocument document = engine.CreateDocument() ) { // Bild zu einem Dokument hinzufügen document.AddImageFile( imagePath, null, null ); ... // Ergebnisse als PDF speichern document.Export( pdfExportPath, FileExportFormatEnum.FEF_PDF, pdfParams ); }
Methoden und Eigenschaften, die eine Kombination von Aufzählungskonstanten akzeptieren, erfordern, dass der int-Wert an die jeweilige Methode bzw. Eigenschaft übergeben wird. Um den int-Wert einer Aufzählungskonstante zu erhalten, verwenden Sie die Methode getValue, die von allen Aufzählungen unterstützt wird.Im folgenden Codebeispiel wird gezeigt, wie die Eigenschaft BwPictureFormats des Objekts PDFPictureCompressionParams festgelegt wird:
IPDFExportParams pep = engine.CreatePDFExportParams();IPDFPictureCompressionParams ppcp = pep.getPictureCompressionParams();ppcp.setBwPictureFormats(BwPictureFormatsEnum.BWPF_Auto.getValue());
Es gibt eine separate Version des Java-Wrappers, die Remote Method Invocation (RMI) unterstützt. Alle Klassen erben von UnicastRemoteObject und unterstützen die Remote-Schnittstelle; alle Methoden können eine RemoteException auslösen. Standardmäßig leitet der RMI-fähige Wrapper Aufrufe zur PDF-Verarbeitung an einen separaten Thread mit initialisiertem PDFium weiter.
Der RMI-fähige Wrapper erfordert das Java Development Kit. Eine Liste der unterstützten Java Development Kits finden Sie unter System Requirements.
Das Paket com.abbyy.rmi.FREngine enthält die von der Client-Anwendung verwendeten Remote-Schnittstellen; das Paket com.abbyy.rmi.server.FREngine wird auf der Serverseite verwendet. Aufgrund der Einschränkungen bei der Methodenüberladung müssen Sie außerdem anstelle von libFREngine.so eine andere dynamische Bibliothek verwenden: libFREngine.rmi_server.so.Diese Pakete reichen für eine einfache Client-Server-Anwendung aus. FineReader Engine ist jedoch selbst nicht thread-sicher und erfordert daher zusätzlichen Aufwand seitens des Programmierers, um sicherzustellen, dass jeweils nur ein Worker-Thread auf eine Engine-Instanz zugreift. Eine vollständige wiederverwendbare Implementierung des serverseitigen Pools von Engines sowie eines Multithread-Clients, der sich damit verbindet, finden Sie in den im Distribution Package enthaltenen Codebeispielen (rmiPoolServer- und threadPoolClient-Beispiele, Pakete com.abbyy.rmi.pool.FREngine und com.abbyy.rmi.pool.impl.FREngine).