跳轉到主要內容
處理文件時,ABBYY FineReader Engine 會先分析其版面配置,並偵測文件頁面上的特定區域。這些區域稱為「區塊」。區塊會決定影像區域應如何辨識,以及辨識的順序。 在 ABBYY FineReader Engine 中,Layout 物件用來儲存區塊和已辨識的文字。基本的文件處理情境會在代表目前處理中文件的 FRDocument 物件內操作版面配置。若要存取文件頁面的版面配置,請使用 IFRPage::Layout 屬性。 如果 Windows 或 Linux 版 FRE 使用者採用以處理序外伺服器形式載入的 Engine 物件,則可透過下列方式加快 Layout 物件的逐項走訪速度: 對於 Windows:
  1. 使用 OutprocLoader 物件處理文件,並取得每一頁的版面配置。使用 SaveToStream 方法將取得的版面配置寫入資料串流。
  2. 使用 InprocLoader 物件,透過 CreateLayoutFromStream 方法還原原始版面配置的副本。後續可使用此副本逐項走訪版面配置內容。
對於 Linux:
  1. 使用以處理序外伺服器形式載入的 Engine 物件處理文件,並取得每一頁的版面配置。使用 SaveToArray 方法將取得的版面配置寫出為位元組陣列。
  2. 使用以原生方式載入的 Engine 物件 (亦即從 libFREngine.so 程式庫載入至目前處理序中) ,透過您實作的 IReadStream 介面讀取取得的位元組陣列。
  3. 使用以原生方式載入的 Engine 物件,透過 CreateLayoutFromStream 方法還原原始版面配置的副本。後續可使用此副本逐項走訪版面配置內容。
您從 FRPage 的版面配置取得的區塊,在對該頁面或其所屬文件呼叫任何執行版面分析的方法 (例如 AnalyzeProcess) 之後,都會失效。分析完成後,請在新的版面配置中找出所需的區塊,並繼續使用新的 Block 物件進行作業。

版面配置區塊

Layout 物件 透過 Blocks 和 BlackSeparators 屬性 提供版面配置結構的存取。這兩個 屬性 都可存取 LayoutBlocks 子 物件,也就是代表區塊集合的子 物件。前者是指主要的版面配置區塊集合,其中包含文字、表格、圖片、條碼和核取記號。後者則是指分隔線區塊的集合。分隔線是在頁面版面分析期間偵測到的黑線,在合成與匯出時可用於更精確地重建頁面版面配置。 此外,您也可以透過 Layout 物件 的 SortedBlocks 屬性,以邏輯排序的順序取得區塊。 每個區塊都有自己的區域,而區域由數個矩形組成。區域由 Region 物件 表示。 依據區塊中所含資料的類型,區塊可分為不同類型,而每種類型都有各自特定的 屬性。這些 屬性 可透過對應的區塊類型 物件 存取,而這些 物件 可使用 Block 物件 的 methods 取得。對應的區塊類型 interfaces 衍生自 IBlock interface,並繼承其所有 屬性。可用的區塊類型如下:
這種類型的區塊對應於被辨識為格式化文字的影像區域。此區塊的 屬性 可透過 TextBlock 物件 存取。此 物件 也可存取由該區塊圈選之影像部分中的辨識文字。
這種類型的區塊對應於表格。此類型的區塊只能是矩形 (區域僅包含一個矩形) 。此區塊類型的 屬性 可透過 TableBlock 物件 存取。表格結構由兩組表格分隔線集合 (水平與垂直的 TableSeparators objects) 以及表格儲存格集合 (TableCells 物件) 描述。每個表格儲存格都會視為某種類型的區塊。辨識文字是單一儲存格的 屬性,而不是整個表格的 屬性。如果儲存格是圖片,則儲存格邊界內的影像不會被辨識,而會在辨識文字中顯示為圖片。表格分隔線可能有不同的類型。分隔線類型是針對分隔線上位於其與其他分隔線最近交點之間的線段所定義。分隔線可分為以下類型:
  • Absent。此類型會指派給那些在合併儲存格中「應該穿過」的表格分隔線。
  • Unknown。此類型預設會指派給每一條新加入的表格分隔線。
  • Invisible。此類型會指派給因表格結構分析而建立的「虛擬」表格分隔線,其位置是原始表格中雖然沒有分隔線,但在邏輯上應該存在分隔線之處。
  • Explicit。此類型的表格分隔線會出現在原始表格黑線所在的位置。
  • Multiple。這種類型的分隔線可能因表格編輯而出現。 Table
