此方法已在适用于 Linux 和 Windows 的 FRE 中实现。
此方法在客户端实现。该方法从源的图像处理队列中返回下一个图像文件。
GetNextImageFile 方法的实现可以包含等待下一个图像文件的时间。不过,我们不建议设置过长的等待时间,因为 FineReader Engine 不是多线程的。在等待下一个文件期间,Engine 将无法处理来自识别进程的消息,也无法接收某些页面已处理完毕的通知。如果您确实需要指定较长的等待时间,GetNextImageFile 方法可以返回 0。在这种情况下,Engine 将继续处理来自识别进程的消息并提供已识别的图像,过一段时间后会检查图像队列是否为空。如果队列不为空 (即 IImageSource::IsEmpty 返回 FALSE) ,Engine 将再次调用 GetNextImageFile 方法。但是,如果 GetNextImageFile 方法返回 0,并且没有更多页面需要处理,FineReader Engine 将把控制权返回给用户:IBatchProcessor::GetNextProcessedPage 方法将返回 0。
HRESULT GetNextImageFile( IFileAdapter** Result );
IFileAdapter GetNextImageFile();
Function GetNextImageFile() As IFileAdapter
Result
[out, retval] 指向 IFileAdapter* 指针变量的指针,该变量用于访问队列中的下一个图像文件。
[仅限 C++] 如果此方法返回的值不是 S_OK,则表示客户端发生了错误。
- 此方法的客户端实现必须确保:在方法内部抛出的所有异常都会被捕获并妥善处理,且不会传播到方法外部。异常一旦传播到方法外部,可能会导致不可预知的结果 (例如程序终止) 。
- 如果您的许可证包含 Office Formats Opening 模块,您还可以使用此方法打开采用支持的格式的电子文档。
// 自定义图像源的示例实现,用于维护图像文件队列
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
GetNextImageDocument
IsEmpty
IFileAdapter