FormSubmit.vb
''
'' This code is part of GrapeCity Documents for PDF samples.
'' Copyright (c) GrapeCity, 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 an AcroForm PDF that the user can submit.
'' Here we submit it To the sample server, which receives the data and sends it back
'' in a special form.
Public Class FormSubmit
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()

        Dim rc = Util.AddNote(
            "In this sample the Submit button is associated with the ActionSubmitForm action, " +
            "with the URL pointing to a POST handler running on our sample server. " +
            "When the form is submitted, that handler receives a collection of form field names " +
            "and field values from the filled form, and sends it back in a simple HTML page. " +
            "If you download this sample, to successfully run it you will need to set up your own " +
            "handler, and change the Submit button action's URL to point to that handler.",
            page)

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

        '' Text field:
        g.DrawString("First name:", tf, ip)
        Dim fldFirstName = New TextField() With {.Name = "FirstName", .Value = "John"}
        fldFirstName.Widget.Page = page
        fldFirstName.Widget.Rect = New RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight)
        fldFirstName.Widget.TextFormat.Font = tf.Font
        fldFirstName.Widget.TextFormat.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldFirstName)
        ip.Y += dY

        '' Text field:
        g.DrawString("Last name:", tf, ip)
        Dim fldLastName = New TextField() With {.Name = "LastName", .Value = "Smith"}
        fldLastName.Widget.Page = page

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

        '' Checkbox:
        g.DrawString("Subscribe to Mailing List:", tf, ip)
        Dim fldCheckbox = New CheckBoxField() With {.Name = "Subscribe", .Value = 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

        '' Multiline TextBox:
        g.DrawString("Additional information:", 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.TextFormat.Font = tf.Font
        fldAdditionalInformation.Widget.TextFormat.FontSize = tf.FontSize
        doc.AcroForm.Fields.Add(fldAdditionalInformation)
        ip.Y += dY * 2

        '' 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.Page = page

        '' The URL for the submission:
        btnSubmit.Widget.Events.Activate = New ActionSubmitForm("/Samples/HandleFormSubmitFields")
        doc.AcroForm.Fields.Add(btnSubmit)

        '' 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.Events.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