Zum Hauptinhalt springen
Dies ist eine Callback-Schnittstelle, die dazu dient, Ereignisse vom Objekt FRDocument an Listener zu übermitteln. Diese Schnittstelle wird clientseitig implementiert. Detaillierte Implementierungshinweise für Ihr Entwicklungstool finden Sie unter Arbeiten mit verknüpfbaren Objekten. Nachfolgend finden Sie eine kurze Beschreibung:
  • C++-Benutzer müssen die IFRDocumentEvents-Schnittstelle implementieren, einen Connection Point (Windows) abrufen und das Objekt, das die Schnittstelle implementiert, beim FRDocument-Objekt “registrieren”. Da die Schnittstelle von der IUnknown-Schnittstelle abgeleitet ist, sollte das Client-Objekt auch die IUnknown-Methoden implementieren.
  • Visual-Basic-Benutzer, die Benachrichtigungen vom FRDocument-Objekt erhalten möchten, sollten es als WithEvents deklarieren und Prozeduren ähnlich den folgenden implementieren:
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
Ein Objekt, das über die Methoden dieser Schnittstelle Benachrichtigungen erhält, kann innerhalb der Implementierung dieser Methoden Folgendes tun:
  • Den Fortschritt des Bildladens, der Dokumentanalyse, der Erkennung, der Synthese und des Exports in Prozent melden.
  • Informationen über die abgeschlossene Dokumentanalyse, Erkennung, Synthese und den abgeschlossenen Export melden.
  • Unter Windows: Systemmeldungen verarbeiten, um zu verhindern, dass die Anwendung bei lang andauernden Vorgängen den Eindruck erweckt, nicht mehr zu reagieren. Dies kann bei Anwendungen mit Benutzeroberfläche hilfreich sein.

Methoden

NameBeschreibung
OnPageProcessedÜbermittelt dem Client Informationen darüber, dass die Verarbeitung der Seite abgeschlossen ist.
OnProgressÜbermittelt dem Client Informationen über den ungefähren Fortschritt des aktuellen Vorgangs (Laden von Bildern, Analyse, Erkennung usw.).
OnWarningÜbermittelt dem Client Hinweise und Warnungen, die während der Verarbeitung aufgetreten sind.

Beispiele

Dieses Windows-C++-Beispiel zeigt, wie Sie einen Timer implementieren, der die Verarbeitung abbricht, wenn ein Methodenaufruf zu lange dauert.
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // Implementieren Sie die IUnknown-Methoden
    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;
};
 
// Rufen Sie die Methode FlushTimer auf, um startTime zurückzusetzen
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// Dieser Callback kann auch in anderen Methoden verwendet werden,
// setzen Sie shouldTrackTime daher auf FALSE, wenn Sie das Timeout nicht mehr verwenden möchten
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// Wenn die Differenz zwischen der aktuellen Zeit und „startTime“ einen bestimmten Schwellenwert überschreitet,
// wird die Verarbeitung abgebrochen
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;
}
Dieses Objekt wird in den folgenden Codebeispielen verwendet: EventsHandling (Windows und Linux).

Hinweise

Unter Linux funktioniert diese Schnittstelle nicht, wenn das Engine-Objekt als Out-of-Process-Server geladen ist.

Siehe auch

FRDocument Arbeiten mit verknüpfbaren Objekten