C# のサンプルと情報は、Windows 版 FRE にのみ適用されます。
ABBYY FineReader Engine には、主に 3 種類のコレクションがあります。
- 一時コレクション (既存のオブジェクトへの参照のコレクション)
- 子オブジェクトのコレクション
- 子オブジェクトの読み取り専用コレクション
このページでは、次の内容を確認できます。
-
各種類のコレクションの操作方法
-
利用可能なすべてのコレクションの一覧を確認する方法
-
Windows 版 FRE の .NET でコレクションを操作する方法
この型のコレクションは、既存のオブジェクトへの参照をまとめたコレクションです。これらは一時的なコレクションで、通常は各種パラメーターのセットを必要とするメソッドに渡すために使用されます。このコレクションを作成し、要素を追加し (要素は既存のオブジェクトへの参照として追加されます) 、必要なメソッドに渡した後でコレクション自体は破棄しますが、追加されたオブジェクトはそのまま残ります。このようなコレクションの名前には Collection という接尾辞が付きます (例: StringsCollection、IntsCollection) 。
この型のコレクションを扱うには:
- Engine オブジェクトの対応する作成メソッドを使用してコレクションを作成します。たとえば、
IntsCollection オブジェクトの場合は CreateIntsCollection メソッドを使用します。これらのコレクションは、一部のメソッドの戻り値となることもあります。
- Add メソッドを使用して、既存のオブジェクトをコレクションに追加します。コレクションは、読み取り専用の
Count プロパティ、読み書き可能な Element プロパティ、および Item メソッドを使って反復処理できます。1 つ目はコレクションに実際に含まれている要素数を取得し、2 つ目と 3 つ目は指定したインデックスの要素にアクセスするためのものです。Element プロパティを使用すると、C# では [] 演算子を使ってコレクションの要素にアクセスできます。
- 必要に応じて、コレクションの他のメソッド InsertAt、DeleteAt、DeleteAll を使用してコレクションを変更します。
- そのコレクションを、パラメーターとして必要とするメソッドに渡します。
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 (dictionary description オブジェクトのコレクション) や BaseLanguages (基本言語のコレクション) があります。
このようなコレクションを使用するには:
- 親オブジェクトのプロパティを介してコレクションを取得します。たとえば、認識言語の基本言語のコレクションにアクセスするには、BaseLanguage オブジェクトの DictionaryDescriptions プロパティを使用します。
- 読み取り専用の Count および Element プロパティと、Item メソッドを使用してコレクションを反復処理します。1つ目はコレクションに実際に含まれている要素数を取得し、2つ目と3つ目は指定した インデックス の要素を取得します。Element プロパティを使用すると、C# で
\[\] 演算子を使ってコレクションの要素にアクセスできます。
- 必要に応じて、AddNew メソッドを使用して新しい要素をコレクションに追加します。コレクションごとに AddNew メソッドの構文は多少異なる場合がありますが、これらのメソッドはすべて同じ処理を行います。つまり、新しいコレクション要素を作成してコレクションに追加します。要素は DeleteAt、DeleteAll メソッドを使用して削除できます。
C# で DictionaryDescriptions オブジェクトを操作する例:
FREngine.IEngine Engine = null;
FREngine.IBaseLanguage baseLanguage = null;
// Engineを初期化し、テキスト言語の基本言語を取得する
...
// 基本言語のdictionary descriptionのコレクションを取得し、すべての項目を削除する
IDictionaryDescriptions dictionaryDescriptions = baseLanguage.DictionaryDescriptions;
dictionaryDescriptions.DeleteAll();
// ユーザーdictionary descriptionを作成し、コレクションに追加する
IDictionaryDescription dictionaryDescription = dictionaryDescriptions.AddNew( DictionaryTypeEnum.DT_UserDictionary );
子オブジェクトのコレクションの中には、読み取り専用のものがあります。つまり、これらには編集用のメソッドがなく、要素を反復処理して参照することしかできません。このようなコレクションの例としては、PredefinedLanguages (定義済み言語のコレクション) や Paragraphs (テキストの段落のコレクション) があります。
このようなコレクションの要素を参照するには:
- 親オブジェクトのプロパティからコレクションを取得します。たとえば、テキストの段落のコレクションにアクセスするには、Text オブジェクトの Paragraphs プロパティを使用します。
- 読み取り専用の Count プロパティと Element プロパティ、および Item メソッドを使用してコレクションを反復処理します。1 つ目はコレクションに実際に含まれている要素数を取得し、2 つ目と 3 つ目は指定した インデックス の要素を取得します。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 メソッドに置き換えられています。
- – このコレクションはディクショナリでもあるため、
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プロパティがあります。
|
すべてのコレクション インターフェイスは、IEnumerable インターフェイスから派生しています。つまり、C# では foreach ステートメント (Visual Basic では for each) を使用してコレクションを操作できます。ただし、foreach を使ってコレクションを扱う場合には、いくつか注意すべき点があります。たとえば、列挙子はコレクションを変更するためには使用できず、含まれているデータを読み取るためにのみ使用できます。詳細については、msdn.microsoft.com の注記を参照してください。
以下は、C# で FRPages コレクションに対して foreach を使用する例です。
FREngine.IFRDocument document;
// この document にはいくつかのページが含まれているものとします
...
foreach( FREngine.IFRPage page in document.Pages ) {
// page に対して何らかの処理を行います
}