跳转到主要内容
此方法从全局内存中打开用户先前已加载到其中的图像文件,并将该文件中对应的页面添加到文档中。

语法

C++

Linux 与 macOS
HRESULT  AddImageFileFromMemory(
  void*                   DataPtr,
  __int64                 DataSize,
  IImagePasswordCallback* Callback,
  IPrepareImageMode*      PrepareMode,
  IIntsCollection*        PageIndices,
  BSTR                    FileName
);
Windows
HRESULT  AddImageFileFromMemory(
  __int64                 HGlobal,
  IImagePasswordCallback* Callback,
  IPrepareImageMode*      PrepareMode,
  IIntsCollection*        PageIndices,
  BSTR                    FileName
);

C#

void AddImageFileFromMemory(
  Int64                  HGlobal,
  IImagePasswordCallback Callback,
  IPrepareImageMode       PrepareMode,
  IIntsCollection         PageIndices,
  string                 FileName
);

Visual Basic .NET

Sub AddImageFileFromMemory( _
  HGlobal As Int64, _
  Callback As IImagePasswordCallback, _
  [PrepareMode As IPrepareImageMode = Nothing], _
  [PageIndices As IIntsCollection = Nothing], _
  [FileName As String = "0"] _
)

参数

DataPtr [in] Linux:指定包含图像文件的内存块地址。 DataSize [in] Linux:指定加载到内存中的图像大小。 HGlobal [in] macOS 和 Windows:指定包含图像文件的内存块的 HGLOBAL 句柄。该句柄以 __int64 形式传递。该句柄必须有效。 Callback [in] 此变量表示用户实现的 ImagePasswordCallback 类型对象的接口,用于处理访问 PDF 格式图像时可能出现的密码请求。此参数为可选参数,可以为 0;在这种情况下,无法处理受密码保护的文件。 PrepareMode [in] 引用 PrepareImageMode 对象,该对象指定图像在打开过程中将如何进行预处理。此参数为可选参数,可以为 0;在这种情况下,将使用默认参数;或者,如果已加载某个 profile,则使用该 profile 中设置的参数。 PageIndices [in] 此参数引用 IntsCollection 对象,该对象指定必须添加到文档中的页面索引。请注意,不允许重复索引。若要多次添加同一页面,请多次调用此方法。
此参数为可选参数,可以为 0;在这种情况下,打开文件中的所有页面都将添加到文档中。
FileName [in] 指定图像文件的名称。如果未显式指定文件格式,则此信息用于确定文件格式,也会用于错误消息。此参数为可选参数,可以为 0。 对于打开 office 格式 (仅限 Linux 和 Windows) ,请传入带扩展名的文档名称。

返回值

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

备注

  • SVG 格式的文件无法从内存中打开。
  • 使用此方法打开 PDF Portfolio 文件时,其封面始终会包含在输出文件中。
  • 此方法可能会向附加到 FRDocument 对象的 IConnectionPointContainer 接口的侦听器发送事件通知。
  • 对于 Linux 和 Windows:
  • 对于 Windows,此方法不支持打开 WIC 兼容文件。

示例

// 此示例演示如何将图像文件加载到内存中
// 然后将其添加到 FineReader Engine 进行处理
...
// 在此代码示例中,我们使用 System.IO 命名空间处理内存中的文件
using System.IO;
// 并使用 System.Runtime.InteropServices 命名空间处理内存块
using System.Runtime.InteropServices;
...
// 假设我们已经创建了 Engine 对象
// 创建文档
FREngine.IFRDocument document = engine.CreateFRDocument();
// 源图像
string imagePath = "D:\\Demo.tif";
FileInfo file = new FileInfo(imagePath);
// 源图像的长度
long len = file.Length;
// 打开图像
BinaryReader br = new BinaryReader(File.Open(imagePath, FileMode.Open));
// 从当前流中读取指定数量的字节,并存入字节数组
byte[] byteArray = br.ReadBytes((int)len);
// 分配一块内存
IntPtr handle = Marshal.AllocHGlobal((int)len);
// 将数据从托管字节数组复制到非托管内存指针
Marshal.Copy(byteArray, 0, handle, (int)len);
// 将内存中的图像添加到文档
document.AddImageFileFromMemory((Int64)handle, null, null, null, "Demo.tif");
// 释放之前从进程的非托管内存中分配的内存
Marshal.FreeHGlobal(handle);
// 识别文档
document.Process(null);

另请参见

FRDocument