TableNoSides.vb
''
'' This code is part of Document Solutions for Imaging demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.Drawing
Imports System.IO
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
Imports GrapeCity.Documents.Layout
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing

'' This example shows how to draw a simple table
'' with a grid that has no left and right borders,
'' using the GrapeCity.Documents.Drawing.TableRenderer and related classes.
Public Class TableNoSides
    Public Function GenerateImage(
        ByVal pixelSize As Size,
        ByVal dpi As Single,
        ByVal opaque As Boolean,
        Optional ByVal sampleParams As String() = Nothing) As GcBitmap

        Dim bmp = New GcBitmap(pixelSize.Width, pixelSize.Height, opaque, dpi, dpi)
        Using g = bmp.CreateGraphics(Color.White)
            DrawTable(g, pixelSize.Width, pixelSize.Height)
        End Using
        Return bmp
    End Function

    Private Shared Sub DrawTable(g As GcGraphics, pageWidth As Single, pageHeight As Single)
        Dim host = New LayoutHost()
        Dim view = host.CreateView(pageWidth, pageHeight)

        Dim rt = view.CreateRect()
        rt.AnchorTopLeftRight(Nothing, 30, 20, 20)

        Dim ta = New TableRenderer(g,
            rt, FixedTableSides.TopLeftRight,
            rowCount:=17,
            columnCount:=4,
            gridLineColor:=Color.SlateBlue,
            gridLineWidth:=2,
            rowMinHeight:=20)

        Dim columns = ta.ColumnRects
        columns(0).SetWidth(40)
        columns(1).SetStarWidth(150)
        columns(2).SetStarWidth(250)
        columns(3).SetStarWidth(250)

        ta.SetVerticalGridLineWidth(0, 0)
        ta.SetVerticalGridLineWidth(4, 0)

        ta.SetHorizontalGridLineWidth(0, 5)
        ta.SetHorizontalGridLineWidth(1, 5)
        ta.SetHorizontalGridLineWidth(17, 5)

        Dim fmt1 = New TextFormat() With
            {
                .Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSans.ttf")),
                .FontSize = 16F,
                .FontSizeInGraphicUnits = True
            }
        Dim cs = New CellStyle() With
            {
                .PaddingTop = 2,
                .PaddingBottom = 5,
                .PaddingLeftRight = 10,
                .TextFormat = fmt1,
                .TextAlignment = TextAlignment.Trailing
            }
        Dim csBold = New CellStyle(cs) With
            {
                .TextAlignment = TextAlignment.Center,
                .TextFormat = New TextFormat(fmt1) With
                    {
                        .FontBold = True
                    }
            }
        Dim csText = New CellStyle(cs) With
            {
                .TextAlignment = TextAlignment.Leading
            }

        ta.AddCell(csBold, 0, 0, "#")
        ta.AddCell(csBold, 0, 1, "Name")
        ta.AddCell(csBold, 0, 2, "Value")
        ta.AddCell(csBold, 0, 3, "Comment")
        For i = 1 To 16
            ta.AddCell(cs, i, 0, $"{i}")
            ta.AddCell(csText, i, 1, $"Math.Sqrt({i})")
            ta.AddCell(cs, i, 2, Math.Sqrt(i).ToString())
            ta.AddCell(csText, i, 3, $"Square root of {i}")
        Next

        ta.Render()
    End Sub
End Class