此方法已在 Linux 和 Windows 版 FRE 中實作。
此方法是在用戶端實作。它會從來源的影像處理佇列中傳回下一個影像文件。
GetNextImageDocument 方法的實作可能包含等待下一個影像文件的時間。不過,我們不建議設定過長的等待時間,因為 FineReader Engine 並非多執行緒。在等待下一個文件期間,Engine 將無法處理來自辨識程序的訊息,也無法接收頁面處理完成的通知。如果您確實需要指定較長的等待時間,GetNextImageDocument 方法可以傳回 0。在此情況下,Engine 將繼續處理來自辨識程序的訊息、提供已辨識的影像,並在稍後檢查影像佇列是否為空。如果佇列不是空的 (也就是說,如果 IImageSource::IsEmpty 傳回 FALSE) ,Engine 會再次呼叫 GetNextImageDocument 方法。不過,如果 GetNextImageDocument 方法傳回 0,且已沒有更多頁面可處理,FineReader Engine 會將控制權交還給使用者:IBatchProcessor::GetNextProcessedPage 方法將傳回 0。
- 佇列中的所有 ImageDocument 物件,都必須在處理結束前保持有效。為了確保正常運作,ImageDocument 物件應透過 Engine 物件建立。如果它們是透過 FRDocument 物件建立,則可能會因為在呼叫 GetNextImageDocument 方法期間 FRDocument 物件遭到銷毀而發生錯誤。
- 由於此方法是在用戶端實作,因此有以下限制:
HRESULT GetNextImageDocument( IImageDocument** Result );
IImageDocument GetNextImageDocument();
Function GetNextImageDocument() As IImageDocument
Result
[out, retval] 指向 IImageDocument* 指標變數的指標,用於存取佇列中的下一個影像文件。
[僅限 C++] 如果此方法回傳的值不是 S_OK,表示用戶端發生錯誤。
此 方法 的客戶端實作必須確保,方法 內部擲出的所有例外狀況都會被攔截並處理,且不會有任何例外狀況傳遞到 方法 外部。若例外狀況傳遞到 方法 外部,可能會導致不可預期的結果 (例如程式終止) 。
// 自訂影像來源的範例實作,會維護影像檔案佇列
public class ImageSourceCallback : FREngine.IImageSource
{
public ImageSourceCallback( string imageFilesDirectory )
{
imageFiles = ImageSourceHelper.LoadFilesNames( imageFilesDirectory );
nextFileIndex = 0;
}
public bool IsEmpty()
{
return nextFileIndex >= imageFiles.Length;
}
public FREngine.IFileAdapter GetNextImageFile()
{
if( !IsEmpty() ) {
return new FileAdapterCallback( imageFiles[nextFileIndex++] );
}
return null;
}
public FREngine.IImageDocument GetNextImageDocument()
{
...
}
private string[] imageFiles;
private int nextFileIndex;
}
public class FileAdapterCallback : FREngine.IFileAdapter
{
...
}
public class ImageSourceHelper
{
...
}
IImageSource
GetNextImageFile
IsEmpty
ImageDocument