InkAnnotPaths.vb
''
'' This code is part of GrapeCity Documents for PDF samples.
'' Copyright (c) GrapeCity, Inc. All rights reserved.
''
Imports System.IO
Imports System.Drawing
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing

'' Shows how to add an ink annotation to a PDF document,
'' and how to render its content using the InkAnnotation.Paths property.
Public Class InkAnnotPaths
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        '' User name for the annotation's author:
        Dim user1 = "Jaime Smith"

        Dim rc = Util.AddNote(
                "This sample creates an ink annotation and shows how to use the InkAnnotation.Paths property " +
                "to render the annotation's content. The content is specified by discrete points that should be " +
                "connected when a PDF viewer renders them. The points can be connected either by straight or " +
                "curved lines depending on the viewer implementation.",
                page)

        Dim inkAnnot = New InkAnnotation() With
            {
                .UserName = user1,
                .Rect = New RectangleF(rc.Left, rc.Bottom + 20, 72 * 5, 72 * 2),
                .LineWidth = 2,
                .Color = Color.DarkBlue,
                .Contents = "This is an ink annotation drawn via InkAnnotation.Paths."
            }
        Dim x0 = 80, x = 80, y = rc.Bottom + 24, h = 18, dx = 2, dy = 4, dx2 = 4, w = 10, xoff = 15

        '' Scribble 'ink annotation' text:

        '' i
        inkAnnot.Paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        inkAnnot.Paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
        '' n
        x += xoff
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
                New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
        '' k
        x += xoff
        inkAnnot.Paths.Add({New PointF(x, y - h / 3), New PointF(x, y + h)})
        inkAnnot.Paths.Add({New PointF(x + w, y), New PointF(x + dx, y + h / 2 - dy), New PointF(x, y + h / 2),
                New PointF(x + dx2, y + h / 2 + dy), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})

        '' a
        x += xoff * 2
        inkAnnot.Paths.Add({New PointF(x + w, y + dy), New PointF(x + w / 2, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
                New PointF(x + w, y + dy), New PointF(x + w, y), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
        '' n
        x += xoff
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
                New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
        '' n
        x += xoff
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
                New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
        '' o
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2 - dx, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
                New PointF(x + w, y + h / 2), New PointF(x + w / 2 + dx, y), New PointF(x + w / 2, y)})
        '' t
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w / 2, y - h / 3), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x + w, y)})
        '' a
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w, y + dy), New PointF(x + w / 2, y), New PointF(x, y + h / 2), New PointF(x + w / 2, y + h),
                New PointF(x + w, y + dy), New PointF(x + w, y), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F)})
        '' t
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w / 2, y - h / 3), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x + w, y)})
        '' i
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        inkAnnot.Paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
        '' o
        x += xoff
        inkAnnot.Paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2 - dx, y), New PointF(x, y + h / 2),
                New PointF(x + w / 2, y + h), New PointF(x + w, y + h / 2), New PointF(x + w / 2 + dx, y), New PointF(x + w / 2, y)})
        '' n
        x += xoff
        inkAnnot.Paths.Add({New PointF(x, y), New PointF(x, y + h), New PointF(x, y + h - dy), New PointF(x + w * 0.7F, y),
                New PointF(x + w - dx / 2, y + h * 0.6F), New PointF(x + w, y + h), New PointF(x + w + dx2, y + h * 0.7F),
                New PointF(x + w * 3, y + h * 0.4F), New PointF(x + w + dx2, y + h + dy * 2), New PointF(x0, y + h + dy)})

        page.Annotations.Add(inkAnnot)

        '' Done:
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class