這種類型的區塊代表被視為點陣圖片的影像區域。此區塊所圈選的影像部分不會被辨識,且區塊會「原樣」匯出。此區塊類型的 屬性 由 RasterPictureBlock 物件 表示。
這種類型的區塊代表被視為向量圖片的影像區域。只有在頁面已使用 IPageAnalysisParams::DetectVectorGraphics 屬性 設為 TRUE 進行分析時,版面配置中才可能出現此類型的區塊。通常,背景圖片會被辨識為此類型的區塊。此區塊類型的 屬性 由 VectorPictureBlock 物件 表示。
影像中由此類型區塊框選的部分會被視為條碼。ABBYY FineReader Engine 可辨識多種類型的條碼,也能自動偵測條碼類型。已辨識條碼中讀取的資訊,可透過由 BarcodeBlock 物件表示的條碼區塊專屬屬性存取。
影像中由此類型區塊框選的部分會被視為核取記號。它對應於被辨識為核取記號的影像區域。已辨識核取記號中讀取的資訊,可透過由 CheckmarkBlock 物件表示的核取記號區塊專屬屬性存取。
影像中由此類型區塊框選的部分會被視為核取記號群組。它對應於被辨識為核取記號群組的影像區域。已辨識核取記號群組中讀取的資訊,可透過由 CheckmarkGroup 物件表示的核取記號群組區塊專屬屬性存取。
影像中由此類型區塊框選的部分會被視為分隔線。分隔線是在頁面版面分析期間偵測到的線條,可能是表格的一部分、用來分隔不同文字元素的線條等。分隔線的座標和類型可透過 SeparatorBlock 物件存取。
影像中由此類型區塊框選的部分會被視為分隔線群組。它對應於被辨識為一組分隔線的影像區域。分隔線群組通常包含四條構成矩形的分隔線。例如,表格邊框的四條線會被辨識為分隔線群組。每個分隔線群組都包含一組分隔線區塊集合。分隔線群組區塊的專屬屬性由 SeparatorGroup 物件表示。
此外,還有自動分析區塊,僅用於 Visual Components (Windows 版 FRE 的一部分) 。這些區塊無法透過 FineReader Engine API 建立或辨識,只能透過 ILayout::VisualBlocks 屬性使用。

手動新增區塊

系統會在版面分析期間自動於頁面上偵測區塊,但您也可以手動繪製區塊。在此情況下:
  1. 開啟 FRPage 物件,並透過 Layout 屬性取得頁面版面配置。
  2. 使用 IEngine::CreateRegion 方法為區塊建立 Region 物件,並使用 IRegion::AddRect 方法將矩形新增至其中。
  3. 建立所需類型的區塊,並使用 LayoutBlocks 物件的 AddNew 方法,將其新增至版面配置區塊集合。
  4. 設定區塊所需的參數 (使用與區塊類型對應的區塊屬性物件) 。

變更區塊類型

區塊類型是在建立時決定的,之後無法變更。如果您需要變更區塊類型,則必須刪除該區塊,並在完全相同的位置建立另一個所需類型的區塊:
  1. 使用 IEngine::CreateRegion 方法建立 Region 物件,然後使用 IRegion::CopyFrom 方法,複製您要取代之區塊的區域。
  2. 呼叫 ILayoutBlocks::DeleteAt 方法,從版面配置中刪除舊區塊。
  3. 建立所需類型的新區塊,並使用 LayoutBlocks 物件的 AddNew 方法,將其新增至版面配置區塊集合中。將您從舊區塊複製的 Region 作為必要參數之一傳入。

另請參閱

辨識核取記號 處理文字