Skip to main content
Este tema se aplica a FRE for Windows.

Agregar la biblioteca de FineReader Engine a un proyecto Java

ABBYY FineReader Engine incluye un archivo com.abbyy.FREngine-%BUILD_ID%.jar, que contiene la biblioteca de clases de Java para FineReader Engine. Puede encontrarlo en la carpeta IncJava. La ruta de acceso a este archivo se puede especificar en el parámetro classpath de la línea de comandos y en la configuración del proyecto en distintos entornos de desarrollo de Java. Ejemplo:
%JDK% es la ruta de acceso al Java Development Kit.
Consulte la lista de Java Development Kits compatibles en Requisitos del sistema.

Carga y descarga de FineReader Engine

Puede usar la clase estática Engine para cargar el objeto Engine. La clase Engine proporciona métodos que corresponden a las funciones de ABBYY FineReader Engine para cargar y descargar el Engine:
Para cargar Engine mediante COM, use sus métodos GetEngineInprocLoader o GetEngineOutprocLoader. Consulte la descripción de la interfaz IEngineLoader para obtener más información. Si usa el método GetEngineOutprocLoader para la carga, no necesita llamar al método IHostProcessControl::SetClientProcessId, ya que el proceso padre se establecerá automáticamente.
Si desarrolla su aplicación en Windows pero tiene previsto ejecutarla en Linux, no use estos métodos para cargar Engine. Use solo el método InitializeEngine descrito anteriormente. Esta limitación se debe a que los objetos que implementan IEngineLoader no están disponibles en Linux.
Para trabajar con el objeto Engine creado mediante un cargador de Engine, la clase Engine proporciona métodos que llaman a las funciones COM correspondientes para serializar el puntero de interfaz entre hilos:
El archivo com.abbyy.FREngine-%BUILD_ID%.jar es un archivo autoextraíble que se descomprime en su equipo la primera vez que usa la API de Java de FineReader Engine. La carpeta predeterminada donde se extrae el contenido es Inc\Java para Windows. Si necesita usar otra carpeta, llame al método Engine.SetJNIDllFolder antes de cargar el componente Engine mediante cualquiera de los métodos descritos anteriormente. Para saber qué carpeta está configurada actualmente para extraer el archivo, llame a Engine.GetJNIDllFolder.

Uso de Engine en aplicaciones Java multihilo

Para las aplicaciones Java multihilo, puede usar la clase EnginesPool, que proporciona una solución completa para crear y administrar un pool de objetos de FineReader Engine. Esta clase implementa la interfaz java.lang.Runnable.
A continuación se enumeran los métodos de la clase EnginesPool. Consulte el sample de código de EnginesPool para ver un ejemplo de uso de la clase EnginesPool.

Manejo de errores

ABBYY FineReader Engine puede lanzar excepciones de los siguientes tipos:
  • java.lang.OutOfMemoryError
  • com.abbyy.FREngine.EngineException
La excepción com.abbyy.FREngine.EngineException hereda de java.lang.Exception y contiene un método adicional, int getHResult, que devuelve el código HRESULT del error producido. Para una excepción de este tipo, no solo puede obtener el mensaje de error mediante el método getMessage(), sino también el código de error.

Llamada a métodos con parámetros de salida

Hay varios métodos en la API de ABBYY FineReader Engine que tienen parámetros de salida que reciben un nuevo valor después de la llamada al método y deben pasarse por referencia. Estos parámetros están marcados en la biblioteca de tipos y en las descripciones de los métodos de esta ayuda para desarrolladores como [out] o [in, out]. Al trabajar con ABBYY FineReader Engine en Java, debe usar una clase Ref especial para pasar un parámetro por referencia. Consulte los ejemplos a continuación. Ejemplo en el que los parámetros de salida se pasan por referencia al método IFRPage::FindPageSplitPosition:
Ejemplo en el que los parámetros de entrada/salida se pasan por referencia al método ICoordinatesConverter::ConvertCoordinates:
El siguiente ejemplo muestra los parámetros de salida de tipo array pasados por referencia al método IPlainText::GetCharacterData:

Recolección de basura

FineReader Engine es compatible con la interfaz AutoCloseable, que le permite usar la instrucción try para gestionar los recursos asignados a los objetos. Esto significa que, una vez que el bloque try llega a su fin, todos los recursos asignados se cerrarán automáticamente, sin necesidad de llamar explícitamente a métodos de cierre. Le recomendamos que use la instrucción try para todos los objetos de su código (consulte el ejemplo siguiente):
Uso de HGLOBAL Algunos de los métodos de la API de ABBYY FineReader Engine reciben como parámetro de entrada un handle HGLOBAL a un bloque de memoria (pasado como __int64). Como HGLOBAL es una entidad específica de Windows, en el wrapper de Java estos métodos reciben, en su lugar, el contenido del bloque de memoria como byte[]. Consulte la lista de estos métodos: Por otro lado, los métodos que devuelven un objeto Handle también lo devuelven en el wrapper de Java.

Trabajar con enumeraciones

Los métodos y las propiedades que aceptan una combinación de constantes de enumeración requieren que se pase al método o a la propiedad el valor int. Para obtener el valor int de una constante de enumeración, use el método getValue, compatible con todas las enumeraciones. A continuación se muestra un código de ejemplo de cómo establecer la propiedad BwPictureFormats del objeto PDFPictureCompressionParams:
Consulte también Diferentes formas de cargar el objeto Engine para Windows Desarrollo multiplataforma en Java para Windows