메인 콘텐츠로 건너뛰기
C# 샘플 및 정보는 Windows용 FRE에만 적용됩니다.
ABBYY FineReader Engine의 컬렉션에는 세 가지 주요 유형이 있습니다.
  • 임시 컬렉션 (기존 객체에 대한 참조 컬렉션)
  • 자식 객체 컬렉션
  • 자식 객체의 읽기 전용 컬렉션
이 페이지에서는 다음 내용을 확인할 수 있습니다.
  • 각 유형의 컬렉션 작업 방법
  • 사용 가능한 모든 컬렉션 목록 보기 방법
  • Windows용 FRE의 .NET에서 컬렉션 작업 방법

임시 컬렉션

이 유형의 컬렉션은 기존 객체를 참조하는 컬렉션입니다. 이러한 컬렉션은 임시 컬렉션으로, 일반적으로 이를 필요로 하는 메서드에 여러 매개변수 집합을 전달하는 데 사용됩니다. 이 컬렉션을 생성하고 요소를 추가한 다음(요소는 기존 객체에 대한 참조로 추가됨) 필요한 메서드에 전달하고, 이후에는 컬렉션에 추가된 객체는 그대로 둔 채 컬렉션만 삭제합니다. 이러한 컬렉션의 이름에는 Collection 접미사가 붙습니다(예: StringsCollection, IntsCollection). 이러한 유형의 컬렉션으로 작업하려면:
  1. Engine 객체의 해당 생성 메서드를 사용해 컬렉션을 생성합니다. 예를 들어 IntsCollection 객체의 경우 CreateIntsCollection 메서드를 사용합니다. 이러한 컬렉션은 일부 메서드의 반환값이 될 수도 있습니다.
  2. 컬렉션의 Add 메서드를 사용해 기존 객체를 컬렉션에 추가합니다. 읽기 전용 Count 속성, 읽기/쓰기 Element 속성, 그리고 Item 메서드를 사용해 컬렉션을 순회할 수 있습니다. 첫 번째는 실제로 컬렉션에 포함된 요소 수를 가져오고, 두 번째와 세 번째는 지정된 인덱스의 요소에 접근할 수 있게 합니다. Element 속성을 사용하면 C#에서 [] 연산자로 컬렉션의 요소에 접근할 수 있습니다.
  3. 필요한 경우 컬렉션의 다른 메서드인 InsertAt, DeleteAt, DeleteAll 메서드를 사용해 컬렉션을 수정합니다.
  4. 컬렉션을 매개변수로 필요로 하는 메서드에 전달합니다.
C#에서 IntsCollection 객체를 사용하는 예:
 
for( int i = 0; i < Document.Pages.Count; i++ )
{
 if( Document.Pages[i].PageStructureOutOfDate )
 {
  pageIndices.Add( i );
 }
}
// 생성한 페이지 인덱스 컬렉션을 처리 메서드에 전달합니다
if( pageIndices.Count > 0 || Document.DocumentStructureOutOfDate )
{
 Document.SynthesizePages( pageIndices, null );
}

하위 객체 컬렉션

또 다른 유형은 특정 부모 객체에 속한 하위 객체의 컬렉션을 나타냅니다. 이러한 컬렉션은 부모 객체가 존재하는 동안 유지됩니다. 이런 컬렉션을 통해 부모 객체의 하위 객체를 추가하거나 제거할 수 있습니다. 컬렉션에 요소를 추가하면 내부적으로 새 객체가 생성된 후 컬렉션에 추가됩니다. 이러한 컬렉션의 예로는 DictionaryDescriptions(사전 설명 객체의 컬렉션), BaseLanguages(기본 언어의 컬렉션)가 있습니다. 이러한 컬렉션을 사용하려면 다음과 같이 합니다.
  1. 부모 객체의 속성을 통해 컬렉션을 가져옵니다. 예를 들어, 인식 언어의 기본 언어 컬렉션에 액세스하려면 BaseLanguage 객체의 DictionaryDescriptions 속성을 사용합니다.
  2. 읽기 전용 Count, Element 속성, 그리고 Item 메서드를 사용해 컬렉션을 순회합니다. 첫 번째는 컬렉션에 실제로 포함된 요소 수를 반환하고, 두 번째와 세 번째는 지정된 인덱스의 요소를 반환합니다. Element 속성을 사용하면 C#에서 [] 연산자로 컬렉션의 요소에 액세스할 수 있습니다.
  3. 필요한 경우 AddNew 메서드를 사용해 컬렉션에 새 요소를 추가합니다. 컬렉션마다 AddNew 메서드의 구문은 조금씩 다를 수 있지만, 기능은 모두 같습니다. 즉, 새 컬렉션 요소를 생성해 컬렉션에 추가합니다. 요소는 DeleteAt, DeleteAll 메서드로 삭제할 수 있습니다.
