PDF AutomaticField in C#, VB.NET

  • Demo
  • C# source
  • VB.Net source

The sample demonstrates how to work with automatic fields in PDF document.

Download AutomaticField.pdf

using System;
using System.Drawing;
using Spire.Pdf;
using Spire.Pdf.AutomaticFields;
using Spire.Pdf.Graphics;

namespace AutomaticField
{
    class Program
    {
        static void Main(string[] args)
        {
            //Create a pdf document.
            PdfDocument doc = new PdfDocument();
            doc.DocumentInformation.Author = "Spire.Pdf";

            //margin
            PdfUnitConvertor unitCvtr = new PdfUnitConvertor();
            PdfMargins margin = new PdfMargins();
            margin.Top = unitCvtr.ConvertUnits(2.54f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Bottom = margin.Top;
            margin.Left = unitCvtr.ConvertUnits(3.17f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point);
            margin.Right = margin.Left;

            for (int i = 1; i < 4; i++)
            {
                //create section
                PdfSection section = doc.Sections.Add();
                section.PageSettings.Size = PdfPageSize.A4;
                section.PageSettings.Margins = margin;

                for (int j = 0; j < i; j++)
                {
                    // Create one page
                    PdfPageBase page = section.Pages.Add();
                    DrawAutomaticField(page);
                }
            }

            //Save pdf file.
            doc.SaveToFile("AutomaticField.pdf");
            doc.Close();

            //Launching the Pdf file.
            System.Diagnostics.Process.Start("AutomaticField.pdf");
        }

        private static void DrawAutomaticField(PdfPageBase page)
        {
            float y = 0;

            //title
            PdfBrush brush1 = PdfBrushes.CadetBlue;
            PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("Arial", 16f, FontStyle.Bold));
            PdfStringFormat format1 = new PdfStringFormat(PdfTextAlignment.Center);
            page.Canvas.DrawString("Automatic Field List", font1, brush1,
                page.Canvas.ClientSize.Width / 2, y, format1);
            y = y + font1.MeasureString("Automatic Field List", format1).Height;
            y = y + 5;

            String[] fieldList = new String[]
            {
                "DateTimeField",
                "CreationDateField",
                "DocumentAuthorField",
                "SectionNumberField",
                "SectionPageNumberField",
                "SectionPageCountField",
                "PageNumberField",
                "PageCountField",
                "DestinationPageNumberField",
                "CompositeField"
            };
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f));
            PdfStringFormat fieldNameFormat = new PdfStringFormat();
            fieldNameFormat.MeasureTrailingSpaces = true;
            foreach (String fieldName in fieldList)
            {
                //draw field name
                String text = String.Format("{0}: ", fieldName);
                page.Canvas.DrawString(text, font, PdfBrushes.DodgerBlue, 0, y);
                float x = font.MeasureString(text, fieldNameFormat).Width;
                RectangleF bounds = new RectangleF(x, y, 200, font.Height);
                DrawAutomaticField(fieldName, page, bounds);
                y = y + font.Height + 3;
            }
        }

        private static void DrawAutomaticField(string fieldName, PdfPageBase page, RectangleF bounds)
        {
            PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial", 9f, FontStyle.Italic));
            PdfBrush brush = PdfBrushes.OrangeRed;
            PdfStringFormat format
                = new PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle);

            if ("DateTimeField" == fieldName)
            {
                PdfDateTimeField field = new PdfDateTimeField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                field.Draw(page.Canvas);
            }

            if ("CreationDateField" == fieldName)
            {
                PdfCreationDateField field = new PdfCreationDateField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.DateFormatString = "yyyy-MM-dd HH:mm:ss";
                field.Draw(page.Canvas);
            }

            if ("DocumentAuthorField" == fieldName)
            {
                PdfDocumentAuthorField field = new PdfDocumentAuthorField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }


            if ("SectionNumberField" == fieldName)
            {
                PdfSectionNumberField field = new PdfSectionNumberField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }

            if ("SectionPageNumberField" == fieldName)
            {
                PdfSectionPageNumberField field = new PdfSectionPageNumberField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }

            if ("SectionPageCountField" == fieldName)
            {
                PdfSectionPageCountField field = new PdfSectionPageCountField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }

            if ("PageNumberField" == fieldName)
            {
                PdfPageNumberField field = new PdfPageNumberField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }

            if ("PageCountField" == fieldName)
            {
                PdfPageCountField field = new PdfPageCountField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Draw(page.Canvas);
            }

            if ("DestinationPageNumberField" == fieldName)
            {
                PdfDestinationPageNumberField field = new PdfDestinationPageNumberField();
                field.Font = font;
                field.Brush = brush;
                field.StringFormat = format;
                field.Bounds = bounds;
                field.Page = page as PdfNewPage;
                field.Draw(page.Canvas);
            }

            if ("CompositeField" == fieldName)
            {
                PdfSectionPageNumberField field1 = new PdfSectionPageNumberField();
                field1.NumberStyle = PdfNumberStyle.LowerRoman;
                PdfSectionPageCountField field2 = new PdfSectionPageCountField();
                PdfCompositeField fields = new PdfCompositeField();
                fields.Font = font;
                fields.Brush = brush;
                fields.StringFormat = format;
                fields.Bounds = bounds;
                fields.AutomaticFields = new PdfAutomaticField[] { field1, field2 };
                fields.Text = "section page {0} of {1}";
                fields.Draw(page.Canvas);
            }
        }
    }
}

