处理布局和块
当处理文档时,ABBYY FineReader Engine 首先分析其布局,并检测文档页面上的某些区域。这些区域被称为“块”。块决定了图像区域的识别方式和顺序。
在 ABBYY FineReader Engine 中,Layout 对象为块和已识别文本的存储区。文档处理的基本场景会借助 FRDocument 对象内的布局进行处理,该对象表示正在处理中的文档。可通过 IFRPage::Layout 属性访问文档页面的布局。
如果使用作为进程外服务器加载的 Engine 对象,您可以通过以下方案加速 Layout 对象的循环访问:
- 使用 OutprocLoader 对象处理文档并获取每个页面的布局。通过 SaveToStream 方法,将获取的布局写入数据流。
- 使用 InprocLoader 对象通过 CreateLayoutFromStream 方法恢复原始布局的副本。将该副本用于后续的布局内容循环访问。
布局块
Layout 对象可通过 Blocks 和 BlackSeparators 属性提供对布局结构的访问。这些属性都可提供对 LayoutBlocks 子对象的访问,子对象代表块集合。第一个指主要布局块集,其包含文本、表格、图片、条形码和复选标记。第二个指用于分隔符的块集合。分隔符指页面布局分析期间检测到的黑线。它们用于在合成和导出期间进行更精确的页面布局重建。
您也可以用 Layout 对象的 SortedBlocks 属性按逻辑排序获取块。
每个块有自己的区域,由多个矩形组成。每个区域由 Region 对象表示。
根据块中包含的数据类型,块也会有不同的类型,每个块都有自己的特定属性。可以通过对应块类型对象访问这些属性,对应快类型可通过 Block 对象方法进行接受。对应块类型接口源自 IBlock 接口,并继承了它的所有属性。可用块类型如下:
文本块
表格块
光栅图片块
矢量图片块
条形码块
复选标记块
复选标记组块
分隔符块
分隔符组块
注: 还有 自动分析块,它们仅用于视觉组件。它们不能通过 FineReader Engine API 进行创建和识别。它们只能通过 ILayout::VisualBlocks 属性进行访问。
手动添加块
版面分析期间,页面上会自动找到块。但或许您想手动绘制块。在此情况下:
- 打开 FRPage 对象,通过 Layout 属性获取页面布局。
- 借助 IEngine::CreateRegion 方法为块创建 Region 对象,然后使用 IRegion::AddRect 方法向其添加矩形。
- 创建一个所需类型的块,然后通过 LayoutBlocks 对象的 AddNew 方法将其添加到布局块集合中。
- 设置块的所需参数(使用对应块类型的块属性对象)。
更改块类型
块类型是在创建过程中定义的,不能更改。如需更改块类型,必须删除此块,并在同一地方再创建一个所需类型的块:
- 创建一个 Region 对象(使用 IEngine::CreateRegion 方法),借助 IRegion::CopyFrom 方法,复制需要替换的块区域。
- 通过调用 ILayoutBlocks::DeleteAt 方法,从布局中删除旧块。
- 新创建所需类型的块,然后使用 LayoutBlocks 对象的 AddNew 方法,将其添加入布局块集合中。把从旧块中复制的 Region 传递为所需参数之一进行传递。
另请参阅
17.09.2024 15:14:41