跳转到主要内容
此对象表示单个块。在识别页面时,ABBYY FineReader Engine 会首先分析页面版面并检测其中各种类型的块。块决定了图像区域的识别方式,并在识别完成后包含已识别的信息。 页面上的每个块属于以下九种类型之一:文本、表格、光栅图片、矢量图片、条形码、勾选标记、复选标记组、分隔符和分隔符组。块的类型由 Type 属性定义。Block 对象提供了将其转换为某一子对象类型的方法,从而可以访问特定类型块的扩展属性。 块在图像上的位置由其区域 (Region 属性) 以及块所属的层 (BlockLayerType 属性) 共同定义。
FRPage 的版面中获取的块,在对该页面或其所属文档调用任何执行版面分析的方法 (例如 AnalyzeProcess) 后将失效。分析完成后,请在新版面中找到所需的块,并继续使用新的 Block 对象进行操作。

Properties

,read-only

返回 Engine 对象。

提供对 Blockregion的访问。Region 是矩形的集合。与其他类型的 Block 不同,table block 的 region 中最多只能包含一个矩形,因此若尝试将包含多个矩形的 region 赋值给 table block,将会导致错误。Region 由其矩形的坐标 (以像素为单位) 定义,坐标基于对应图像经black-and-white纠偏后的平面。

该属性返回一个常量对象。若要更改 Block 的 region,你必须先使用IEngine::CreateRegion方法获取一个中间 Region 对象,修改所需参数后,再将该对象赋值给此属性。

, read-only

ABBYY FineReader Engine 支持以下类型的 Block:文本、表格、光栅图片、矢量图片、条形码、勾选标记、复选标记组、分隔符、分隔符组以及自动分析。 (自动分析 Block 仅在 Visual Components 中使用。) 每种类型的 Block 都有其特定属性。

Block 类型在创建时确定,之后无法更改。如需更改 Block 类型,必须先删除该 Block,然后在完全相同的位置创建所需类型的新 Block:

  1. 使用方法创建一个对象,然后使用方法复制待替换 Block 的 region。
  2. 调用方法从版面中删除旧 Block。
  3. 创建所需类型的新 Block,并使用 LayoutBlocks 对象的方法将其添加到版面 Block 集合中。将从旧 Block 复制的 Region 作为必需参数之一传入。

, read-only

指定 Block 的背景颜色。

int 值由 RGB 三元组按以下公式计算得出: (红色值) + (256 × 绿色值) + (65536 × 蓝色值) ,其中红色值为三元组的第一个分量,绿色值为第二个分量,蓝色值为第三个分量。例如,白色的 int 值为 16777215。

默认情况下,该属性的值为 -1,表示颜色透明。

, read-only

指定 Block 所在的图层:背景层、前景层或隐藏层。Block 之间可以相互叠加,例如,文本 Block 可以覆盖在背景图片 Block 之上。

对于RasterPictureBlockVectorPictureBlock,可使用SetBlockLayerType方法更改图层。

默认情况下,此属性的值为 BLT_Foreground。

存储 Block 的描述信息。

默认情况下,此属性的值为空字符串。

存储 Block 的名称,可以是任意字符串。

默认情况下,此属性的值为空字符串。

允许将任意类型的用户自定义信息与 Block 类型的对象关联。

方法

名称Description
GetAsBarcodeBlock将 Block 作为 BarcodeBlock 对象返回。如果该 Block 不是条形码块,则返回 NULL。
GetAsCheckmarkBlock将 Block 作为 CheckmarkBlock 对象返回。如果该 Block 不是勾选标记块,则返回 NULL。
GetAsCheckmarkGroup将 Block 作为 CheckmarkGroup 对象返回。如果该 Block 不是勾选标记组块,则返回 NULL。
GetAsRasterPictureBlock将 Block 作为 RasterPictureBlock 对象返回。如果该 Block 不是光栅图片块,则返回 NULL。
GetAsSeparatorBlock将 Block 作为 SeparatorBlock 对象返回。如果该 Block 不是分隔符块,则返回 NULL。
GetAsSeparatorGroup将 Block 作为 SeparatorGroup 对象返回。如果该 Block 不是分隔符组块,则返回 NULL。
GetAsTableBlock将 Block 作为 TableBlock 对象返回。如果该 Block 不是表格块,则返回 NULL。
GetAsTextBlock将 Block 作为 TextBlock 对象返回。如果该 Block 不是文本块,则返回 NULL。
GetAsVectorPictureBlock将 Block 作为 VectorPictureBlock 对象返回。如果该 Block 不是矢量图片块,则返回 NULL。
Move按指定向量偏移 Block 的 Region。

Windows

Block

Linux 和 macOS

BlockLinuxMac 对象图

输出 Parameter

此对象是 LayoutBlocks 对象的 ItemAddNew 方法的输出 Parameter。

示例

int picturesCount = 0;
int suspiciousCharsCount = 0;
int totalCharsCount = 0;
int barcodesCount = 0;
// 计算文本中字符、可疑字符、图片和条码的数量
void computeStatisticsForBlock(FREngine.IBlock block)
{
 if (block.Type == FREngine.BlockTypeEnum.BT_Table)
 {
  FREngine.ITableBlock tableBlock = block.GetAsTableBlock();
  for (int iCell = 0; iCell < tableBlock.Cells.Count; iCell++)
  {
   computeStatisticsForBlock(tableBlock.Cells[iCell].Block);
  }
 }
 else if (block.Type == FREngine.BlockTypeEnum.BT_Text)
 {
  FREngine.ITextBlock textBlock = block.GetAsTextBlock();
  int paragraphsCount = textBlock.Text.Paragraphs.Count;
  for (int iPar = 0; iPar < paragraphsCount; iPar++)
  {
   FREngine.IParagraph par = textBlock.Text.Paragraphs[iPar];
   string text = par.Text;
   totalCharsCount += text.Length;
   FREngine.ICharParams charParams = engine.CreateCharParams();
   for (int iChar = 0; iChar < text.Length; iChar++)
   {
    par.GetCharParams(iChar, charParams);
    if (charParams.IsSuspicious)
    {
     suspiciousCharsCount++;
    }
   }
  }
 }
 else if (block.Type == FREngine.BlockTypeEnum.BT_RasterPicture || block.Type == FREngine.BlockTypeEnum.BT_VectorPicture)
 {
  picturesCount++;
 }
 else if (block.Type == FREngine.BlockTypeEnum.BT_Barcode)
 {
  barcodesCount++;
 }
}
以下代码示例中使用了该对象:

另请参阅

LayoutBlocks 使用 Layout 和 Block 使用 Properties