ProcurementLetter.vb
''
'' This code is part of GrapeCity Documents for Word samples.
'' Copyright (c) GrapeCity, Inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Word

'' This sample builds a nice-looking procurement business letter using tables to create the layout.
Public Class ProcurementLetter
    Function CreateDocx() As GcWordDocument
        Dim doc = New GcWordDocument()
        doc.Styles.DefaultFont.Size = 12
        doc.Styles.DefaultParagraphFormat.Spacing.SpaceAfter = 0
        doc.Styles(BuiltInStyleId.Normal).Font.Name = "Times New Roman"
        doc.Styles(BuiltInStyleId.Normal).Font.Size = 10

        Dim sec = doc.Body.Sections.First
        sec.PageSetup.Size.PaperSize = PaperSize.PaperA4
        Dim footer = sec.Footers(HeaderFooterType.Primary)
        Dim p = footer.Body.Paragraphs.Add("Residential Homes    |    Commercial Properties    |    Investment Real Estate    |    Financing Specialists")
        p.Format.Alignment = ParagraphAlignment.Center
        p.GetRange().Runs.First.Font.Size = 8.5F

        Dim sr = sec.GetRange()
        Dim t = sr.Tables.Add(1, 1)
        t.Format.Alignment = TableAlignment.Right
        t.Format.TableGrid.Add(216)
        t.Format.TableGrid.Add(126)

        Dim c = t(0, 0)
        Dim cf = c.Format
        cf.GridSpan = 2
        cf.PreferredWidth.Type = PreferredWidthType.Points
        cf.PreferredWidth.Value = 342
        cf.Shading.Texture = TexturePattern.Clear
        cf.Shading.ForegroundPatternColor.RGB = System.Drawing.Color.Empty
        cf.Shading.BackgroundPatternColor.RGB = System.Drawing.Color.FromArgb(255, 59, 19, 110)
        cf.VerticalAlignment = CellVerticalAlignment.Center

        Dim cp = cf.Padding
        cp.Top = 12
        cp.Left = 12
        cp.Bottom = 24
        cp.Right = 24

        Dim cr = c.GetRange()
        p = cr.Paragraphs.First
        p.Format.Alignment = ParagraphAlignment.Right
        Dim f = p.Mark.Font
        f.Color.RGB = Color.Empty
        f.Name = "Arial"
        f.Size = 14

        Dim r = p.GetRange().Runs.Add("Nancy Davolio")
        f = r.Font
        f.Color.RGB = Color.Empty
        f.Name = "Arial"
        f.Size = 14

        p = cr.Paragraphs.Add("Chief Procurement Officer")
        p.Format.Alignment = ParagraphAlignment.Right
        f = p.Mark.Font
        f.Color.RGB = Color.Empty
        f.Name = "Arial"

        r = p.GetRange().Runs.First
        f = r.Font
        f.Color.RGB = Color.Empty
        f.Name = "Arial"

        Dim row = t.Rows.Add()
        row.Format.Height = 92.4F

        c = row.Cells.Add()
        cf = c.Format
        cf.PreferredWidth.Type = PreferredWidthType.Points
        cf.PreferredWidth.Value = 216
        cf.Shading.Texture = TexturePattern.Clear
        cf.Shading.ForegroundPatternColor.RGB = System.Drawing.Color.Empty
        cf.Shading.BackgroundPatternColor.RGB = System.Drawing.Color.FromArgb(255, 242, 242, 242)
        cf.Padding.Top = 12

        cr = c.GetRange()
        p = cr.Paragraphs.First
        f = p.Mark.Font
        f.Color.RGB = System.Drawing.Color.FromArgb(255, 196, 89, 17)
        f.Color.ThemeColor = ThemeColorId.Accent2
        f.Color.ThemeShade = 191
        f.Name = "Arial"

        r = p.GetRange().Runs.Add("555-543-5432")
        f = r.Font
        f.Color.RGB = System.Drawing.Color.FromArgb(255, 196, 89, 17)
        f.Color.ThemeColor = ThemeColorId.Accent2
        f.Color.ThemeShade = 191
        f.Name = "Arial"

        p = cr.Paragraphs.Add("www.acmeinc.com")
        p.Mark.Style = doc.Styles(BuiltInStyleId.Hyperlink)
        p.Mark.Font.Name = "Arial"

        r = p.GetRange().Runs.First
        r.Style = doc.Styles(BuiltInStyleId.Hyperlink)
        r.Font.Name = "Arial"

        p = cr.Paragraphs.Add("5432 Street West, Townsvilla, State 54321")
        p.Mark.Font.Name = "Arial"
        p.GetRange().Runs.First.Font.Name = "Arial"

        c = row.Cells.Add()
        cf = c.Format
        cf.PreferredWidth.Type = PreferredWidthType.Points
        cf.PreferredWidth.Value = 126
        cf.Padding.Bottom = 0
        cf.VerticalAlignment = CellVerticalAlignment.Center

        p = c.GetRange().Paragraphs.First
        p.Format.Alignment = ParagraphAlignment.Center
        r = p.GetRange().Runs.Add()

        Dim bytes = File.ReadAllBytes(Path.Combine("Resources", "ImagesBis", "nancy.png"))
        Dim pic = r.GetRange().Pictures.Add(bytes, "image/png")
        pic.Size.Height.Value = 96
        pic.Size.Width.Value = 111.75F

        p = sr.Paragraphs.Add()
        r = p.GetRange().Runs.Add()

        bytes = File.ReadAllBytes(Path.Combine("Resources", "ImagesBis", "acme.png"))
        pic = r.GetRange().Pictures.Add(bytes, "image/png")
        pic.Size.Height.Value = 63
        pic.Size.Width.Value = 93.75F
        Dim wf = pic.WrapFormat
        wf.Type = WrapType.Square
        wf.Side = WrapSide.Right
        wf.DistanceLeft = 9
        wf.DistanceRight = 9

        Dim hp = pic.Position.Horizontal
        hp.Type = ShapePositionType.Points
        hp.RelativeTo = ShapeHorizontalRelativePosition.Column
        hp.Offset = 6

        Dim vp = pic.Position.Vertical
        vp.Type = ShapePositionType.Points
        vp.RelativeTo = ShapeVerticalRelativePosition.Paragraph
        vp.Offset = -170.85F

        AddPara(sr, Nothing)
        AddPara(sr, "Dear Mark,")
        AddPara(sr, Nothing)
        AddPara(sr, "The first shipment of equipment from AMA Ltd has arrived. We are delighted with every piece. Therefore, we decided to make our initial purchase larger than anticipated. I am attaching our purchase order No. 8393 for additional goods. ")
        AddPara(sr, Nothing)
        AddPara(sr, "Since you already have a copy of our Procurement Guidelines, I shall not attach them to this order. Please inform me of shipping dates.")
        AddPara(sr, Nothing)
        AddPara(sr, "Sincerely,")
        AddPara(sr, "Nancy Davolio,")
        AddPara(sr, "Chief Procurement Officer")
        '' Done:
        Return doc
    End Function

    Private Sub AddPara(ByVal rng As Range, ByVal text As String)
        Dim p As Paragraph = Nothing
        If text IsNot Nothing Then
            p = rng.Paragraphs.Add(text)
        Else
            p = rng.Paragraphs.Add()
        End If
        p.Format.Spacing.LineSpacing = 1.3F
        p.Mark.Font.Name = "Arial"
        p.Mark.Font.Size = 12
        If text IsNot Nothing Then
            Dim r = p.GetRange().Runs.First
            r.Font.Name = "Arial"
            r.Font.Size = 12
        End If
    End Sub
End Class