LEADTOOLSフォーム

フレームを表示

プロジェクトを開始して、入力済みフォームを処理する若干のcodeを追加するために、以下の手順をとります:

  1. Visual Studio .NETを開始します。
  2. チュートリアル(「一組のマスターフォームからフォームを認めること」)で作成したプロジェクトを開きます。
  3. ソリューションエクスプローラーで」ウィンドウ、「参照」フォルダの右クリックと選ばれた「参照の追加...「コンテキストメニューから。「参照の追加で...「ダイアログボックス、選択する」。NET」タブ、「#LEADTOOLS_INSTALLDIR#\Bin\Dotnet\Win32」フォルダに閲覧して、以下のDLLを選択します:
    • Leadtools.Forms.Processing.dll
    セレクトをクリックして、それからアプリケーションに上記のDLLを追加するために「OK」をクリックします
  4. Form1.csファイルの上で、以下の行を追加します:

    [C#]

    
                using Leadtools.Forms.Processing;
                
    

    [Visual Basic]

    
                Imports Leadtools.Forms.Processing
                
    
  5. Form1クラスに以下のメンバを追加します:

    [C#]

    
                //Create the processing engine
                FormProcessingEngine processingEngine = new FormProcessingEngine();
                
    
    [Visual Basic]
    
                'Create the processing engine
                Dim processingEngine As FormProcessingEngine = New FormProcessingEngine()
                
    
  6. フォームを処理するために、マスターフォームの上でフィールドを定義しなければなりません。各方面は、入力済みデータを抽出することを望むフォームの上で、領域を表します。このチュートリアルの場合、SDKで出荷されたW9フォーム(アメリカ版確定申告書類)用に2つのテキストフィールドが作成されます。フィールドの位置は、すでに決定されました。フォームにボタンを追加して、そのTextプロパティを「フィールドを作成します」に設定して、それからそれをダブルクリックして、そのハンドラに以下のcodeを追加します:

    [C#]

    
                processingEngine.Pages.Clear();
                //Create a new page for the form. In this case, we know the DPI
                //of the W9 form we ship is 150.
                FormPage formPage = new FormPage(1, 150, 150);
                TextFormField textField = new TextFormField();
                textField.Name ="Business Name";
                textField.Bounds = new LogicalRectangle(196,327, 1402, 40, LogicalUnit.Pixel);
                formPage.Add(textField);
                textField = new TextFormField();
                textField.Name = "Address";
                textField.Bounds = new LogicalRectangle(196, 496, 892, 35,LogicalUnit.Pixel);
                formPage.Add(textField); 
                //Add the page with the above defined fields to the engine
                processingEngine.Pages.Add(formPage);
                
    

    [Visual Basic]

    
                processingEngine.Pages.Clear()
                'Create a new page for the form. In this case, we know the DPI 'of the W9 form we ship is 150.
                Dim formPage As FormPage = New FormPage(1, 150, 150)
                DimtextField As TextFormField = New TextFormField()
                textField.Name ="Business Name"
                textField.Bounds = New LogicalRectangle(196, 327,1402, 40, LogicalUnit.Pixel)
                formPage.Add(textField) textField =New TextFormField()
                textField.Name = "Address"
                textField.Bounds =New LogicalRectangle(196, 496, 892, 35, LogicalUnit.Pixel)
                formPage.Add(textField)
                'Add the page with the above defined fields to the engine
                processingEngine.Pages.Add(formPage) 
                
    
  7. クラスに以下の関数を追加します。

    [C#]

    
                private void ProcessForm(RasterImage image,List<PageAlignment> alignment)
                {
                   processingEngine.OcrEngine= formsOCREngine;
                   string resultsMessage = String.Empty;
                   try
                   {
                         processingEngine.Process(image, alignment);
                         foreach(FormPage formPage in processingEngine.Pages)
                         {
                            foreach(FormField field in formPage)
                            {
                               if (field != null)
                               {
                                  resultsMessage = String.Format("{0}{1} = {2}{3}",
                                                                    resultsMessage,
                                                                        field.Name,
                                        (field.Result as TextFormFieldResult).Text,
                                                               Environment.NewLine); 
                                }
                             } 
                          }
                   }
                   catch (Exception ex)
                   {
                      MessageBox.Show(ex.Message);
                   }
                   if (String.IsNullOrEmpty(resultsMessage))
                      MessageBox.Show("No fields were processed", "FieldProcessing Results");
                   else
                      MessageBox.Show(resultsMessage, "Field ProcessingResults");
                }
                
    

    [Visual Basic]

    
                Private Sub ProcessForm(ByVal image As RasterImage, ByValalignment As List(Of PageAlignment))
                   processingEngine.OcrEngine = formsOCREngine 
                   Dim resultsMessage As String = String.Empty
                   Try 
                      processingEngine.Process(image, alignment)
                      For Each formPage As FormPage In processingEngine.Pages
                         For Each field As FormField In formPage 
                            If Not field Is Nothing
                            Then
                               resultsMessage = String.Format("{0}{1} = {2}{3}",
                                                                 resultsMessage,
                                                                     field.Name,
                                                                  (CType(IIf(TypeOf field.Result Is TextFormFieldResult, field.Result, Nothing),
                                                     TextFormFieldResult)).Text,
                                                            Environment.NewLine)
                            End If
                         Next field
                      Next formPage
                   Catch ex As Exception
                      MessageBox.Show(ex.Message)
                   End Try
                   If String.IsNullOrEmpty(resultsMessage) Then
                      MessageBox.Show("No fields were processed", "FieldProcessing Results")
                   Else
                      MessageBox.Show(resultsMessage, "Field ProcessingResults")
                   End If
                End Sub
                
    
  8. 下で示される「Recognizeフォーム」イベントハンドラのセクションを修正します(もしも(recognitionResult.Confidence≧80)を見つけます{...}、そして、下記の新型コードで、そのコンテンツを置換します)。

    [C#]

    
                if(recognitionResult.Confidence >= 80)
                {
                   List<PageAlignment> alignment = new List<PageAlignment>();
                   for (int k = 0; k < recognitionResult.PageResults.Count;k++)
                   {
                      alignment.Add(recognitionResult.PageResults[k].Alignment);
                   }
                   resultMessage = String.Format("This form has been recognized as a {0}",Path.GetFileNameWithoutExtension(masterFileName));
                   ProcessForm(image, alignment);
                   break;
                }
                
    
    [Visual Basic]
    
                If recognitionResult.Confidence >= 80 Then
                   Dim alignment As List(Of PageAlignment) = New List(OfPageAlignment)()
                   Dim k As Integer = 0
                   Do While k < recognitionResult.PageResults.Count
                      alignment.Add(recognitionResult.PageResults(k).Alignment)
                      k += 1
                   Loop
                   resultMessage = String.Format("This form has been recognized as a {0}",Path.GetFileNameWithoutExtension(masterFileName))
                   ProcessForm(image, alignment)
                   break
                End If
                
    
  9. プロジェクトを実行して、以下の手順を用いてそれをテストします。

    注意:「無効なファイルフォーマット」または「機能サポートされていません」例外に遭遇するならば、トピック無効なファイル形式/サポートされない機能を参照します。

    1. [フィールドを作成]ボタンをクリックすると、フォーム用に2つのサンプルテキストフィールドが作成されます。
    2. [マスターフォーム属性を作成]ボタンをクリックすると、マスターフォーム属性が作成されます。この手順は一度実行すればよいので、以前のチュートリアルでマスターフォーム属性を作成してあるのであれば、この手順は省略できます。
    3. [フォームを認識]ボタンをクリックすると、サンプルフォームがロードされ、フォームが認識され、定義済みフィールドが処理されます。
© 1991-2016のLEAD Technologies, Inc. All Rights Reserved.