VintaSoft Imaging .NET SDK 15.1: Documentation for .NET developer
Vintasoft.Imaging.Pdf.Tree.InteractiveForms Namespace / PdfDocumentInteractiveForm Class / CalculationOrder Property
Syntax Remarks Example Requirements SeeAlso
In This Topic
CalculationOrder Property (PdfDocumentInteractiveForm)
In This Topic
Gets or sets a list of interactive form fields with calculation actions, defining the calculation order in which their values will be recalculated when the value of any field changes.
Syntax
'Declaration

Public Property CalculationOrder As PdfInteractiveFormFieldList

public PdfInteractiveFormFieldList CalculationOrder { get; set; }

Remarks

This property required if any field in the document have additional-actions containing a Calculate property.

Example

Here is an example that shows how to create a PDF document with calculated 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);
    }
}

Requirements

Target Platforms: .NET 10; .NET 9; .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

See Also