FormSubmit.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.AcroForms
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.Actions

'' このサンプルは、ユーザーが送信できる AcroForm PDF を作成する方法を示します。
'' ここでは、その内容をデモサーバーに送信します。サーバーはそのデータを受信し、
'' 特別な形式で返送します。
Public Class FormSubmit
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()

        Dim rc = Util.AddNote(
            "このサンプルでは、Submit ボタンは ActionSubmitForm アクションに関連付けられており、" +
            "URL はサンプルサーバー上で実行されている POST ハンドラを指しています。" +
            "フォームが送信されると、そのハンドラは入力されたフォームからフォームのフィールド名と" +
            "フィールド値のコレクションを受け取り、それをシンプルな HTML ページに返します。" +
            "このサンプルをダウンロードした場合、正常に実行するには、独自のハンドラを設定し、" +
            "[送信]ボタンアクションの URL をそのハンドラを指すように変更する必要があります。",
            page)

        Dim g = page.Graphics
        Dim tf = New TextFormat() With {.Font = Util.getFont(), .FontSize = 12}
        Dim ip = New PointF(72, rc.Bottom + 36)
        Dim fldOffset = 72.0F * 2 + 46
        Dim fldHeight = tf.FontSize * 1.2F
        Dim dY = 32.0F

        '' テキストフィールド。
        g.DrawString("お名前(姓):", tf, ip)
        Dim fldFirstName = New TextField() With {.Name = "LastName", .Value = "吉良"}
        fldFirstName.Widget.Page = page
        fldFirstName.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldFirstName.Widget.DefaultAppearance.Font = tf.Font
        fldFirstName.Widget.DefaultAppearance.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldFirstName)
        ip.Y += dY

        '' テキストフィールド。
        g.DrawString("お名前(名):", tf, ip)
        Dim fldLastName = New TextField() With {.Name = "FirstName", .Value = "富似雄"}
        fldLastName.Widget.Page = page

        fldLastName.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldLastName.Widget.DefaultAppearance.Font = tf.Font
        fldLastName.Widget.DefaultAppearance.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldLastName)
        ip.Y += dY

        '' チェックボックス。
        g.DrawString("メールマガジンの配信登録:", tf, ip)
        Dim fldCheckbox = New CheckBoxField() With {.Name = "Subscribe", .Checked = True}
        fldCheckbox.Widget.Page = page
        fldCheckbox.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, fldHeight, fldHeight)
        doc.AcroForm.Fields.Add(fldCheckbox)
        ip.Y += dY

        '' マルチラインテキストボックス。
        g.DrawString("付加情報:", tf, ip)
        Dim fldAdditionalInformation = New TextField() With {.Name = "AdditionalInformation", .Multiline = True}
        fldAdditionalInformation.Widget.Page = page
        fldAdditionalInformation.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight * 2)
        fldAdditionalInformation.Widget.DefaultAppearance.Font = tf.Font
        fldAdditionalInformation.Widget.DefaultAppearance.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldAdditionalInformation)
        ip.Y += dY * 2

        '' フォーム送信ボタン。
        Dim btnSubmit = New PushButtonField()
        btnSubmit.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72, fldHeight)
        btnSubmit.Widget.ButtonAppearance.Caption = "送信"
        btnSubmit.Widget.Highlighting = HighlightingMode.Invert
        btnSubmit.Widget.Page = page

        '' 送信用の URL。
        btnSubmit.Widget.Activate = New ActionSubmitForm("/Samples/HandleFormSubmitFields")
        doc.AcroForm.Fields.Add(btnSubmit)

        '' フォームリセットボタン。
        Dim btnReset = New PushButtonField()
        btnReset.Widget.Rect = New RectangleF(ip.X + fldOffset + 72 * 1.5F, ip.Y, 72, fldHeight)
        btnReset.Widget.ButtonAppearance.Caption = "リセット"
        btnReset.Widget.Highlighting = HighlightingMode.Invert
        btnReset.Widget.Activate = New ActionResetForm()
        btnReset.Widget.Page = page
        doc.AcroForm.Fields.Add(btnReset)
        ip.Y += dY
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class