跳轉到主要內容
Visual Components 僅在 Windows 版 FRE 中提供。
建立具有使用者介面的應用程式時,您可以使用 ABBYY FineReader Engine 的 Visual Components。Visual Components 提供可直接使用的模組,讓您為 OCR 應用程式建構自己的使用者介面。 您可以向應用程式的使用者顯示正在處理的文件、讓使用者驗證識別結果,以及編輯已識別的文字。Visual Components 在各種處理情境中都很實用。例如,在 Document Conversion 情境中可提供文字編輯功能,而在 Field-Level Recognition 情境中,驗證功能則特別實用。 讓我們從使用者介面的角度來看看這個簡單的 OCR 應用程式。文件會經過數個處理步驟:
  1. 開啟影像
您可以向使用者顯示已開啟的影像,並允許使用者在處理中文件的各頁之間切換瀏覽。
  1. 識別
若要從文件擷取文字資料,必須先對文件進行識別。您可以向使用者顯示已識別的文字,並允許其編輯文字。
  1. 驗證
已識別的文字可能需要驗證。您可以同時向使用者顯示來源影像與已識別的文字,以便進行比對。
  1. 匯出
已識別的文件可以儲存為適當的格式,或在外部應用程式中開啟。 以下將詳細說明 ABBYY FineReader Engine Visual Components 的使用方式。
Visual Components 需要 Microsoft Windows Common Controls 6.0 或更新版本。
Visual Studio 可讓您將 ActiveX 控制項插入對話方塊。您可以將 Visual Components 新增至 Toolbox 視窗 (可從 View 功能表開啟 Toolbox) ,並使用這些元件:
  1. 在 Tools 功能表上,按一下 Choose Toolbox Items (或 Add/Remove Toolbox Items) 。
  2. 在開啟的對話方塊中,按一下 COM Components 索引標籤,然後選取 ABBYY DocumentViewer、ABBYY ImageViewer、ABBYY ZoomViewer、ABBYY TextEditor 和 ABBYY TextValidator 元件。
  3. 按一下 OK。所選項目的圖示現在會出現在 Toolbox 中。您可以將每個 Visual Component 圖示拖放到設計檢視介面上。這樣也會在目前作用中的專案檔中加入建立 Visual Component 執行個體所需的基本程式碼。
  4. 將 Visual Component 新增至表單後,您可以設定其在 Visual Studio 中可用的屬性。例如,每個元件的 SettingsPath 屬性都應在設計階段指定。
Visual Studio 設計工具不支援 64 位元 ActiveX 控制項。因此,您無法將 64 位元 Visual Components 新增至 Windows Form 應用程式。這是已知行為;Microsoft ActiveX 控制項也有類似問題,例如 http://support.microsoft.com/kb/980533/en-us 中所述。為了提供此問題的因應方法,如果您在 64 位元系統上選擇安裝供開發人員使用的 Visual Components,FineReader Engine 會同時安裝 32 位元和 64 位元 Visual Components。在這種情況下,您可以在 Visual Studio 設計工具中使用元件的 32 位元版本。使用 Visual Components 的 64 位元應用程式則不需要安裝 32 位元 Visual Components。
Component Synchronizer 元件可讓您在應用程式中同步 Visual Components。這表示所有檢視和編輯操作都將在所有已連接的元件中同步處理。若要同步 Visual Components:
  1. 在表單載入時,建立新的 ComponentSynchronizer 物件。
  2. 使用 ComponentSynchronizer 物件的 DocumentViewer、ImageViewer、ZoomViewer、TextEditor、TextValidator 屬性,將元件連接至同步器。
當元件透過 API 連接至同步器後,Component Synchronizer 的運作方式請參閱 Component Synchronizer 的運作原理

C#

private void VisualComponentsForm_Load(object sender, System.EventArgs e)
{
 // 將元件附加至同步器
 Synchronizer = new FineReaderVisualComponents.ComponentSynchronizerClass();
 Synchronizer.DocumentViewer = ( FineReaderVisualComponents.DocumentViewer ) documentViewer.GetOcx();
 Synchronizer.ImageViewer = ( FineReaderVisualComponents.ImageViewer ) imageViewer.GetOcx();
 Synchronizer.ZoomViewer = ( FineReaderVisualComponents.ZoomViewer ) zoomViewer.GetOcx();
 Synchronizer.TextEditor = ( FineReaderVisualComponents.TextEditor ) textEditor.GetOcx();
}
若要開始使用 ABBYY FineReader Engine,您需要建立 Engine 物件。若要建立 Engine 物件,可使用 InitializeEngine 匯出函式。另請參閱載入 Engine 物件的其他方式。您可以在影像載入或表單初始化期間載入 Engine 物件。

C#

