FillForm.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 System.Text Imports GrapeCity.Documents.Pdf Imports GrapeCity.Documents.Text Imports GrapeCity.Documents.Drawing Imports GrapeCity.Documents.Pdf.AcroForms '' This sample loads the form created by the FormFields sample, '' loops through all form fields found in that file, '' and modifies the values of input fields. '' The log of what was done (showing old and new values) is added to the form page. Public Class FillForm Function CreatePDF(ByVal stream As Stream) As Integer Dim doc = New GcPdfDocument() '' The original file stream must be kept open while working with the loaded PDF, see LoadPDF for details: Using fs As New FileStream(Path.Combine("Resources", "PDFs", "FormFields.pdf"), FileMode.Open, FileAccess.Read) doc.Load(fs) Dim page = doc.Pages.Last Dim sb = New StringBuilder() sb.AppendLine("Log of updates made by the FillForm sample:" + vbCrLf) For Each fld In doc.AcroForm.Fields If TypeOf fld Is CombTextField Then Dim ctfld = DirectCast(fld, CombTextField) sb.Append($"CombTextField.Value was '{ctfld.Value}', ") ctfld.Value = "Comb text" sb.AppendLine($"now '{ctfld.Value}'.") ElseIf TypeOf fld Is TextField Then Dim tfld = DirectCast(fld, TextField) sb.Append($"TextField.Value was '{tfld.Value}', ") tfld.Value = $"Text updated on {Util.TimeNow():u}" sb.AppendLine($"now '{tfld.Value}'.") ElseIf TypeOf fld Is CheckBoxField Then Dim cfld = DirectCast(fld, CheckBoxField) sb.Append($"CheckBoxField.Value was '{cfld.Checked}', ") cfld.Checked = Not cfld.Checked sb.AppendLine($"now '{cfld.Checked}'.") ElseIf TypeOf fld Is RadioButtonField Then Dim rbfld = DirectCast(fld, RadioButtonField) sb.Append($"RadioButtonField.Value was '{rbfld.Value}', ") rbfld.Value = rbfld.Widgets.Count - 1 sb.AppendLine($"now '{rbfld.Value}'.") ElseIf TypeOf fld Is ComboBoxField Then Dim cmbfld = DirectCast(fld, ComboBoxField) sb.Append($"ComboBoxField selection was '{cmbfld.Items(cmbfld.SelectedIndex).Text}', ") cmbfld.SelectedIndex = cmbfld.Items.Count - 1 sb.AppendLine($"now '{cmbfld.Items(cmbfld.SelectedIndex).Text}'.") ElseIf TypeOf fld Is ListBoxField Then Dim lbfld = DirectCast(fld, ListBoxField) sb.Append($"ListBoxField selection was '{lbfld.Items(lbfld.SelectedIndex).Text}', ") lbfld.SelectedIndex = lbfld.Items.Count - 1 sb.AppendLine($"now '{lbfld.Items(lbfld.SelectedIndex).Text}'.") ElseIf TypeOf fld Is SignatureField Then Dim sfld = DirectCast(fld, SignatureField) sb.AppendLine("SignatureField found.") ElseIf TypeOf fld Is PushButtonField Then Dim btnfld = DirectCast(fld, PushButtonField) sb.AppendLine($"PushButtonField '{btnfld.Widget.ButtonAppearance.Caption}' found.") Else sb.AppendLine($"Field '{fld}' found/") End If Next '' Add a log of what we did at the bottom of the page: Dim tl = New TextLayout(72) With { .MaxWidth = page.Size.Width, .MaxHeight = page.Size.Height, .MarginLeft = 80, .MarginRight = 80, .MarginBottom = 80, .ParagraphAlignment = ParagraphAlignment.Far } tl.Append(sb.ToString(), New TextFormat() With {.Font = StandardFonts.Times, .FontSize = 12}) tl.PerformLayout(True) Dim rc = tl.ContentRectangle rc.Inflate(8, 8) page.Graphics.FillRectangle(rc, Color.LightYellow) page.Graphics.DrawRectangle(rc, Color.Orange) page.Graphics.DrawTextLayout(tl, PointF.Empty) '' Done: doc.Save(stream) End Using '' Return doc.Pages.Count End Function End Class