Saltar al contenido principal
Esta es una interfaz de devolución de llamada que se utiliza para notificar eventos del objeto FRDocument a los receptores. Esta interfaz se implementa del lado del cliente. Consulte las recomendaciones detalladas de implementación para su herramienta de desarrollo en Trabajar con objetos conectables. A continuación se ofrece una breve descripción:
  • Los usuarios de C++ deberán implementar la interfaz IFRDocumentEvents, obtener un punto de conexión (Windows) y suscribir mediante “advise” el objeto que implementa la interfaz al objeto FRDocument. Como la interfaz se deriva de la interfaz IUnknown, el objeto cliente también debe implementar los métodos de IUnknown.
  • Los usuarios de Visual Basic que quieran recibir notificaciones del objeto FRDocument deben declararlo con WithEvents e implementar procedimientos similares a los siguientes:
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
Un objeto que recibe notificaciones a través de los métodos de esta interfaz puede hacer lo siguiente dentro de la implementación de los métodos:
  • Informar del porcentaje completado de carga de imágenes, análisis de documentos, reconocimiento, síntesis y exportación.
  • Informar sobre el análisis de documentos, el reconocimiento, la síntesis y la exportación completados.
  • En Windows: Procesar los mensajes del sistema para ayudar a evitar que la aplicación parezca no responder durante operaciones prolongadas. Esto puede resultar útil en aplicaciones con interfaz de usuario.

Métodos

NombreDescripción
OnPageProcessedProporciona al cliente información sobre la finalización del procesamiento de la página.
OnProgressProporciona al cliente información sobre el porcentaje aproximado de la operación actual (carga de imágenes, análisis, reconocimiento, etc.).
OnWarningProporciona al cliente sugerencias y advertencias que se generan durante el procesamiento.

Ejemplos

Este ejemplo de C++ para Windows muestra cómo implementar un temporizador que interrumpa el procesamiento si una llamada a un método tarda demasiado.
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // Implementa los métodos de IUnknown
    ULONG STDMETHODCALLTYPE AddRef() { return 1; }
    ULONG STDMETHODCALLTYPE Release() { return 1; }
    HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid, void** ppObject );
    HRESULT STDMETHODCALLTYPE OnProgress( IFRDocument* document, int percentage, VARIANT_BOOL* ShouldContinue );
    HRESULT STDMETHODCALLTYPE OnWarning( IFRDocument* document, int pageNumber, BSTR recognizerTip, 
        VARIANT_BOOL* ShouldContinue );
    HRESULT STDMETHODCALLTYPE OnPageProcessed( IFRDocument* document, int pageNumber, PageProcessingStageEnum stage );
    void FlushTimer();
    void SetShouldTrackTime( bool _shouldTrackTime );
private:
    time_t startTime;
    bool shouldTrackTime = true;
};
 
// Llame al método FlushTimer para restablecer startTime
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// Este callback puede usarse en otros métodos, 
// así que establezca shouldTrackTime en FALSE si ya no desea usar el tiempo de espera
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// Si la diferencia entre la hora actual y "startTime" supera un determinado umbral, 
// el proceso se interrumpirá
HRESULT STDMETHODCALLTYPE CFRDocumentCallback::OnProgress( IFRDocument* frDocument, 
    int percentage, VARIANT_BOOL* shouldTerminate )
{
    if( shouldTrackTime ) {
        time_t currentTime;
        time( ¤tTime );
        double seconds = difftime( currentTime, startTime );
        printf( "%f\n", seconds );
        *shouldTerminate = ( seconds > 100 ? VARIANT_TRUE : VARIANT_FALSE );
    }
    return S_OK;
}
Este objeto se utiliza en los siguientes ejemplos de código: EventsHandling (Windows y Linux).

Observaciones

En Linux, esta interfaz no funciona si el objeto Engine se carga como un servidor fuera de proceso.

Consulte también

FRDocument Trabajar con objetos conectables