''
'' This code is part of Document Solutions for Imaging demos.
'' Copyright (c) MESCIUS inc. All rights reserved.
''
Imports System.Drawing
Imports System.IO
Imports System.Collections.Generic
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Imaging
Imports GrapeCity.Documents.Layout.Composition
Imports GCTEXT = GrapeCity.Documents.Text
Imports GCDRAW = GrapeCity.Documents.Drawing
'' This example shows how to draw a plain table with random data,
'' using the GrapeCity.Documents.Drawing.TableRenderer and related classes.
Public Class PlainTable
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 Class Record
Public ReadOnly Property Name As String
Public ReadOnly Property Take1 As Integer
Public ReadOnly Property Take2 As Integer
Public ReadOnly Property Take3 As Integer
Public Sub New(name As String, take1 As Integer, take2 As Integer, take3 As Integer)
Me.Name = name
Me.Take1 = take1
Me.Take2 = take2
Me.Take3 = take3
End Sub
End Class
Private Shared Sub DrawTable(g As GcGraphics, pageWidth As Single, pageHeight As Single)
Dim rnd = Util.NewRandom()
Dim records = New List(Of Record)()
For i = 0 To 9
records.Add(New Record(Util.LoremIpsum(1, 1, 1, 1, 4), rnd.Next(100), rnd.Next(100), rnd.Next(100)))
Next
'' The Surface object helps with calculating layout
'' of the table and drawing the table on a graphics.
Dim surf = New Surface()
Dim view = surf.CreateView(pageWidth, pageHeight)
Dim visual = view.CreateVisual()
'' The table is always contained within a LayoutRect which is passed to the TableRenderer constructor.
Dim rt = visual.LayoutRect
rt.AnchorTopLeft(Nothing, 36, 36)
Dim ta = New TableRenderer(g,
rt, FixedTableSides.TopLeft,
rowCount:=records.Count + 1,
columnCount:=4,
gridLineColor:=Color.DarkGray,
gridLineWidth:=1,
rowMinHeight:=10)
Dim cs = New CellStyle() With
{
.PaddingTopBottom = 3,
.PaddingLeftRight = 4,
.FixedWidth = False,
.TextFormat = New TextFormat() With
{
.Font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "FreeSans.ttf")),
.FontSize = 21,
.FontSizeInGraphicUnits = True
}
}
Dim csHeader = New CellStyle(cs) With
{
.PaddingRight = 9,
.ParagraphAlignment = ParagraphAlignment.Center,
.TextAlignment = TextAlignment.Center
}
Dim csName = New CellStyle(cs) With
{
.MaxWidth = pageWidth / 2
}
Dim csNumber = New CellStyle(cs) With
{
.TextAlignment = TextAlignment.Trailing
}
ta.DefaultCellStyle = csHeader
ta.AddCell(0, 0, "Name")
ta.AddCell(0, 1, "Take 1" & vbLf & "The Good")
ta.AddCell(0, 2, "Take 2" & vbLf & "The Bad")
ta.AddCell(0, 3, "Take 3" & vbLf & "The Ugly")
ta.DefaultCellStyle = csNumber
For i = 0 To records.Count - 1
Dim p = records(i)
Dim r = i + 1
ta.AddCell(csName, r, 0, p.Name)
ta.AddCell(r, 1, p.Take1.ToString())
ta.AddCell(r, 2, p.Take2.ToString())
ta.AddCell(r, 3, p.Take3.ToString())
Next
'' Applying layout to the table cells must precede drawing the Surface.
ta.ApplyCellConstraints()
visual.Draw = Sub(gr As GcGraphics, vis As Visual)
'' Move from Visual transform to Surface transform before drawing the table.
gr.Transform = vis.Layer.Surface.BaseTransform
ta.Render()
End Sub
surf.Render(g)
End Sub
End Class