[DllImport( "FREngine.dll", CharSet=CharSet.Unicode ), PreserveSig]
private static extern int InitializeEngine(
 String customerProjectID,
 String licensePath,
 String licensePassword,
 String FREngineDataFolder,
 String FREngineTempFolder,
 Bool lsSharedCPUCoresMode,
 ref FREngine.IEngine engine );
private void loadEngine()
{
 int hresult = InitializeEngine( "<CustomerProjectID>",
 "<licensePath>",
 "<licensePassword>",
 "<FREngineDataFolder>",
 "<FREngineTempFolder>",
 false,
 ref Engine );
 Marshal.ThrowExceptionForHR( hresult );
}
若要在 Visual Components 中顯示影像,您必須先開啟它。您可以依照下列程序開啟影像:
  1. 若要載入單一文件的影像,請建立 FRDocument 物件並向其新增影像。您可以選擇下列其中一種方式:
  2. 使用 ComponentSynchronizer 物件的 Document 屬性,將文件附加至 Component Synchronizer。
此程序可處理用於開啟影像之按鈕的「點擊」事件。

C#

private void openImage( string imageFileName )
{
 // 載入 ABBYY FineReader Engine
 if( Engine == null )
 {
  loadEngine();
  Engine.ParentWindow = this.Handle.ToInt32();
  Engine.ApplicationTitle = this.Text;
 }
 // 開啟影像
 Document = Engine.CreateFRDocumentFromImage( imageFileName, null );
 // 使用同步器將影像附加至 Visual Components
 Synchronizer.Document = Document;
}
在 Visual Components 中,可使用元件提供的命令或 FineReader Engine API 來呼叫影像識別功能 (例如,FRDocument object 的 Process method) 。您可以實作以下識別程序:
  1. 使用 FRDocument object 的方法識別文件。
  2. 文件並非透過 Visual Components GUI 變更,因此您需要將這些變更通知 Visual Components。請對文件中的每個頁面使用 FRPage object 的 Update method。
此程序可處理觸發識別功能之按鈕的「on click」事件。

C#

private void recognizeDocument()
{
 // 識別並合成整份文件
 Document.Process( Synchronizer.ProcessingParams );
 // 將變更通知 Visual Components
 for( int i = 0; i < Document.Pages.Count; i++ )
 {
  Document.Pages[i].Update();
 }
}
可使用 Text Validator component 驗證已識別的資料。它提供可讓您檢查字元是否已正確識別,並在必要時加以更正的使用者介面。您可以實作以下驗證程序:
  1. 將 Text Validator component 新增至目前的表單,或為其建立新的表單。
  2. 將 Text Validator component 附加至 Component Synchronizer。使用 ComponentSynchronizer object 的 TextValidator property。
  3. 使用 TextValidator object 的 Spell method 啟動驗證程序。

C#

private void validateButton_Click(object sender, System.EventArgs e)
{
 if( validatorForm == null )
 {
  // 建立新的驗證表單
  validatorForm = new ValidatorForm();
  validatorForm.Owner = this;
  // 將驗證器附加至 synchronizer
  Synchronizer.TextValidator = ( FineReaderVisualComponents.TextValidator ) validatorForm.TextValidator.GetOcx();
  validatorForm.Show();
  // 驗證附加文件中已識別的文字
  validatorForm.TextValidator.Spell( null );
 }
}
可使用 Document Viewer 提供的命令,或 FineReader Engine API 來儲存已識別的文件。例如,可使用 FRDocument object 的 Export method,並將 FileExportFormatEnum 常數作為其中一個參數。完成 FRDocument object 的操作後,請釋放此 object 所使用的所有 resources。請使用 IFRDocument::Close method。此程序可處理觸發匯出功能之按鈕的「on click」事件。

C#

// 將已識別的文件儲存為 RTF
Document.Export( "<File name>", FREngine.FileExportFormatEnum.FEF_RTF, null );
// 釋放 FRDocument object
Document.Close();
完成 ABBYY FineReader Engine 的操作後,您需要卸載 Engine object。若要這麼做,請使用匯出的 DeinitializeEngine function。
我們建議您先釋放 Component Synchronizer,再取消初始化 Engine。
此程序可處理關閉應用程式視窗之按鈕的「on click」事件。

C#

[DllImport( "FREngine.dll", CharSet=CharSet.Unicode ), PreserveSig]
private static extern int DeinitializeEngine();
private void unloadEngine()
{
 if( Engine != null )
 {// 如果已載入 Engine,則將其卸載
  Engine = null;
  int hresult = DeinitializeEngine();
  Marshal.ThrowExceptionForHR( hresult );
 }
}
您可以在 VisualComponents 範例中找到上述程序的實作範例。

另請參閱

自訂 Visual Component 的快顯功能表和工具列