C# 範例和相關資訊僅適用於 Windows 版 FRE。
ABBYY FineReader Engine 中有三種主要的集合類型:
- 暫時性集合 (現有物件參考的集合)
- 子物件集合
- 子物件的唯讀集合
在本頁中,您可以找到下列資訊:
-
如何使用各種類型的集合
-
如何檢視所有可用集合的清單
-
如何在 Windows 版 FRE 的 .NET 中使用集合
這類集合表示對現有物件參考的集合。這些集合是暫時性的,通常用於將各種參數集傳遞給需要它們的方法。您可以建立這種集合,將元素加入其中 (元素會以現有物件的參考形式加入) ,將其傳遞給所需的方法,然後銷毀該集合,而加入其中的物件仍會保留。這類集合的名稱都帶有 Collection 後綴 (例如 StringsCollection、IntsCollection) 。
若要使用這類集合:
- 使用 Engine 物件中對應的建立方法來建立集合。例如,對於 IntsCollection 物件,對應的方法是 CreateIntsCollection。這些集合也可能是某些方法的回傳值。
- 使用集合的 Add 方法,將現有物件加入集合。您可以透過其唯讀的 Count 屬性、可讀寫的 Element 屬性,以及 Item 方法來逐一存取集合。第一個可取得集合中實際包含的元素數量,第二個和第三個則可存取指定索引的元素。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 方法來逐一走訪集合。第一個會取得集合中實際包含的元素數量,第二個和第三個則會取得指定索引位置的元素。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 方法來逐一存取集合。第一個會取得集合中實際包含的元素數量,第二個和第三個則會取得指定索引位置的元素。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 方法。
- – 此集合以 AddFromFile 方法
和 AddFromMemory (Windows)
方法取代了 AddNew 方法。
- – 此集合具有額外的 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;
// 假設該文件包含一些頁面
...
foreach( FREngine.IFRPage page in document.Pages ) {
// 對該頁面執行某些操作
}