ABBYY FineReader Engine에는 FineReader Engine용 Java 클래스 라이브러리가 포함된 com.abbyy.FREngine-%BUILD_ID%.jar 파일이 들어 있습니다. 이 파일은 Inc/Java 폴더에서 찾을 수 있습니다. 이 파일의 경로는 명령줄의 classpath 매개변수와 다양한 Java 개발 환경의 프로젝트 설정에서 지정할 수 있습니다. 예:
static public void DeinitializeEngine() throws Exception;
샘플 코드
import com.abbyy.FREngine.*;public class Hello { public static void main( String[] args ) { try { // 온라인 라이선스로 엔진 로드 engine = Engine.InitializeEngine( path, customerProjectId, LicensePath, LicensePassword, "", "", false ); try { // 미리 정의된 프로필 로드 engine.LoadPredefinedProfile( "DocumentConversion_Accuracy" ); // 이미지 처리 IFRDocument document = engine.CreateFRDocument(); ... } finally { engine = null; System.runFinalization(); Engine.DeinitializeEngine(); } } catch( Exception ex ) { trace( ex.getMessage() ); } } private IEngine engine = null;...}
com.abbyy.FREngine-%BUILD_ID%.jar 파일은 FineReader Engine Java API를 처음 사용할 때 사용자 컴퓨터에서 자동으로 압축이 해제되는 자체 압축 해제 아카이브입니다. 콘텐츠가 압축 해제되는 기본 폴더는 Inc/Java입니다. 다른 폴더를 사용해야 하는 경우에는 위에서 설명한 방법 중 하나로 엔진을 로드하기 전에 Engine.SetJNIDllFolder 메서드를 호출하십시오. 현재 아카이브 압축 해제 폴더로 설정된 위치를 확인하려면 Engine.GetJNIDllFolder를 호출하십시오.
com.abbyy.FREngine.EngineException 예외는 java.lang.Exception을 상속하며, int getHResult라는 추가 메서드를 하나 포함합니다. 이 메서드는 발생한 오류의 HRESULT 코드를 반환합니다. 이 유형의 예외에서는 getMessage() 메서드를 사용해 오류 메시지를 가져올 수 있을 뿐만 아니라 오류 코드도 확인할 수 있습니다.
ABBYY FineReader Engine API에는 메서드 호출 후 새 값을 받아 참조로 전달해야 하는 out 매개변수가 있는 메서드가 여러 개 있습니다. 이러한 매개변수는 타입 라이브러리와 이 개발자 도움말의 메서드 설명에서 [out] 또는 [in, out]로 표시됩니다.Java에서 ABBYY FineReader Engine을 사용할 때는 매개변수를 참조로 전달하기 위해 특수 Ref 클래스를 사용해야 합니다. 아래 예제를 참조하세요.out 매개변수를 IFRPage::FindPageSplitPosition 메서드에 참조로 전달하는 예:
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는 AutoCloseable 인터페이스를 지원하므로 try 문을 사용해 객체에 할당된 리소스를 다룰 수 있습니다. 즉, try 블록이 끝나면 종료 메서드를 명시적으로 호출하지 않아도 할당된 모든 리소스가 자동으로 닫힙니다. 코드의 모든 객체에 try 문을 사용하는 것이 좋습니다(아래 예 참조).
샘플 코드
try( IFRDocument document = engine.CreateDocument() ) { // 문서에 이미지 추가 document.AddImageFile( imagePath, null, null ); ... // 결과를 PDF로 저장 document.Export( pdfExportPath, FileExportFormatEnum.FEF_PDF, pdfParams ); }
열거형 상수의 조합을 허용하는 메서드와 속성의 경우, int 값을 메서드/속성에 전달해야 합니다. 열거형 상수의 int 값을 얻으려면 모든 열거형에서 지원하는 getValue 메서드를 사용합니다.다음은 PDFPictureCompressionParams 객체의 BwPictureFormats 속성을 설정하는 방법을 보여 주는 샘플 코드입니다:
IPDFExportParams pep = engine.CreatePDFExportParams();IPDFPictureCompressionParams ppcp = pep.getPictureCompressionParams();ppcp.setBwPictureFormats(BwPictureFormatsEnum.BWPF_Auto.getValue());
원격 메서드 호출(RMI)을 지원하는 별도의 Java 래퍼 버전이 있습니다. 모든 클래스는 UnicastRemoteObject를 상속하고 Remote 인터페이스를 지원하며, 모든 메서드는 RemoteException을 발생시킬 수 있습니다. RMI 지원 래퍼는 기본적으로 PDF 처리 호출을 PDFium이 초기화된 별도의 스레드로 리디렉션합니다.
RMI 지원 래퍼를 사용하려면 Java Development Kit가 필요합니다. 지원되는 Java Development Kit 목록은 시스템 요구 사항을 참조하세요.
com.abbyy.rmi.FREngine 패키지에는 클라이언트 애플리케이션에서 사용하는 원격 인터페이스가 포함되어 있으며, com.abbyy.rmi.server.FREngine 패키지는 서버 측에서 사용됩니다. 메서드 오버로딩의 제한 때문에 libFREngine.so 대신 다른 동적 라이브러리인 libFREngine.rmi_server.so도 사용해야 합니다.이 패키지들만으로도 간단한 클라이언트-서버 애플리케이션을 구현하기에 충분합니다. 하지만 FineReader Engine 자체는 스레드 안전하지 않으므로, 하나의 엔진 인스턴스에는 한 번에 하나의 작업자 스레드만 접근하도록 보장하기 위해 프로그래머가 추가로 신경 써야 합니다. 서버 측 엔진 풀과 여기에 연결되는 멀티스레드 클라이언트의 완전한 재사용 가능 구현은 배포 패키지에 포함된 코드 샘플(rmiPoolServer 및 threadPoolClient 샘플, com.abbyy.rmi.pool.FREngine 및 com.abbyy.rmi.pool.impl.FREngine 패키지)을 참조하세요.