跳转到主要内容
此方法打开指定的图像文件,并将该文件中的页面添加到文档中。

语法

C++

HRESULT AddImageFile(
  BSTR               ImageFileName,
  IPrepareImageMode* PrepareMode,
  IIntsCollection*   PageIndices
);

C#

void AddImageFile(
  string           ImageFileName,
  IPrepareImageMode PrepareMode,
  IIntsCollection   PageIndices
);

Visual Basic .NET

Sub AddImageFile( _
  ImageFileName As String, _
  [PrepareMode As IPrepareImageMode = Nothing], _
  [PageIndices As IIntsCollection = Nothing] _
)

Parameters

ImageFileName [in] 此变量包含要打开的图像文件的完整路径。 PrepareMode [in] 此参数引用 PrepareImageMode 对象,用于指定图像在打开时的预处理方式。 PageIndices [in] 此参数引用 IntsCollection 对象,用于指定要添加到文档中的页面索引。请注意,不允许使用重复的索引。如需多次添加同一页面,请多次调用此方法。
此参数为可选参数,可以为 0,此时所打开文件的所有页面都将被添加到文档中。

返回值

此方法没有特定的返回值,返回 ABBYY FineReader Engine 函数的标准返回值

备注

  • 使用此方法打开 PDF Portfolio 文件时,输出文件中始终会包含其封面。
  • 此方法可能会向附加到 FRDocument 对象的 IConnectionPointContainer 接口的侦听器报告事件。
  • 对于 Linux 和 Windows:

示例

此 Windows 示例演示了如何在向文档添加页面的过程耗时过长时中止该操作。
// 如果图像加载耗时过长,则启用超时控制
frDocumentCallback.SetShouldTrackTime( true );
frDocumentCallback.FlushTimer();
// 调用 AddImageFile 方法打开图像文件
CheckResult( frDocument->AddImageFile( imageFilePath, 0, pageIndices ) );
// 为后续处理关闭超时控制
frDocumentCallback.SetShouldTrackTime( false );
...
// 使用 IFRDocumentEvents 回调接口报告事件
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* frPage, 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”之间的差值超过某个阈值,进程将被中止。AddImageFile 方法向 OnProgress 方法传递的是 0,
而不是 percentage
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 文档比较 演示工具中。

另请参见

FRDocument AddImageFileWithPassword AddImageFileWithPasswordCallback AddImageDocument 处理图像