SetFieldFormat.vb
''
'' This code is part of Document Solutions for PDF .NET demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Pdf.AcroForms
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.Actions

Public Class SetFieldFormat
    Public Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim p = doc.NewPage()
        Dim g = p.Graphics

        g.DrawString("SetPercentFormat", StandardFonts.Helvetica, 14, Color.Black, New PointF(10, 10))
        AddPercentFormat(p, New RectangleF(10, 40, 60, 20), 0.2F, 2, TextField.NumberSeparatorStyle.Comma)
        AddPercentFormat(p, New RectangleF(80, 40, 60, 20), 1, 0, TextField.NumberSeparatorStyle.CommaDot)
        AddPercentFormat(p, New RectangleF(150, 40, 60, 20), -0.1F, 3, TextField.NumberSeparatorStyle.DotComma)
        AddPercentFormat(p, New RectangleF(220, 40, 60, 20), 2.0F, 2, TextField.NumberSeparatorStyle.Dot)
        AddPercentFormat(p, New RectangleF(290, 40, 60, 20), 0.5F, 2, TextField.NumberSeparatorStyle.ApostropheDot)

        g.DrawString("SetNumberFormat", StandardFonts.Helvetica, 14, Color.Black, New PointF(10, 70))
        AddNumberFormat(p, New RectangleF(10, 100, 60, 20), 12345.67F, 2, TextField.NumberSeparatorStyle.Comma,
            TextField.NumberNegativeStyle.None, Nothing, TextField.CurrencySymbolStyle.BeforeWithSpace)
        AddNumberFormat(p, New RectangleF(80, 100, 60, 20), -12.7F, 0, TextField.NumberSeparatorStyle.CommaDot,
            TextField.NumberNegativeStyle.UseRedText, "R", TextField.CurrencySymbolStyle.BeforeWithSpace)
        AddNumberFormat(p, New RectangleF(150, 100, 60, 20), 0.123F, 3, TextField.NumberSeparatorStyle.DotComma,
            TextField.NumberNegativeStyle.ShowParentheses, ChrW(&H20AC), TextField.CurrencySymbolStyle.AfterWithSpace)
        AddNumberFormat(p, New RectangleF(220, 100, 60, 20), 12345, 2, TextField.NumberSeparatorStyle.Dot,
            TextField.NumberNegativeStyle.ShowParentheses, "TL", TextField.CurrencySymbolStyle.AfterNoSpace)
        AddNumberFormat(p, New RectangleF(290, 100, 60, 20), -5674.344F, 2, TextField.NumberSeparatorStyle.ApostropheDot,
            TextField.NumberNegativeStyle.ShowParentheses Or TextField.NumberNegativeStyle.UseRedText, "TL", TextField.CurrencySymbolStyle.AfterWithSpace)

        g.DrawString("SetDateFormat", StandardFonts.Helvetica, 14, Color.Black, New PointF(10, 130))
        AddDateFormat(p, New RectangleF(10, 160, 60, 20), Util.TimeNow(), "dd-mm-yyyy")
        AddDateFormat(p, New RectangleF(80, 160, 60, 20), Util.TimeNow(), "d-m-yy")
        AddDateFormat(p, New RectangleF(150, 160, 60, 20), Util.TimeNow(), "yyyy/mmmm/dd")

        g.DrawString("SetTimeFormat", StandardFonts.Helvetica, 14, Color.Black, New PointF(10, 200))
        Dim dt = New DateTime(2000, 1, 1, 1, 2, 3)
        AddTimeFormat(p, New RectangleF(10, 230, 60, 20), dt, "HH:MM")
        AddTimeFormat(p, New RectangleF(80, 230, 60, 20), dt, "h:MM tt")
        AddTimeFormat(p, New RectangleF(150, 230, 60, 20), dt, "HH:MM:ss")

        g.DrawString("Special Format", StandardFonts.Helvetica, 14, Color.Black, New PointF(10, 270))
        AddSpecialFormat(p, New RectangleF(10, 300, 60, 20), "35004", TextField.SpecialFormat.ZipCode)
        AddSpecialFormat(p, New RectangleF(80, 300, 60, 20), "84606-6580", TextField.SpecialFormat.ZipCode4)
        AddSpecialFormat(p, New RectangleF(150, 300, 60, 20), "(123) 456-7890", TextField.SpecialFormat.Phone)
        AddSpecialFormat(p, New RectangleF(220, 300, 60, 20), "123-45-6789", TextField.SpecialFormat.SSN)

        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function

    Private Shared Function AddPercentFormat(p As Page,
            rect As RectangleF,
            v As Single,
            decimalPlaces As Integer,
            separatorStyle As TextField.NumberSeparatorStyle) As TextField
        Dim result = New TextField()
        p.Doc.AcroForm.Fields.Add(result)

        result.Widget.Page = p
        result.Widget.Rect = rect
        result.Widget.Border.Width = 1
        result.SetPercentValue(v, decimalPlaces, separatorStyle)
        Return result
    End Function

    Private Shared Function AddNumberFormat(p As Page,
            rect As RectangleF,
            v As Single,
            decimalPlaces As Integer,
            separatorStyle As TextField.NumberSeparatorStyle,
            negativeStyle As TextField.NumberNegativeStyle,
            currencySymbol As String,
            currencySymbolStyle As TextField.CurrencySymbolStyle) As TextField
        Dim result = New TextField()
        p.Doc.AcroForm.Fields.Add(result)

        result.Widget.Page = p
        result.Widget.Rect = rect
        result.Widget.Border.Width = 1
        result.Widget.Justification = VariableTextJustification.RightJustified
        result.SetNumberValue(v, decimalPlaces, separatorStyle, negativeStyle, currencySymbol, currencySymbolStyle)
        Return result
    End Function

    Private Shared Function AddDateFormat(p As Page,
            rect As RectangleF,
            v As DateTime,
            format As String) As TextField
        Dim result = New TextField()
        p.Doc.AcroForm.Fields.Add(result)

        result.Widget.Page = p
        result.Widget.Rect = rect
        result.Widget.Border.Width = 1
        result.SetDateValue(v, format)
        Return result
    End Function

    Private Shared Function AddTimeFormat(p As Page,
            rect As RectangleF,
            v As DateTime,
            format As String) As TextField
        Dim result = New TextField()
        p.Doc.AcroForm.Fields.Add(result)

        result.Widget.Page = p
        result.Widget.Rect = rect
        result.Widget.Border.Width = 1
        result.SetTimeValue(v, format)
        Return result
    End Function

    Private Shared Function AddSpecialFormat(p As Page,
            rect As RectangleF,
            v As String,
            format As TextField.SpecialFormat) As TextField
        Dim result = New TextField()
        p.Doc.AcroForm.Fields.Add(result)

        result.Widget.Page = p
        result.Widget.Rect = rect
        result.Widget.Border.Width = 1
        result.SetSpecialFormatValue(v, format)
        Return result
    End Function
End Class