C#에서 DictionaryDescriptions 객체를 사용하는 예:
FREngine.IEngine Engine = null;
FREngine.IBaseLanguage baseLanguage = null;
// Engine을 초기화하고 텍스트 언어의 기본 언어를 가져옵니다
...
// 기본 언어의 사전 설명 컬렉션을 가져오고 모든 항목을 제거합니다
IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;
dictionaryDescriptions.DeleteAll();
// 사용자 사전 설명을 만들고 컬렉션에 추가합니다
IDictionaryDescription dictionaryDescription = dictionaryDescriptions.AddNew( DictionaryTypeEnum.DT_UserDictionary );

읽기 전용 컬렉션

일부 하위 객체 컬렉션은 읽기 전용입니다. 이는 편집 메서드가 없다는 의미로, 요소를 반복해서 확인하고 볼 수만 있습니다. 이러한 컬렉션의 예로는 PredefinedLanguages – 사전 정의된 언어 컬렉션, Paragraphs – 텍스트의 단락 컬렉션이 있습니다. 이러한 컬렉션의 요소를 확인하려면:
  1. 부모 객체의 속성을 통해 해당 컬렉션을 가져옵니다. 예를 들어, 텍스트의 단락 컬렉션에 접근하려면 Text 객체의 Paragraphs 속성을 사용합니다.
  2. 읽기 전용 Count 및 Element 속성과 Item 메서드를 사용하여 컬렉션을 반복합니다. 첫 번째는 컬렉션에 실제로 포함된 요소 수를 가져오고, 두 번째와 세 번째는 지정된 인덱스의 요소를 가져옵니다. Element 속성은 C#에서 [] 연산자를 사용하여 컬렉션의 요소에 접근할 수 있게 합니다.
C#에서 Paragraphs 객체를 사용하는 예제:
FREngine.IEngine Engine = null;
FREngine.IBlock block = null;
// Engine 초기화, 문서 인식하고 레이아웃의 텍스트 블록 얻기
...
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;
}

사용 가능한 모든 컬렉션

아래는 FineReader Engine에서 사용할 수 있는 컬렉션의 전체 목록입니다. 일부 컬렉션에는 요소를 다루기 위한 추가 메서드가 제공됩니다. 자세한 내용은 아래 표를 참조하세요.

  • – 이 컬렉션에는 Find 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 Find 메서드가 추가로 있으며, AddNew 메서드는 Add 메서드로 대체됩니다.
  • – 이 컬렉션은 Dictionary이기도 하므로, Element 속성이 Value 속성으로 대체됩니다.
  • – 이 하위 객체 컬렉션은 동일한 유형의 다른 컬렉션과 다릅니다. AddNew 메서드가 없으며, 대신 상위 FRDocument 객체의 AddPage 메서드를 사용할 수 있습니다. 또한 DeleteAll 메서드가 없고, IndexOf, Remove Swap 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 DeleteAt 메서드가 없습니다.
  • – 이 컬렉션에는 AddNew 메서드 대신 AddFromFile 메서드 AddFromMemory (Windows) 메서드가 있습니다.
  • – 이 컬렉션에는 IndexOf 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 Find 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 IndexOf 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 Find 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 GetSourcePageIndex 메서드가 추가로 있습니다.
  • – 이 컬렉션에는 IndexOf, Merge, Split 메서드가 추가로 있습니다.
  • (Linux 및 Windows 전용) – 이 컬렉션은 객체가 아닌 열거형 상수를 포함한다는 점에서 다른 모든 컬렉션과 다릅니다. 또한 추가 Find 메서드를 제공합니다.
    • – 이 컬렉션에는 추가 Delete, Has 메서드가 있습니다.
    • – 이 컬렉션에는 추가 Delete, Has 메서드와 CustomMenuEnabled , StandardMenuEnabled 속성이 있습니다.

.NET에서 컬렉션 사용하기

모든 컬렉션 인터페이스는 IEnumerable 인터페이스에서 파생됩니다. 즉, 컬렉션을 다루기 위해 C#에서는 foreach 문을(Visual Basic에서는 for each를) 사용할 수 있습니다. 다만 foreach로 컬렉션을 사용할 때는 몇 가지 유의할 점이 있습니다. 예를 들어, 열거자는 컬렉션을 수정하는 데 사용할 수 없고 그 안의 데이터를 읽는 데만 사용할 수 있습니다. 자세한 내용은 msdn.microsoft.com의 설명을 참조하세요. 다음은 C#에서 FRPages 컬렉션과 함께 foreach를 사용하는 예입니다.
FREngine.IFRDocument document;
// 문서에 일부 페이지가 포함되어 있다고 가정합니다
...
foreach( FREngine.IFRPage page in document.Pages ) {
 // 페이지를 처리합니다
}