RotatedText2.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 GrapeCity.Documents.PdfImports System.Numerics
'' Shows how to use GcPdfGraphics.Transform to rotate a text string'' (alternative way using matrix multiplication).'' See also RotatedText.Public Class RotatedText2 Function CreatePDF(ByVal stream As Stream) As Integer '' Rotation angle, degrees clockwise: Dim angle = -45.0F '' Dim doc = New GcPdfDocument() Dim g = doc.NewPage().Graphics '' Create a text layout, pick a font and font size: Dim tl = g.CreateTextLayout() tl.DefaultFormat.Font = StandardFonts.Times tl.DefaultFormat.FontSize = 24 '' Add a text, and perform layout: tl.Append("Rotated text.") tl.PerformLayout(True) '' Text insertion point at (1",1"): Dim ip = New PointF(72, 72) '' Now that we have text size, create text rectangle with top left at insertion point: Dim rect = New RectangleF(ip.X, ip.Y, tl.ContentWidth, tl.ContentHeight) '' Rotation center point in the middel of text bounding rectangle: Dim center = New PointF(ip.X + tl.ContentWidth / 2, ip.Y + tl.ContentHeight / 2) '' Transformations can be combined by multiplying matrices. '' Note that matrix multiplication is not commutative - '' the sequence of operands is important, and is applied from last to first '' matrices being multiplied: '' 3) Translate the origin back to (0,0): '' 2) Rotate around new origin by the specified angle: '' 1) Translate the origin from default (0,0) to rotation center: g.Transform = Matrix3x2.CreateTranslation(-center.X, -center.Y) * Matrix3x2.CreateRotation((angle * Math.PI) / 180.0F) * Matrix3x2.CreateTranslation(center.X, center.Y) '' Draw rotated text and bounding rectangle: g.DrawTextLayout(tl, ip) g.DrawRectangle(rect, Color.Black, 1) '' Remove transformation and draw the bounding rectangle where the non-rotated text would have been: g.Transform = Matrix3x2.Identity g.DrawRectangle(rect, Color.ForestGreen, 1) '' '' Done: doc.Save(stream) Return doc.Pages.Count End FunctionEnd Class