- 使用 OutprocLoader 对象处理文档,并获取每一页的布局。通过 SaveToStream 方法将获取到的布局写入数据流。
- 使用 InprocLoader 对象,通过 CreateLayoutFromStream 方法还原原始布局的副本。使用该副本继续迭代布局内容。
- 使用以进程外服务器方式加载的 Engine 对象处理文档,并获取每一页的布局。通过 SaveToArray 方法将获取到的布局写成字节数组。
- 使用以原生方式加载的 Engine 对象 (即从 libFREngine.so 库加载到当前进程中) ,通过你对 IReadStream 接口的实现来读取获取到的字节数组。
- 使用以原生方式加载的 Engine 对象,通过 CreateLayoutFromStream 方法还原原始布局的副本。使用该副本继续迭代布局内容。
布局块
文本块
文本块
此类块对应于被识别为带格式文本的图像区域。此类块的属性可通过 TextBlock 对象访问。该对象还可访问块所包围图像部分中的识别文本。
表格块
表格块
此类块对应于表格。此类块只能是矩形 (即区域只包含一个矩形) 。此类块的属性可通过 TableBlock 对象访问。表格结构由两组表格分隔符 (水平和垂直的 TableSeparators 对象) 以及一组表格单元格 (TableCells 对象) 描述。每个表格单元格都被视为某种类型的块。识别出的文本是单个单元格的属性,而不是整个表格的属性。如果单元格是图片,则单元格边界内包含的图像不会被识别,而会在识别文本中显示为图片。表格分隔符可以有不同类型。分隔符类型是针对分隔符上位于与其他分隔符最近交点之间的线段定义的。分隔符可分为以下类型:
- Absent。此类型分配给“应当”穿过合并单元格的表格分隔符。
- Unknown。此类型默认分配给每个新添加的表格分隔符。
- Invisible。此类型分配给“假想”的表格分隔符,它是在表格结构分析过程中创建的,位置是源表格中原本没有但从逻辑上应该存在分隔符的地方。
- Explicit。此类型的表格分隔符出现在源表格黑线所在的位置。
-
Multiple。此类分隔符可能在编辑表格后出现。

光栅图片块
光栅图片块
此类块表示被视为光栅图片的图像区域。此块所包围的图像部分不会被识别,并且该块会“按原样”导出。此类块的属性由 RasterPictureBlock 对象表示。
矢量图片块
矢量图片块
此类块表示被视为矢量图片的图像区域。只有当页面在分析时将 IPageAnalysisParams::DetectVectorGraphics 属性设置为 TRUE,布局中才可能出现此类块。通常,背景图片会被识别为此类块。此类块的属性由 VectorPictureBlock 对象表示。
条码块
条码块
图像中被此类块圈定的部分会被视为条码。ABBYY FineReader Engine 可识别多种类型的条码,也可以自动检测条码类型。识别出的条码信息可通过条码块的专用属性访问,这些属性由 BarcodeBlock 对象表示。
勾选标记块
勾选标记块
图像中被此类块圈定的部分会被视为勾选标记。它对应于被识别为勾选标记的图像区域。识别出的勾选标记信息可通过勾选标记块的专用属性访问,这些属性由 CheckmarkBlock 对象表示。
勾选标记组块
勾选标记组块
图像中被此类块圈定的部分会被视为勾选标记组。它对应于被识别为勾选标记组的图像区域。识别出的勾选标记组信息可通过勾选标记组块的专用属性访问,这些属性由 CheckmarkGroup 对象表示。
分隔符块
分隔符块
图像中被此类块圈定的部分会被视为分隔符。分隔符是在页面布局分析期间检测到的线条。它们可以是表格的一部分、分隔不同文本元素的线条等。分隔符的坐标和类型可通过 SeparatorBlock 对象获取。
分隔符组块
分隔符组块
图像中被此类块圈定的部分会被视为分隔符组。它对应于被识别为一组分隔符的图像区域。一个分隔符组通常包含构成矩形的四个分隔符。例如,表格边框的四条线会被识别为一个分隔符组。每个分隔符组都包含一个分隔符块集合。分隔符组块的专用属性由 SeparatorGroup 对象表示。
此外还有自动分析块,它们仅用于 Visual Components (FRE for Windows 的一部分) 。这些块无法通过 FineReader Engine API 创建或识别。它们只能通过 ILayout::VisualBlocks 属性访问。
手动添加块
- 打开 FRPage 对象,并通过 Layout 属性获取页面布局。
- 使用 IEngine::CreateRegion 方法为该块创建一个 Region 对象,再使用 IRegion::AddRect 方法向其中添加矩形。
- 创建所需类型的块,并使用 LayoutBlocks 对象的 AddNew 方法将其添加到布局块集合中。
- 设置该块所需的参数 (使用与该块类型对应的块属性对象) 。
更改块类型
- 使用 IEngine::CreateRegion 方法创建一个 Region 对象,并借助 IRegion::CopyFrom 方法复制您需要替换的块的区域。
- 通过调用 ILayoutBlocks::DeleteAt 方法,从 Layout 中删除旧块。
- 创建一个所需类型的新块,并使用 LayoutBlocks 对象的 AddNew 方法将其添加到 Layout 块集合中。将从旧块复制的 Region 作为必需参数之一传入。
