FormFields.vb
''
'' This code is part of Document Solutions for PDF demos.
'' Copyright (c) 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

'' This sample demonstrates how to create the various AcroForm fields
'' such as textbox, checkbox, push buttons and so on.
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.Font = StandardFonts.Times
        tf.FontSize = 14
        Dim ip = New PointF(72, 72)
        Dim fldOffset = 72.0F * 2
        Dim fldHeight = tf.FontSize * 1.2F
        Dim dY = 32.0F

        '' Text field:
        g.DrawString("Text field:", tf, ip)
        Dim fldText = New TextField()
        fldText.Value = "Initial TextField 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

        '' Checkbox:
        g.DrawString("Checkbox:", 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

        '' Radio button:
        g.DrawString("Radio button:", 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

        '' CombTextField
        g.DrawString("CombText field:", 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

        '' Combo-box:
        g.DrawString("Combo box:", tf, ip)
        Dim fldComboBox = New ComboBoxField()
        fldComboBox.Items.Add(New ChoiceFieldItem("ComboBox Choice 1"))
        fldComboBox.Items.Add(New ChoiceFieldItem("ComboBox Choice 2"))
        fldComboBox.Items.Add(New ChoiceFieldItem("ComboBox Choice 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

        '' List box:
        g.DrawString("List box:", tf, ip)
        Dim fldListBox = New ListBoxField()
        fldListBox.Items.Add(New ChoiceFieldItem("ListBox Choice 1"))
        fldListBox.Items.Add(New ChoiceFieldItem("ListBox Choice 2"))
        fldListBox.Items.Add(New ChoiceFieldItem("ListBox Choice 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

        '' Signature field:
        g.DrawString("Signature field:", tf, ip)
        Dim fldSignature = New SignatureField()
        fldSignature.AlternateName = "All fields locked when the document is signed"
        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 = "Click to sign"
        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

        '' Buttons:
        g.DrawString("Push buttons:", tf, ip)
        '' Submit form button:
        Dim btnSubmit = New PushButtonField()
        btnSubmit.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72, fldHeight)
        btnSubmit.Widget.ButtonAppearance.Caption = "Submit"
        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

        '' Reset form button:
        Dim btnReset = New PushButtonField()
        btnReset.Widget.Rect = New RectangleF(ip.X + fldOffset + 72 * 1.5F, ip.Y, 72, fldHeight)
        btnReset.Widget.ButtonAppearance.Caption = "Reset"
        btnReset.Widget.Highlighting = HighlightingMode.Invert
        btnReset.Widget.Activate = New ActionResetForm()
        btnReset.Widget.Page = page
        doc.AcroForm.Fields.Add(btnReset)
        ip.Y += dY
        ''
        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class