跳轉到主要內容
這是一個回呼介面,用於將 FRDocument 物件的事件通知給監聽器。此介面是在用戶端實作。如需適用於您開發工具的詳細實作建議,請參閱 使用可連接物件。以下為簡要說明:
  • C++ 使用者需要實作 IFRDocumentEvents 介面、取得 connection point (Windows),並將實作此介面的物件以「advise」方式連接到 FRDocument 物件。由於此介面衍生自 IUnknown 介面,因此客戶端物件也應實作 IUnknown 方法。
  • 想要接收來自 FRDocument 物件之通知的 Visual Basic 使用者,應將其宣告為 WithEvents,並實作與下列內容類似的程序:
Public WithEvents doc As FREngine.FRDocument
Private Sub doc_OnPageProcessed(ByVal sender As FRDocument, _
                                ByVal index As Integer, _
                                ByVal stage As PageProcessingStageEnum)
...
End Sub
透過此介面的方法接收通知的物件,可在這些方法的實作中執行下列操作:
  • 回報影像載入、文件分析、識別、合成及匯出的完成百分比。
  • 回報已完成的文件分析、識別、合成及匯出的相關資訊。
  • 在 Windows 中:處理任何系統訊息,以協助避免應用程式在長時間作業期間顯示為無回應。這對有使用者介面的應用程式會很有幫助。

方法

名稱說明
OnPageProcessed向客戶端提供頁面處理完成的資訊。
OnProgress向客戶端提供目前作業 (影像載入、分析、識別等) 大致完成百分比的資訊。
OnWarning向客戶端提供處理期間發生的提示與警告。

範例

此 Windows C++ 範例示範如何實作計時器,在方法呼叫耗時過久時中止處理。
class CFRDocumentCallback: public IFRDocumentEvents {
public:
    CFRDocumentCallback() : startTime( 0 ) {}
    // 實作 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;
};
 
// 呼叫 FlushTimer 方法來重設 startTime
void CFRDocumentCallback::FlushTimer() {
    time( &startTime );
}
 
// 此回呼可能也會用於其他方法,
// 因此如果您不想再使用逾時功能,請將 shouldTrackTime 設為 FALSE
void CFRDocumentCallback::SetShouldTrackTime( bool _shouldTrackTime ) {
    shouldTrackTime = _shouldTrackTime;
}
 
// 如果目前時間與 "startTime" 之間的差值超過特定門檻,
// 處理將會中止
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;
}
此物件用於下列程式碼範例:EventsHandling (Windows 與 Linux) 。

備註

在 Linux 中,如果將 Engine 物件載入為程序外伺服器,則此介面無法運作。

另請參見

FRDocument 使用可連接物件