Pular para o conteúdo principal
Este objeto representa um único bloco. Ao reconhecer uma página, o ABBYY FineReader Engine primeiro analisa seu layout e detecta blocos de vários tipos na página. Os blocos determinam como as áreas da imagem são reconhecidas e, após o reconhecimento, contêm as informações reconhecidas. Cada bloco na página pertence a um dos nove tipos: texto, tabela, imagem raster, imagem vetorial, código de barras, marca de seleção, grupo de marcas de seleção, separador e grupo de separadores. O tipo do bloco é definido pela propriedade Type. O objeto Bloco expõe métodos que o convertem em um de seus objetos filhos e, assim, fornecem acesso aos atributos estendidos de um bloco de um tipo específico. A posição do bloco em uma imagem é definida por sua região (a propriedade Region) e pela camada à qual o bloco pertence (a propriedade BlockLayerType).
O bloco obtido do layout de uma FRPage se tornará inválido após a chamada de qualquer um dos métodos que executam a análise de layout (como Analyze ou Process ) para essa página ou para o documento ao qual ela pertence. Após a análise, localize o bloco necessário no novo layout e continue trabalhando com o novo objeto Bloco.

Properties

,read-only

Retorna o objeto Engine.

Fornece acesso àregiondo bloco. Uma region é uma coleção de retângulos. Ao contrário de outros tipos de blocos, um bloco de tabela pode ter no máximo um retângulo em sua region; por isso, uma tentativa de atribuir uma region com mais de um retângulo a um bloco de tabela resultará em erro. A region é definida pelas coordenadas de seus retângulos (em pixels) no planoblack-and-whitecorrigido quanto à inclinação da imagem correspondente.

A propriedade retorna um objeto constante. Para alterar a region do bloco, é necessário primeiro obter um objeto Region intermediário usando o métodoIEngine::CreateRegion, alterar os parâmetros necessários e, em seguida, atribuir o objeto obtido à propriedade.

, somente leitura

O ABBYY FineReader Engine utiliza os seguintes tipos de blocos: texto, tabela, imagem raster, imagem vetorial, código de barras, marca de seleção, grupo de marcas de seleção, separador, grupo de separadores e autoanálise. (Os blocos de autoanálise são usados apenas em Visual Components). Cada tipo de bloco tem suas próprias propriedades específicas.

O tipo de bloco é definido durante a criação e não pode ser alterado. Caso seja necessário alterar o tipo de bloco, será preciso excluir o bloco e criar outro do tipo desejado exatamente no mesmo local:

  1. Crie um objetousando o métodoe copie a region do bloco que você precisa substituir com o auxílio do método.
  2. Exclua o bloco antigo do layout chamando o método.
  3. Crie um novo bloco do tipo necessário e adicione-o à coleção de layout blocks usando o métododo objeto LayoutBlocks. Passe a Region copiada do bloco antigo como um dos parâmetros obrigatórios.

, somente leitura

Especifica a cor de plano de fundo do bloco.

O valor int é calculado a partir do triplete RGB usando a fórmula: (valor de vermelho) + (256 x valor de verde) + (65536 x valor de azul), onde o valor de vermelho é o primeiro componente do triplete, o valor de verde é o segundo componente e o valor de azul é o terceiro componente. Por exemplo, o valor int da cor branca é 16777215.

Por padrão, o valor desta propriedade é -1, o que indica que a cor é transparente.

, somente leitura

Especifica a camada do bloco: plano de fundo, primeiro plano ou oculto. Os blocos podem ser sobrepostos; por exemplo, um bloco de texto pode ficar sobre um bloco de imagem de plano de fundo.

ParaRasterPictureBlockeVectorPictureBlock, é possível alterar a camada usando o métodoSetBlockLayerType.

Por padrão, o valor desta propriedade é BLT_Foreground.

Armazena a descrição do bloco.

Por padrão, o valor desta propriedade é uma string vazia.

Armazena o nome do bloco. Pode ser uma string arbitrária.

Por padrão, o valor desta propriedade é uma string vazia.

Permite associar informações definidas pelo usuário de qualquer tipo a um objeto do tipo Block .

Métodos

NomeDescrição
GetAsBarcodeBlockRetorna o bloco como o objeto BarcodeBlock. Se o bloco não for um bloco de código de barras, NULL será retornado.
GetAsCheckmarkBlockRetorna o bloco como o objeto CheckmarkBlock. Se o bloco não for um bloco de caixa de seleção, NULL será retornado.
GetAsCheckmarkGroupRetorna o bloco como o objeto CheckmarkGroup. Se o bloco não for um bloco do tipo grupo de marcas de seleção, NULL será retornado.
GetAsRasterPictureBlockRetorna o bloco como o objeto RasterPictureBlock. Se o bloco não for um bloco de imagem raster, NULL será retornado.
GetAsSeparatorBlockRetorna o bloco como o objeto SeparatorBlock. Se o bloco não for um bloco separador, NULL será retornado.
GetAsSeparatorGroupRetorna o bloco como o objeto SeparatorGroup. Se o bloco não for um bloco do tipo grupo de separadores, NULL será retornado.
GetAsTableBlockRetorna o bloco como o objeto TableBlock. Se o bloco não for um bloco de tabela, NULL será retornado.
GetAsTextBlockRetorna o bloco como o objeto TextBlock. Se o bloco não for um bloco de texto, NULL será retornado.
GetAsVectorPictureBlockRetorna o bloco como o objeto VectorPictureBlock. Se o bloco não for um bloco de imagem vetorial, NULL será retornado.
MoveDesloca a região do bloco por um determinado vetor.

Windows

Bloco

Linux e macOS

BlockLinuxMac Diagrama de objetos

Parâmetro de saída

Este objeto é o parâmetro de saída dos métodos Item e AddNew do objeto LayoutBlocks.

Exemplos

int picturesCount = 0;
int suspiciousCharsCount = 0;
int totalCharsCount = 0;
int barcodesCount = 0;
// Calcula o número de caracteres, caracteres suspeitos, imagens e códigos de barras em um texto
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++;
 }
}
O objeto é usado nos exemplos de código a seguir:

Veja também

LayoutBlocks Trabalhando com Layout e Blocos Trabalhando com Properties