FormFields.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

'' テキストボックス、チェックボックス、プッシュボタンなど、
'' 各種フォームフィールドを作成する方法を示しています。
Public Class FormFields
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        Dim g = page.Graphics
        Dim tf = New TextFormat()
        tf.FontName = "Yu Gothic"
        tf.FontSize = 14
        Dim ip = New PointF(72, 72)
        Dim fldOffset = 72.0F * 2
        Dim fldHeight = tf.FontSize * 1.2F
        Dim dY = 32.0F

        '' テキストフィールド。
        g.DrawString("テキストフィールド", tf, ip)
        Dim fldText = New TextField()
        fldText.Value = "初期値を表示できます。"
        fldText.Widget.Page = page
        fldText.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldText.Widget.DefaultAppearance.Font = tf.Font
        fldText.Widget.DefaultAppearance.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldText)
        ip.Y += dY

        '' チェックボックス。
        g.DrawString("チェックボックス", tf, ip)
        Dim fldCheckbox = New CheckBoxField()
        fldCheckbox.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 fldRadio = New RadioButtonField()
        fldRadio.Value = 1
        fldRadio.Widgets.Add(New WidgetAnnotation(page, New RectangleF(ip.X + fldOffset, ip.Y, fldHeight, fldHeight)))
        fldRadio.Widgets.Add(New WidgetAnnotation(page, New RectangleF(ip.X + fldOffset, ip.Y + fldHeight * 1.2F, fldHeight, fldHeight)))
        fldRadio.Widgets.Add(New WidgetAnnotation(page, New RectangleF(ip.X + fldOffset, ip.Y + (fldHeight * 1.2F) * 2, fldHeight, fldHeight)))
        doc.AcroForm.Fields.Add(fldRadio)
        ip.Y = fldRadio.Widgets(fldRadio.Widgets.Count - 1).Rect.Y + dY

        '' マス目フィールド。
        g.DrawString("マス目フィールド", tf, ip)
        Dim fldCombText = New CombTextField()
        fldCombText.Value = "123"
        fldCombText.Widget.DefaultAppearance.FontSize = 12
        fldCombText.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldCombText.Widget.Page = page
        doc.AcroForm.Fields.Add(fldCombText)
        ip.Y += dY

        '' コンボボックス。
        g.DrawString("コンボボックス", tf, ip)
        Dim fldComboBox = New ComboBoxField()
        fldComboBox.Items.Add(New ChoiceFieldItem("選択肢1"))
        fldComboBox.Items.Add(New ChoiceFieldItem("選択肢2"))
        fldComboBox.Items.Add(New ChoiceFieldItem("選択肢3"))
        fldComboBox.SelectedIndex = 1
        fldComboBox.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldComboBox.Widget.Page = page
        doc.AcroForm.Fields.Add(fldComboBox)
        ip.Y += dY

        '' リストボックス。
        g.DrawString("リストボックス:", tf, ip)
        Dim fldListBox = New ListBoxField()
        fldListBox.Items.Add(New ChoiceFieldItem("リスト項目1"))
        fldListBox.Items.Add(New ChoiceFieldItem("リスト項目2"))
        fldListBox.Items.Add(New ChoiceFieldItem("リスト項目3"))
        fldListBox.SelectedIndexes = New Integer() {0, 2}
        fldListBox.MultiSelect = True
        fldListBox.CommitOnSelChange = True
        fldListBox.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 100, 50)
        fldListBox.Widget.Page = page
        doc.AcroForm.Fields.Add(fldListBox)
        ip.Y = fldListBox.Widget.Rect.Bottom - fldHeight + dY

        '' 署名フィールド。
        g.DrawString("電子署名:", tf, ip)
        Dim fldSignature = New SignatureField()
        fldSignature.AlternateName = "署名された文書は全てのフィールドがロックされます"
        fldSignature.LockedFields = New SignatureLockedFields()
        fldSignature.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 2, 72 - dY)
        fldSignature.Widget.DefaultAppearance.FontSize = 8
        fldSignature.Widget.ButtonAppearance.Caption = "クリックして署名"
        fldSignature.Widget.Border = New Border() With {.Width = 0.5F, .Color = Color.DarkSeaGreen}
        fldSignature.Widget.Page = page
        doc.AcroForm.Fields.Add(fldSignature)
        ip.Y += 72 - fldHeight

        '' ボタン。
        g.DrawString("ボタン:", tf, ip)
        '' フォーム送信ボタン。
        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.Activate = New ActionSubmitForm("Sample Form Submit URI")
        btnSubmit.Widget.Page = page
        doc.AcroForm.Fields.Add(btnSubmit)
        '' ip.Y += dY

        '' フォームリセットボタン。
        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