VintaSoft Imaging .NET SDK v8.7
Vintasoft.Imaging.Pdf.Tree.InteractiveForms Namespace / PdfInteractiveFormField Class
Members Example



In This Topic
    PdfInteractiveFormField Class
    In This Topic
    Provides information about interactive form field.
    Object Model
    PdfInteractiveFormField ClassPdfInteractiveFormFieldAdditionalActions ClassPdfWidgetAnnotation ClassPdfBasicObject ClassPdfDocument ClassPdfFont ClassPdfIndirectReference ClassPdfInteractiveFormFieldList ClassPdfInteractiveFormField ClassPdfInteractiveFormField Class
    Syntax
    'Declaration
     
    Public Class PdfInteractiveFormField 
       Inherits Vintasoft.Imaging.Pdf.Tree.PdfTreeNodeBase
    public class PdfInteractiveFormField : Vintasoft.Imaging.Pdf.Tree.PdfTreeNodeBase 
    public __gc class PdfInteractiveFormField : public Vintasoft.Imaging.Pdf.Tree.PdfTreeNodeBase 
    public ref class PdfInteractiveFormField : public Vintasoft.Imaging.Pdf.Tree.PdfTreeNodeBase 
    Remarks
    Interactive Form Field is a node of interactive form tree. Field node can be terminal and not terminal (IsTerminalField):
    • Terminal field contains field value, field default value, field properties and widget annotation (Annotation) that describes interactive form field appearance.
    • Not terminal field uses to create group of interactive form fields (Kids).

    Interactive forms support four special types of actions in addition:
    Interactive form field and annotation may include property that specifies an additional-actions (AdditionalActions, Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotation.AdditionalActions) that extends the set of events that can trigger the execution of an action. This trigger events may be used to create verification algorithms, calculated fields and custom fields interaction logic.
    Example
    This example shows how to create a PDF document with calculated text field.
    ''' <summary>
    ''' Creates a PDF document with calculated interactive form field.
    ''' </summary>
    ''' <param name="filename">The filename.</param>
    Public Shared Sub CreateDocumentWithCalculatedInteractiveFormField(filename As String)
    	' create PDF document
    	Using document As New Vintasoft.Imaging.Pdf.PdfDocument()
    		' create interactive form in PDF document
    		document.InteractiveForm = New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfDocumentInteractiveForm(document)
                
    		' specify that the viewer application must construct appearance streams and
    		' appearance properties for all widget annotations
    		document.InteractiveForm.NeedAppearances = True
                
    		' font and font size
    		Dim fontSize As Single = 12
    		Dim font As Vintasoft.Imaging.Pdf.Tree.Fonts.PdfFont = document.FontManager.GetStandardFont(Vintasoft.Imaging.Pdf.Tree.Fonts.PdfStandardFontType.TimesRoman)
                
    		' create an empty page
    		Dim page As New Vintasoft.Imaging.Pdf.Tree.PdfPage(document, Vintasoft.Imaging.PaperSizeKind.A4)
    		' add page to the document
    		document.Pages.Add(page)
                
    		Dim width As Single = 60
    		Dim height As Single = 40
    		' create a rectangle that defines the object (first field) position on PDF page
    		Dim rect As New System.Drawing.RectangleF((page.Size.Width - width * 5) / 2, ((page.Size.Height - height) / 3) * 2, width, height)
                
    		' open PdfGraphics on page
    		Using graphics As Vintasoft.Imaging.Pdf.Drawing.PdfGraphics = page.GetGraphics()
    			' create calculator field: group of three fields
    			Dim calculator As New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormField(document, "Calculator")
    			calculator.SetTextDefaultAppearance(font, fontSize * 1.5F, System.Drawing.Color.Black)
    			calculator.TextQuadding = Vintasoft.Imaging.Pdf.Tree.InteractiveForms.TextQuaddingType.Centered
                
    			' create the border style
    			Dim borderStyle As New Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationBorderStyle(document)
    			borderStyle.Style = Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationBorderStyleType.Inset
    			borderStyle.Width = 1
                
    			' create the appearance characteristics
    			Dim appearanceCharacteristics As New Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationAppearanceCharacteristics(document)
    			appearanceCharacteristics.BorderColor = System.Drawing.Color.Gray
                
    			' create the left text box
    			Dim textField As New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Left", rect, "2")
    			textField.DefaultValue = textField.Value
    			textField.Annotation.BorderStyle = borderStyle
    			textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics
    			' add the left text box to the calculator
    			calculator.Kids.Add(textField)
                
    			' update the rectangle that defines the object position on PDF page
    			rect.X += rect.Width
                
    			' draw the symbol '+' on the page
    			graphics.DrawString("+", font, fontSize * 1.5F, New Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), rect, Vintasoft.Imaging.Pdf.Drawing.PdfContentAlignment.Center, _
    				False)
                
    			' update the rectangle that defines the object position on PDF page
    			rect.X += rect.Width
                
    			' create the right text box
    			textField = New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Right", rect, "3")
    			textField.DefaultValue = textField.Value
    			textField.Annotation.BorderStyle = borderStyle
    			textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics
    			' add the right text box to the calculator
    			calculator.Kids.Add(textField)
                
    			' update the rectangle that defines the object position on PDF page
    			rect.X += rect.Width
                
    			' draw the symbol '=' on the page
    			graphics.DrawString("=", font, fontSize * 1.5F, New Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), rect, Vintasoft.Imaging.Pdf.Drawing.PdfContentAlignment.Center, _
    				False)
                
    			' create the calculator program written on JavaScript
    			Dim javaScriptCode As New System.Text.StringBuilder()
    			javaScriptCode.Append("var left = this.getField('Calculator.Left');")
    			javaScriptCode.Append("var right = this.getField('Calculator.Right');")
    			javaScriptCode.Append("var result = this.getField('Calculator.Result');")
    			javaScriptCode.Append("result.value = left.value + right.value;")
    			Dim calculatorProgram As New Vintasoft.Imaging.Pdf.Tree.PdfJavaScriptAction(document, javaScriptCode.ToString())
                
    			' update the rectangle that defines the object position on PDF page
    			rect.X += rect.Width
                
    			' create the result text box
    			textField = New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Result", rect)
    			textField.IsReadOnly = True
    			textField.Annotation.BorderStyle = borderStyle
    			textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics
    			' set a program that will calculate value of result field
    			textField.AdditionalActions = New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormFieldAdditionalActions(document)
    			textField.AdditionalActions.Calculate = calculatorProgram
    			' specify that calcualtor program must be executed when page is opened
    			textField.Annotation.AdditionalActions.PageOpen = calculatorProgram
    			' add the result text box to the calculator
    			calculator.Kids.Add(textField)
                
    			' add result field to the calculated fields (calcualtion order) 
    			' of the document interactive form fields
    			document.InteractiveForm.CalculationOrder = New Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormFieldList(document)
    			document.InteractiveForm.CalculationOrder.Add(textField)
                
    			' add field group to the document
    			document.InteractiveForm.Fields.Add(calculator)
                
    			' add annotations, associated with field group, to the page
    			page.Annotations = New Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationList(document)
    			page.Annotations.AddRange(calculator.GetAnnotations())
                
    			' update appearance of field group
    			calculator.UpdateAppearance()
    		End Using
                
    		' save the document
    		document.Save(filename)
    	End Using
    End Sub
    /// <summary>
    /// Creates a PDF document with calculated interactive form field.
    /// </summary>
    /// <param name="filename">The filename.</param>
    public static void CreateDocumentWithCalculatedInteractiveFormField(string filename)
    {
        // create PDF document
        using (Vintasoft.Imaging.Pdf.PdfDocument document = new Vintasoft.Imaging.Pdf.PdfDocument())
        {
            // create interactive form in PDF document
            document.InteractiveForm = 
                new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfDocumentInteractiveForm(document);
                
            // specify that the viewer application must construct appearance streams and
            // appearance properties for all widget annotations
            document.InteractiveForm.NeedAppearances = true;
                
            // font and font size
            float fontSize = 12;
            Vintasoft.Imaging.Pdf.Tree.Fonts.PdfFont font = 
                document.FontManager.GetStandardFont(Vintasoft.Imaging.Pdf.Tree.Fonts.PdfStandardFontType.TimesRoman);
                
            // create an empty page
            Vintasoft.Imaging.Pdf.Tree.PdfPage page = new Vintasoft.Imaging.Pdf.Tree.PdfPage(
                document, Vintasoft.Imaging.PaperSizeKind.A4);
            // add page to the document
            document.Pages.Add(page);
                
            float width = 60;
            float height = 40;
            // create a rectangle that defines the object (first field) position on PDF page
            System.Drawing.RectangleF rect = new System.Drawing.RectangleF(
                (page.Size.Width - width * 5) / 2,
                ((page.Size.Height - height) / 3) * 2,
                width, height);
                
            // open PdfGraphics on page
            using (Vintasoft.Imaging.Pdf.Drawing.PdfGraphics graphics = page.GetGraphics())
            {
                // create calculator field: group of three fields
                Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormField calculator =
                    new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormField(document, "Calculator");
                calculator.SetTextDefaultAppearance(font, fontSize * 1.5f, System.Drawing.Color.Black);
                calculator.TextQuadding = Vintasoft.Imaging.Pdf.Tree.InteractiveForms.TextQuaddingType.Centered;
                
                // create the border style
                Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationBorderStyle borderStyle = 
                    new Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationBorderStyle(document);
                borderStyle.Style = Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationBorderStyleType.Inset;
                borderStyle.Width = 1;
                
                // create the appearance characteristics
                Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationAppearanceCharacteristics appearanceCharacteristics =
                    new Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationAppearanceCharacteristics(document);
                appearanceCharacteristics.BorderColor = System.Drawing.Color.Gray;
                
                // create the left text box
                Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField textField =
                    new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Left", rect, "2");
                textField.DefaultValue = textField.Value;
                textField.Annotation.BorderStyle = borderStyle;
                textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics;
                // add the left text box to the calculator
                calculator.Kids.Add(textField);
                
                // update the rectangle that defines the object position on PDF page
                rect.X += rect.Width;
                
                // draw the symbol '+' on the page
                graphics.DrawString("+", font, fontSize * 1.5f,
                    new Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), rect, 
                    Vintasoft.Imaging.Pdf.Drawing.PdfContentAlignment.Center, false);
                
                // update the rectangle that defines the object position on PDF page
                rect.X += rect.Width;
                
                // create the right text box
                textField = new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Right", rect, "3");
                textField.DefaultValue = textField.Value;
                textField.Annotation.BorderStyle = borderStyle;
                textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics;
                // add the right text box to the calculator
                calculator.Kids.Add(textField);
                
                // update the rectangle that defines the object position on PDF page
                rect.X += rect.Width;
                
                // draw the symbol '=' on the page
                graphics.DrawString("=", font, fontSize * 1.5f,
                    new Vintasoft.Imaging.Pdf.Drawing.PdfBrush(System.Drawing.Color.Black), rect, 
                    Vintasoft.Imaging.Pdf.Drawing.PdfContentAlignment.Center, false);
                
                // create the calculator program written on JavaScript
                System.Text.StringBuilder javaScriptCode = new System.Text.StringBuilder();
                javaScriptCode.Append("var left = this.getField('Calculator.Left');");
                javaScriptCode.Append("var right = this.getField('Calculator.Right');");
                javaScriptCode.Append("var result = this.getField('Calculator.Result');");
                javaScriptCode.Append("result.value = left.value + right.value;");
                Vintasoft.Imaging.Pdf.Tree.PdfJavaScriptAction calculatorProgram =
                    new Vintasoft.Imaging.Pdf.Tree.PdfJavaScriptAction(document, javaScriptCode.ToString());
                
                // update the rectangle that defines the object position on PDF page
                rect.X += rect.Width;
                
                // create the result text box
                textField = new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormTextField(document, "Result", rect);
                textField.IsReadOnly = true;
                textField.Annotation.BorderStyle = borderStyle;
                textField.Annotation.AppearanceCharacteristics = appearanceCharacteristics;
                // set a program that will calculate value of result field
                textField.AdditionalActions = 
                    new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormFieldAdditionalActions(document);
                textField.AdditionalActions.Calculate = calculatorProgram;
                // specify that calcualtor program must be executed when page is opened
                textField.Annotation.AdditionalActions.PageOpen = calculatorProgram;
                // add the result text box to the calculator
                calculator.Kids.Add(textField);
                
                // add result field to the calculated fields (calcualtion order) 
                // of the document interactive form fields
                document.InteractiveForm.CalculationOrder = 
                    new Vintasoft.Imaging.Pdf.Tree.InteractiveForms.PdfInteractiveFormFieldList(document);
                document.InteractiveForm.CalculationOrder.Add(textField);
                
                // add field group to the document
                document.InteractiveForm.Fields.Add(calculator);
                
                // add annotations, associated with field group, to the page
                page.Annotations = new Vintasoft.Imaging.Pdf.Tree.Annotations.PdfAnnotationList(document);
                page.Annotations.AddRange(calculator.GetAnnotations());
                
                // update appearance of field group
                calculator.UpdateAppearance();
            }
                
            // save the document
            document.Save(filename);
        }
    }
    Inheritance Hierarchy
    Requirements

    Target Platforms: Windows 10, Windows 8, Windows 7, Windows Vista, Windows XP, Windows Server 2012, Windows Server 2008, Windows Server 2003

    See Also