- OutprocLoader 객체를 사용해 문서를 처리하고 각 페이지의 레이아웃을 가져옵니다. 가져온 레이아웃을 SaveToStream 메서드로 데이터 스트림에 씁니다.
- InprocLoader 객체를 사용해 CreateLayoutFromStream 메서드로 원본 레이아웃의 복사본을 복원합니다. 이후 레이아웃 내용을 반복 처리할 때는 이 복사본을 사용합니다.
- out-of-process server로 로드된 Engine 객체를 사용해 문서를 처리하고 각 페이지의 레이아웃을 가져옵니다. 가져온 레이아웃을 SaveToArray 메서드로 바이트 배열에 씁니다.
- 네이티브로 로드된 Engine 객체(즉, libFREngine.so 라이브러리에서 현재 프로세스에 로드된 객체)를 사용해 IReadStream 인터페이스의 구현을 통해 가져온 바이트 배열을 읽습니다.
- 네이티브로 로드된 Engine 객체를 사용해 CreateLayoutFromStream 메서드로 원본 레이아웃의 복사본을 복원합니다. 이후 레이아웃 내용을 반복 처리할 때는 이 복사본을 사용합니다.
레이아웃 블록
텍스트 블록
텍스트 블록
이 블록 유형은 서식이 지정된 텍스트로 인식된 이미지 영역에 해당합니다. 이 블록의 속성은 TextBlock 객체를 통해 액세스할 수 있습니다. 또한 이 객체를 통해 블록으로 둘러싸인 이미지 부분에서 인식된 텍스트에도 액세스할 수 있습니다.
표 블록
표 블록
이 블록 유형은 표에 해당합니다. 이 유형의 블록은 사각형 형태만 가질 수 있습니다(영역에는 사각형이 하나만 포함됨). 이 블록 유형의 속성은 TableBlock 객체를 통해 액세스할 수 있습니다. 표의 구조는 가로 및 세로 표 구분선의 두 컬렉션(TableSeparators 객체)과 표 셀의 컬렉션(TableCells 객체)으로 설명됩니다. 각 표 셀은 특정 유형의 블록으로 처리됩니다. 인식된 텍스트는 전체 표의 속성이 아니라 개별 셀의 속성입니다. 셀이 그림인 경우 셀 경계 내에 포함된 이미지는 인식되지 않으며, 인식된 텍스트에서는 그림으로 표시됩니다. 표 구분선은 서로 다른 유형일 수 있습니다. 구분선 유형은 다른 구분선과 가장 가까운 교차점 사이에 있는 구분선 세그먼트에 대해 정의됩니다. 구분선은 다음 유형일 수 있습니다.
- 없음. 이 유형은 병합된 셀을 가로질러 지나가야 하는 표 구분선에 할당됩니다.
- 알 수 없음. 이 유형은 새로 추가된 모든 표 구분선에 기본적으로 할당됩니다.
- 보이지 않음. 이 유형은 원본 표에는 없지만 논리적으로는 있어야 하는 위치에서 표 구조 분석 결과 생성된 “가상의” 표 구분선에 할당됩니다.
- 명시적. 이 유형의 표 구분선은 원본 표의 검은 선이 있는 위치에 나타납니다.
-
다중. 이 유형의 구분선은 표 편집 결과로 나타날 수 있습니다.

래스터 그림 블록
래스터 그림 블록
이 블록 유형은 래스터 그림으로 처리되는 이미지 영역을 나타냅니다. 이 블록이 둘러싼 이미지 부분은 인식되지 않으며, 블록은 “있는 그대로” 내보내집니다. 이 블록 유형의 속성은 RasterPictureBlock 객체로 표현됩니다.
벡터 그림 블록
벡터 그림 블록
이 블록 유형은 벡터 그림으로 처리되는 이미지 영역을 나타냅니다. 이 유형의 블록은 IPageAnalysisParams::DetectVectorGraphics 속성이 TRUE로 설정된 상태에서 페이지를 분석한 경우에만 레이아웃에 나타날 수 있습니다. 일반적으로 배경 그림은 이 유형의 블록으로 인식됩니다. 이 블록 유형의 속성은 VectorPictureBlock 객체로 표현됩니다.
바코드 블록
바코드 블록
이 유형의 블록으로 둘러싸인 이미지 부분은 바코드로 간주됩니다. ABBYY FineReader Engine은 여러 유형의 바코드를 인식하며, 바코드 유형을 자동으로 감지할 수도 있습니다. 인식된 바코드에서 읽어 들인 정보는 BarcodeBlock 객체로 표현되는 바코드 블록 전용 속성을 통해 액세스할 수 있습니다.
체크마크 블록
체크마크 블록
이 유형의 블록으로 둘러싸인 이미지 부분은 체크마크로 간주됩니다. 이는 체크마크로 인식된 이미지 영역에 해당합니다. 인식된 체크마크에서 읽어 들인 정보는 CheckmarkBlock 객체로 표현되는 체크마크 블록 전용 속성을 통해 액세스할 수 있습니다.
체크마크 그룹 블록
체크마크 그룹 블록
이 유형의 블록으로 둘러싸인 이미지 부분은 체크마크 그룹으로 간주됩니다. 이는 체크마크 그룹으로 인식된 이미지 영역에 해당합니다. 인식된 체크마크 그룹에서 읽어 들인 정보는 CheckmarkGroup 객체로 표현되는 체크마크 그룹 블록 전용 속성을 통해 액세스할 수 있습니다.
구분선 블록
구분선 블록
이 유형의 블록으로 둘러싸인 이미지 부분은 구분선으로 간주됩니다. 구분선은 페이지 레이아웃 분석 중에 감지되는 선입니다. 예를 들어 표의 일부이거나 서로 다른 텍스트 요소를 구분하는 선일 수 있습니다. 구분선의 좌표와 유형은 SeparatorBlock 객체를 통해 액세스할 수 있습니다.
구분선 그룹 블록
구분선 그룹 블록
이 유형의 블록으로 둘러싸인 이미지 부분은 구분선 그룹으로 간주됩니다. 이는 구분선 그룹으로 인식된 이미지 영역에 해당합니다. 구분선 그룹은 일반적으로 사각형을 이루는 네 개의 구분선을 포함합니다. 예를 들어, 표 테두리를 이루는 네 개의 선은 구분선 그룹으로 인식됩니다. 각 구분선 그룹에는 구분선 블록 컬렉션이 포함됩니다. 구분선 그룹 블록의 전용 속성은 SeparatorGroup 객체로 표현됩니다.
autoanalysis blocks도 있으며, 이는 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 메서드를 호출해 레이아웃에서 기존 블록을 삭제합니다.
- 필요한 유형의 새 블록을 만든 다음, LayoutBlocks 객체의 AddNew 메서드를 사용해 레이아웃 블록 컬렉션에 추가합니다. 이때 필수 매개변수 중 하나로 이전 블록에서 복사한 Region을 전달합니다.
