How to Draw Special Shapes in PDF

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#]
        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]
        Private Shared Sub DrawPath(ByVal page As PdfPageBase)
            Dim points(4) As PointF
            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 i
            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(50.0F, 50.0F)
            page.Canvas.TranslateTransform(5.0F, 1.2F)
            page.Canvas.DrawPath(pen, path)

            page.Canvas.TranslateTransform(2.0F, 0.0F)
            path.FillMode = PdfFillMode.Alternate
            page.Canvas.DrawPath(pen, brush1, path)

            page.Canvas.TranslateTransform(2.0F, 0.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(-4.0F, 2.0F)
            path.FillMode = PdfFillMode.Alternate
            page.Canvas.DrawPath(pen, brush2, path)

            Dim brush3 As New PdfRadialGradientBrush(New PointF(0.0F, 0.0F), _
                0.0F, New PointF(0.0F, 0.0F), 1.0F, Color.Red, Color.Blue)
            page.Canvas.TranslateTransform(2.0F, 0.0F)
            path.FillMode = PdfFillMode.Winding
            page.Canvas.DrawPath(pen, brush3, path)

            Dim brush4 As New PdfTilingBrush(New RectangleF(0, 0, 4.0F, 4.0F))
            brush4.Graphics.DrawRectangle(brush2, 0, 0, 4.0F, 4.0F)

            page.Canvas.TranslateTransform(2.0F, 0.0F)
            path.FillMode = PdfFillMode.Winding
            page.Canvas.DrawPath(pen, brush4, path)

            'restor graphics
            page.Canvas.Restore(state)
        End Sub

Effective Screenshot:

Draw Special Shapes in PDF

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#]
        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]
        Private Shared Sub DrawSpiral(ByVal 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 i

            'restor graphics
            page.Canvas.Restore(state)
        End Sub

Effective Screenshot:

Draw Special Shapes in PDF