Imports System.Drawing
Imports Spire.Pdf
Imports Spire.Pdf.AutomaticFields
Imports Spire.Pdf.Graphics

Namespace AutomaticField
    Friend Class Program
        Shared Sub Main(ByVal args() As String)
            'Create a pdf document.
            Dim doc As New PdfDocument()
            doc.DocumentInformation.Author = "Spire.Pdf"

            'margin
            Dim unitCvtr As New PdfUnitConvertor()
            Dim margin As New PdfMargins()
            margin.Top = unitCvtr.ConvertUnits(2.54F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
            margin.Bottom = margin.Top
            margin.Left = unitCvtr.ConvertUnits(3.17F, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Point)
            margin.Right = margin.Left

            For i As Integer = 1 To 3
                'create section
                Dim section As PdfSection = doc.Sections.Add()
                section.PageSettings.Size = PdfPageSize.A4
                section.PageSettings.Margins = margin

                For j As Integer = 0 To i - 1
                    ' Create one page
                    Dim page As PdfPageBase = section.Pages.Add()
                    DrawAutomaticField(page)
                Next j
            Next i

            'Save pdf file.
            doc.SaveToFile("AutomaticField.pdf")
            doc.Close()

            'Launching the Pdf file.
            Process.Start("AutomaticField.pdf")
        End Sub

        Private Shared Sub DrawAutomaticField(ByVal page As PdfPageBase)
            Dim y As Single = 0

            'title
            Dim brush1 As PdfBrush = PdfBrushes.CadetBlue
            Dim font1 As New PdfTrueTypeFont(New Font("Arial", 16.0F, FontStyle.Bold))
            Dim format1 As New PdfStringFormat(PdfTextAlignment.Center)
            page.Canvas.DrawString("Automatic Field List", font1, brush1, _
                                   page.Canvas.ClientSize.Width \ 2, y, format1)
            y = y + font1.MeasureString("Automatic Field List", format1).Height
            y = y + 5

            Dim fieldList() As String _
                = {"DateTimeField", "CreationDateField", "DocumentAuthorField", _
                   "SectionNumberField", "SectionPageNumberField", "SectionPageCountField", _
                   "PageNumberField", "PageCountField", "DestinationPageNumberField", "CompositeField"}
            Dim font As New PdfTrueTypeFont(New Font("Arial", 9.0F))
            Dim fieldNameFormat As New PdfStringFormat()
            fieldNameFormat.MeasureTrailingSpaces = True
            For Each fieldName As String In fieldList
                'draw field name
                Dim text As String = String.Format("{0}: ", fieldName)
                page.Canvas.DrawString(text, font, PdfBrushes.DodgerBlue, 0, y)
                Dim x As Single = font.MeasureString(text, fieldNameFormat).Width
                Dim bounds As New RectangleF(x, y, 200, font.Height)
                DrawAutomaticField(fieldName, page, bounds)
                y = y + font.Height + 3
            Next fieldName
        End Sub

        Private Shared Sub DrawAutomaticField(ByVal fieldName As String, ByVal page As PdfPageBase, _
                                              ByVal bounds As RectangleF)
            Dim font As New PdfTrueTypeFont(New Font("Arial", 9.0F, FontStyle.Italic))
            Dim brush As PdfBrush = PdfBrushes.OrangeRed
            Dim format As New PdfStringFormat(PdfTextAlignment.Left, PdfVerticalAlignment.Middle)

            If "DateTimeField" = fieldName Then
                Dim field As New PdfDateTimeField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.DateFormatString = "yyyy-MM-dd HH:mm:ss"
                field.Draw(page.Canvas)
            End If

            If "CreationDateField" = fieldName Then
                Dim field As New PdfCreationDateField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.DateFormatString = "yyyy-MM-dd HH:mm:ss"
                field.Draw(page.Canvas)
            End If

            If "DocumentAuthorField" = fieldName Then
                Dim field As New PdfDocumentAuthorField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If


            If "SectionNumberField" = fieldName Then
                Dim field As New PdfSectionNumberField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If

            If "SectionPageNumberField" = fieldName Then
                Dim field As New PdfSectionPageNumberField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If

            If "SectionPageCountField" = fieldName Then
                Dim field As New PdfSectionPageCountField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If

            If "PageNumberField" = fieldName Then
                Dim field As New PdfPageNumberField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If

            If "PageCountField" = fieldName Then
                Dim field As New PdfPageCountField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Draw(page.Canvas)
            End If

            If "DestinationPageNumberField" = fieldName Then
                Dim field As New PdfDestinationPageNumberField()
                field.Font = font
                field.Brush = brush
                field.StringFormat = format
                field.Bounds = bounds
                field.Page = TryCast(page, PdfNewPage)
                field.Draw(page.Canvas)
            End If

            If "CompositeField" = fieldName Then
                Dim field1 As New PdfSectionPageNumberField()
                field1.NumberStyle = PdfNumberStyle.LowerRoman
                Dim field2 As New PdfSectionPageCountField()
                Dim fields As New PdfCompositeField()
                fields.Font = font
                fields.Brush = brush
                fields.StringFormat = format
                fields.Bounds = bounds
                fields.AutomaticFields = New PdfAutomaticField() {field1, field2}
                fields.Text = "section page {0} of {1}"
                fields.Draw(page.Canvas)
            End If
        End Sub
    End Class
End Namespace