跳轉到主要內容
元素的假設可以是「已找到」或「未找到」。依一般規則,已找到的假設是根據一個或多個影像物件或其片段建立(例外情況是 White Gap 元素,它可能完全不包含任何影像物件)。 針對簡單元素,已找到的假設一律是一個連續區域。White Gap、Separator 和 Barcode 元素的假設一律是單一矩形。 如果假設是根據一組偵測到的影像物件建立的,例如 Paragraph 元素的假設,其假設區域會根據這些偵測物件的 Rectangle 陣列來建立。以此方式建立的區域可以透過假設的 Region 方法取得。當在影像上顯示假設區域,或在此假設基礎上建立區塊時,該區域邊界並不會完全貼合每個矩形的邊界;相反地,搜尋區域的邊界會被平滑化,以獲得較佳的視覺化效果。以此方式建立的區域可以透過假設的 SimplifiedRegion 方法取得。RegionSimplifiedRegion 方法可以在 Search Conditions 區段中使用(描述元素的搜尋區域時),也可以在描述區塊屬性並使用已找到元素時使用。 如果某個假設未找到,它就與其搜尋區域的模糊矩形相重合。在影像上顯示未找到的假設時,程式會繪製該模糊矩形的外部矩形。 任何假設的 Left、top、Right 和 Bottom 邊界都是範圍。對於每個已找到的假設,該範圍會退化為一個點,即 Left.Start = Left.Endtop.Start = top.End 等等。對於未找到的假設,其邊界的範圍與其搜尋區域的範圍相同。 在區塊和元素之對應對話方塊的程式碼中存取已產生的假設及其屬性,可為設定 FlexiLayout 提供額外工具。元素假設可以透過元素名稱來存取。若要在 Hypotheses Evaluation 區段中存取目前元素的假設,只需使用該屬性的名稱即可。 假設及其屬性僅能以唯讀模式存取。元素的假設可以在 Search ConditionsHypotheses Evaluation 區段,以及欄位的 Code Editor 區段中存取。在 Search Conditions 中,可以存取 Elements 樹狀結構中位於目前元素之上的所有元素所產生的假設(及其屬性)。在 Hypotheses Evaluation 中,可以存取 Elements 樹狀結構中位於目前元素之上的元素所產生的假設,以及目前元素本身的假設。在欄位的 Code Editor 中,可以存取所有元素的假設(及其屬性)。 下表列出了適用於所有元素類型之假設的屬性。
PropertyDescription
Logic IsNull()是否為空值假設(如果已偵測到該元素,則該假設的 IsNull 屬性為 True)。
Logic IsFound()是否為非空假設(如果尚未偵測到該元素,則該假設的 IsNull 屬性為 False)。等同於 IsNull
XInterval Left()假設在全域座標中的左邊界(水平方向範圍)。
YInterval top()假設在全域座標中的上邊界(垂直方向範圍)。
XInterval Right()假設在全域座標中的右邊界(水平方向範圍)。
YInterval Bottom()假設在全域座標中的下邊界(垂直方向範圍)。
XInterval XCenter()假設中心點在全域座標中的 X 座標(水平方向範圍)。
YInterval YCenter()假設中心點在全域座標中的 Y 座標(垂直方向範圍)。
DistInterval Width()假設在全域座標中的寬度(距離區間)。
DistInterval Height()假設在全域座標中的高度(距離區間)。
FuzzyRect FuzzyRect()假設在全域座標中的模糊矩形。
Rect Rect()在全域座標中外接於該假設的矩形。與模糊矩形的外部矩形一致。
Region Region()假設在全域座標中的區域。此方法不支援 Group 元素。
Region SimplifiedRegion()假設在全域座標中的區域,並加以簡化以獲得更佳的視覺呈現。此方法不支援 Group 元素。
ImageObjectSet Set()構成該假設的影像物件。
ImageObjectSet ExcludeSet()位於由 Exclude 類型方法自搜尋區域中排除之區域內的影像物件。
RectArray Rects()假設中所包含之矩形的陣列。對多數元素而言,其與包住已偵測物件的矩形陣列一致。對 White Gap 與 Region 元素則不會有可用的物件。
Int HypothesesCount()在搜尋區域中可為該元素建立的假設數量。僅當文件中頁面的最小與最大數量都設定為 1(即偵測到的文件只有一個頁面)時才能使用此函式。若在多頁文件上使用此函式,在匹配 FlexiLayout 時會回傳錯誤。
PageInterval Pages()可找到該假設的頁面範圍。
PageArea PageAreaGlobal( Int PageNumber )傳回位於指定頁面上、以全域座標表示的該假設部分。
PageArea PageAreaLocal( Int PageNumber )傳回位於指定頁面上、以該頁面本地座標表示的該假設部分。

呼叫假設屬性的範例程式碼

在存取簡單或 Group 元素的假設屬性之前,請先確定要存取的假設不是空假設(呼叫其 IsNull 屬性)。存取空假設(對應於未偵測到的元素)的屬性會導致錯誤。 假設在您的文件上有一個條碼形式的識別碼,而且您希望 FlexiLayout 僅匹配條碼值為 1556897142240 的文件。請按照下列步驟來達成預期結果。在描述該條碼屬性與搜尋限制的元素的 Hypotheses Evaluation 區段中,撰寫下列程式碼:
if value != "1556897142240" then Quality: 0;
按一下 ApplyCheck Code。編譯器不會偵測到任何語法錯誤,看起來程式碼沒問題。然而,如果你嘗試將 FlexiLayout 與「範例 1」中的任何頁面進行比對,會顯示下列錯誤訊息:「元素 ‘MainGroup.IdentityNumber’ 中的錯誤,Advanced relations 區段:嘗試存取未定義的 hypothesis MainGroup.IdentityNumber。」 發生錯誤的原因如下。程式會為條碼元素找到一個 hypothesis,然後將條碼的值與程式碼中指定的值進行比較。如果這兩個值不同,則 Quality: 0; 程式碼會將該 hypothesis 的值重設為 0。接著會為此元素產生一個空的 hypothesis,程式也會對它檢查條件 value != "1556897142240"。由於現在不允許存取空 hypothesis 的值(它沒有這個屬性),程式便會顯示「…undefined hypothesis…」的錯誤訊息。 因此,你需要將程式碼調整如下:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
上述程式碼僅適用於必填元素。若為選填元素,則必須將程式碼調整如下:
if not IsNull then {
if value != "1556897142240" then Quality: 0;
}
else {Quality: 0;}
否則,只有實際假設的品質會被重設為 0。這會導致程式產生一個空假設,而對該空假設不會執行 “if not IsNull”。因此,最終(空)假設的品質將維持與在元素屬性中指定的值相同(如果保留預設值則為 0.97),而程式即使在沒有該元素的情況下,仍會繼續進行 FlexiLayout 的比對。 如果在程式碼中加入 else {Quality: 0;},則這行程式碼會對所有假設(包括空假設)執行,並且 FlexiLayout 的比對就會停止,因為在此元素處,整個假設鏈的品質也都會被重設為 0。

方法 Region Region() 與 Region SimplifiedRegion() 的比較

方法 Region Region()Region SimplifiedRegion() 可用來取得元素的區域,但方法 Region Region() 會取得精確的區域,而方法 Region SimplifiedRegion() 則會取得根據邊界座標建立的 Rectangle。