Spire.PDF can help us draw different shapes in PDF document. We can use Spire.PDF to draw rectangles in PDF, draw circles in PDF, draw arcs in PDF and draw ellipses in PDF. Besides these shapes, we can also use Spire.PDF to draw some other special shapes such as Spiral and five-pointed stars.
Draw Five-Pointed Star in PDF
By using Spire.PDF, we can draw different stars in PDF document. The sample below is showing how to draw 6 types of different five-pointed star.
[C#]
using Spire.Pdf; using Spire.Pdf.Graphics; using System; using System.Drawing; namespace FivePointedStar { class Program { private static void DrawStar(PdfPageBase page) { PointF[] points = new PointF[5]; for (int i = 0; i < points.Length; i++) { float x = (float)Math.Cos(i * 2 * Math.PI / 5); float y = (float)Math.Sin(i * 2 * Math.PI / 5); points[i] = new PointF(x, y); } PdfPath path = new PdfPath(); path.AddLine(points[2], points[0]); path.AddLine(points[0], points[3]); path.AddLine(points[3], points[1]); path.AddLine(points[1], points[4]); path.AddLine(points[4], points[2]); //save graphics state PdfGraphicsState state = page.Canvas.Save(); PdfPen pen = new PdfPen(Color.DeepSkyBlue, 0.02f); PdfBrush brush1 = new PdfSolidBrush(Color.CadetBlue); page.Canvas.ScaleTransform(50f, 50f); page.Canvas.TranslateTransform(5f, 1.2f); page.Canvas.DrawPath(pen, path); page.Canvas.TranslateTransform(2f, 0f); path.FillMode = PdfFillMode.Alternate; page.Canvas.DrawPath(pen, brush1, path); page.Canvas.TranslateTransform(2f, 0f); path.FillMode = PdfFillMode.Winding; page.Canvas.DrawPath(pen, brush1, path); PdfLinearGradientBrush brush2 = new PdfLinearGradientBrush(new PointF(-2, 0), new PointF(2, 0), Color.Red, Color.Blue); page.Canvas.TranslateTransform(-4f, 2f); path.FillMode = PdfFillMode.Alternate; page.Canvas.DrawPath(pen, brush2, path); PdfRadialGradientBrush brush3 = new PdfRadialGradientBrush(new PointF(0f, 0f), 0f, new PointF(0f, 0f), 1f, Color.Red, Color.Blue); page.Canvas.TranslateTransform(2f, 0f); path.FillMode = PdfFillMode.Winding; page.Canvas.DrawPath(pen, brush3, path); PdfTilingBrush brush4 = new PdfTilingBrush(new RectangleF(0, 0, 4f, 4f)); brush4.Graphics.DrawRectangle(brush2, 0, 0, 4f, 4f); page.Canvas.TranslateTransform(2f, 0f); path.FillMode = PdfFillMode.Winding; page.Canvas.DrawPath(pen, brush4, path); //restor graphics page.Canvas.Restore(state); } } }
[VB.NET]
Imports Spire.Pdf Imports Spire.Pdf.Graphics Imports System.Drawing Namespace FivePointedStar Class Program Private Shared Sub DrawStar(page As PdfPageBase) Dim points As PointF() = New PointF(4) {} For i As Integer = 0 To points.Length - 1 Dim x As Single = CSng(Math.Cos(i * 2 * Math.PI / 5)) Dim y As Single = CSng(Math.Sin(i * 2 * Math.PI / 5)) points(i) = New PointF(x, y) Next Dim path As New PdfPath() path.AddLine(points(2), points(0)) path.AddLine(points(0), points(3)) path.AddLine(points(3), points(1)) path.AddLine(points(1), points(4)) path.AddLine(points(4), points(2)) 'save graphics state Dim state As PdfGraphicsState = page.Canvas.Save() Dim pen As New PdfPen(Color.DeepSkyBlue, 0.02F) Dim brush1 As PdfBrush = New PdfSolidBrush(Color.CadetBlue) page.Canvas.ScaleTransform(50F, 50F) page.Canvas.TranslateTransform(5F, 1.2F) page.Canvas.DrawPath(pen, path) page.Canvas.TranslateTransform(2F, 0F) path.FillMode = PdfFillMode.Alternate page.Canvas.DrawPath(pen, brush1, path) page.Canvas.TranslateTransform(2F, 0F) path.FillMode = PdfFillMode.Winding page.Canvas.DrawPath(pen, brush1, path) Dim brush2 As New PdfLinearGradientBrush(New PointF(-2, 0), New PointF(2, 0), Color.Red, Color.Blue) page.Canvas.TranslateTransform(-4F, 2F) path.FillMode = PdfFillMode.Alternate page.Canvas.DrawPath(pen, brush2, path) Dim brush3 As New PdfRadialGradientBrush(New PointF(0F, 0F), 0F, New PointF(0F, 0F), 1F, Color.Red, Color.Blue) page.Canvas.TranslateTransform(2F, 0F) path.FillMode = PdfFillMode.Winding page.Canvas.DrawPath(pen, brush3, path) Dim brush4 As New PdfTilingBrush(New RectangleF(0, 0, 4F, 4F)) brush4.Graphics.DrawRectangle(brush2, 0, 0, 4F, 4F) page.Canvas.TranslateTransform(2F, 0F) path.FillMode = PdfFillMode.Winding page.Canvas.DrawPath(pen, brush4, path) 'restor graphics page.Canvas.Restore(state) End Sub End Class End Namespace
Effective Screenshot:
Draw Spiral in PDF
A spiral is a curve which emanates from a central point, getting progressively farther away as it revolves around the point. Spire.PDF can also help us easily draw Spiral in PDF and we can design at will.
[C#]
using Spire.Pdf; using Spire.Pdf.Graphics; using System; namespace Spiral { class Program { private static void DrawSpiral(PdfPageBase page) { //save graphics state PdfGraphicsState state = page.Canvas.Save(); //Draw shap - spiro PdfPen pen = PdfPens.DeepSkyBlue; int nPoints = 1000; double r1 = 30; double r2 = 25; double p = 35; double x1 = r1 + r2 - p; double y1 = 0; double x2 = 0; double y2 = 0; page.Canvas.TranslateTransform(100, 100); for (int i = 0; i < nPoints; i++) { double t = i * Math.PI / 90; x2 = (r1 + r2) * Math.Cos(t) - p * Math.Cos((r1 + r2) * t / r2); y2 = (r1 + r2) * Math.Sin(t) - p * Math.Sin((r1 + r2) * t / r2); page.Canvas.DrawLine(pen, (float)x1, (float)y1, (float)x2, (float)y2); x1 = x2; y1 = y2; } //restor graphics page.Canvas.Restore(state); } } }
[VB.NET]
Imports Spire.Pdf Imports Spire.Pdf.Graphics Namespace Spiral Class Program Private Shared Sub DrawSpiral(page As PdfPageBase) 'save graphics state Dim state As PdfGraphicsState = page.Canvas.Save() 'Draw shap - spiro Dim pen As PdfPen = PdfPens.DeepSkyBlue Dim nPoints As Integer = 1000 Dim r1 As Double = 30 Dim r2 As Double = 25 Dim p As Double = 35 Dim x1 As Double = r1 + r2 - p Dim y1 As Double = 0 Dim x2 As Double = 0 Dim y2 As Double = 0 page.Canvas.TranslateTransform(100, 100) For i As Integer = 0 To nPoints - 1 Dim t As Double = i * Math.PI / 90 x2 = (r1 + r2) * Math.Cos(t) - p * Math.Cos((r1 + r2) * t / r2) y2 = (r1 + r2) * Math.Sin(t) - p * Math.Sin((r1 + r2) * t / r2) page.Canvas.DrawLine(pen, CSng(x1), CSng(y1), CSng(x2), CSng(y2)) x1 = x2 y1 = y2 Next 'restor graphics page.Canvas.Restore(state) End Sub End Class End Namespace
Effective Screenshot: