Vai al contenuto principale
Si tratta di un’interfaccia di callback usata per segnalare ai listener gli eventi dell’oggetto FRDocument. Questa interfaccia viene implementata lato client. Per indicazioni dettagliate sull’implementazione per il tuo strumento di sviluppo, consulta Lavorare con gli oggetti collegabili. Di seguito è riportata una breve descrizione:
  • Gli utenti C++ devono implementare l’interfaccia IFRDocumentEvents, ottenere un connection point (Windows) e “connettere” all’oggetto FRDocument l’oggetto che implementa l’interfaccia. Poiché l’interfaccia deriva da IUnknown, anche l’oggetto client deve implementare i metodi di IUnknown.
  • Gli utenti Visual Basic che vogliono ricevere notifiche dall’oggetto FRDocument devono dichiararlo con WithEvents e implementare procedure simili alle seguenti:
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 oggetto che riceve notifiche tramite i metodi di questa interfaccia può eseguire le seguenti operazioni all’interno dell’implementazione dei metodi:
  • Segnalare la percentuale di caricamento dell’immagine, analisi del documento, riconoscimento, sintesi ed esportazione completata.
  • Segnalare informazioni sull’analisi del documento, il riconoscimento, la sintesi e l’esportazione completati.
  • In Windows: elaborare eventuali messaggi di sistema per contribuire a evitare che l’applicazione sembri non rispondere durante operazioni prolungate. Questo può essere utile nelle applicazioni con un’interfaccia utente.

Metodi

NomeDescrizione
OnPageProcessedComunica al client che l’elaborazione della pagina è stata completata.
OnProgressComunica al client la percentuale approssimativa di avanzamento dell’operazione corrente (caricamento dell’immagine, analisi, riconoscimento e così via).
OnWarningComunica al client suggerimenti e avvisi generati durante l’elaborazione.

Esempi

Questo esempio C++ per Windows mostra come implementare un timer che interrompe l’elaborazione se una chiamata a un metodo richiede troppo tempo.
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // Implementa i metodi di 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;
};
 
// Chiama il metodo FlushTimer per reimpostare startTime
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// Questo callback può essere usato in altri metodi, 
// quindi imposta shouldTrackTime su FALSE se non vuoi più usare il timeout
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// Se la differenza tra l'ora corrente e "startTime" supera una certa soglia, 
// il processo verrà interrotto
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;
}
Questo oggetto viene usato negli esempi di codice seguenti: EventsHandling (Windows e Linux).

Osservazioni

Su Linux, questa interfaccia non funziona se l’oggetto Engine viene caricato come server out-of-process.

Vedi anche

FRDocument Lavorare con gli oggetti collegabili