SlantedTableHeaders.vb
C# VB
'''' This code is part of Document Solutions for PDF .NET demos.'' Copyright (c) MESCIUS inc. All rights reserved.''Imports System.IOImports System.DrawingImports System.NumericsImports GrapeCity.Documents.PdfImports GrapeCity.Documents.TextImports GrapeCity.Documents.DrawingImports GCDRAW = GrapeCity.Documents.Drawing
Public Class SlantedTableHeaders Public Function CreatePDF(ByVal stream As Stream) As Integer Dim doc = New GcPdfDocument() Dim page = doc.Pages.Add() Dim g = page.Graphics
' This is just to better position the table in the page: g.Transform = Matrix3x2.CreateTranslation(g.Resolution, g.Resolution)
Dim x = New Single() {10, 70, 120, 170, 220, 270, 320, 370} Dim y = New Single() {10, 70, 90, 110, 130} Dim lastX As Integer = x.Length - 1 Dim lastY As Integer = y.Length - 1
Dim angle As Integer = -50 Dim dx = CSng((y(0) - y(1)) / Math.Tan(Math.PI * angle / 180))
Using path = g.CreatePath() path.BeginFigure(New PointF(x(1) + dx, y(0))) path.AddLine(New PointF(x(lastX) + dx, y(0))) path.AddLine(New PointF(x(lastX), y(1))) path.AddLine(New PointF(x(1), y(1))) path.EndFigure(FigureEnd.Closed) g.FillPath(path, Color.Bisque) End Using DrawLine(g, x(1) + dx, y(0), x(lastX) + dx, y(0)) For i = 1 To lastX DrawLine(g, x(i), y(1), x(i) + dx, y(0)) Next
Dim arrH = New String() {"January", "February", "March", "April", "May", "June"} For i = 1 To lastX - 1 DrawSlantedText(g, angle, x(i), y(0), x(i + 1), y(1), arrH(i - 1)) Next
For i = 1 To lastY DrawLine(g, x(0), y(i), x(lastX), y(i)) Next For i = 0 To lastX DrawLine(g, x(i), y(1), x(i), y(lastY)) Next
Dim arr1 = New String() {"Store 1", "83424", "13558", "2348", "6429", "7565", "2833"} Dim arr2 = New String() {"Store 2", "53423", "3573", "32321", "16474", "97553", "8364"} Dim arr3 = New String() {"Store 3", "3421", "83553", "2343", "6428", "77557", "8347"}
Dim bold As Boolean = True For i = 0 To lastX - 1 DrawText(g, y(1), x(i), x(i + 1), arr1(i), bold) DrawText(g, y(2), x(i), x(i + 1), arr2(i), bold) DrawText(g, y(3), x(i), x(i + 1), arr3(i), bold) bold = False Next
doc.Save(stream) Return doc.Pages.Count End Function
Shared Sub DrawLine(ByVal g As GcGraphics, ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2 As Single) g.DrawLine(New PointF(x1, y1), New PointF(x2, y2), New GCDRAW.Pen(Color.Gray, 1)) End Sub
Shared Sub DrawSlantedText(ByVal g As GcGraphics, ByVal angle As Integer, ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2 As Single, ByVal s As String) Dim tl = g.CreateTextLayout() tl.TextAlignment = TextAlignment.Center tl.Append(s, New TextFormat With { .FontName = "Segoe UI", .FontSize = 10, .FontBold = True }) Dim rc = New RectangleF(x1, y1, x2 - x1, y2 - y1) g.DrawSlantedText(tl, angle, False, rc, SlantedTextAlignment.CenterInsideOutside) End Sub
Shared Sub DrawText(ByVal g As GcGraphics, ByVal y1 As Single, ByVal x1 As Single, ByVal x2 As Single, ByVal s As String, Optional ByVal bold As Boolean = False) Dim tl = g.CreateTextLayout() tl.TextAlignment = If(bold, TextAlignment.Leading, TextAlignment.Trailing) tl.MaxWidth = x2 - x1 - 6 tl.Append(s, New TextFormat With { .FontName = "Segoe UI", .FontSize = 10, .FontBold = bold }) g.DrawTextLayout(tl, New PointF(x1 + 3, y1)) End SubEnd Class