RotatedText2.vb
- ''
- '' This code is part of Document Solutions for PDF demos.
- '' Copyright (c) MESCIUS inc. All rights reserved.
- ''
- Imports System.IO
- Imports System.Drawing
- Imports GrapeCity.Documents.Pdf
- Imports GrapeCity.Documents.Text
- Imports GrapeCity.Documents.Drawing
- Imports 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 Function
- End Class
-