InkAnnotPaths.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' © MESCIUS 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

'' PDF ドキュメントにインク注釈を追加する方法、および InkAnnotation.Paths
'' プロパティを使用してそのコンテンツをレンダリングする方法を示します。
Public Class InkAnnotPaths
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        '' 注釈の作成者のユーザー名:
        Dim user1 = "ユーザーA"

        Dim rc = Util.AddNote(
                "このサンプルでは、インク注釈を作成し、InkAnnotation.Paths プロパティを使用して注釈のコンテンツを" +
                "レンダリングする方法を示します。 コンテンツは、PDF ビューワがレンダリングするときに接続される個別の" +
                "ポイントによって指定されます。" +
                "ビューワの実装に応じて、ポイントを直線または曲線で接続できます。",
                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 = "これは、InkAnnotation.Paths を介して描画されるインク注釈です。"
            }
        Dim x0 = 80, x = 80, y = rc.Bottom + 24, h = 18, dx = 2, dy = 4, dx2 = 4, w = 10, xoff = 15

        '' 筆記による 'ink annotation' テキスト:

        '' i
        Dim paths As List(Of PointF()) = New List(Of PointF())
        paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
        '' n
        x += xoff
        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
        paths.Add({New PointF(x, y - h / 3), New PointF(x, y + h)})
        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
        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
        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
        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
        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
        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)})
        paths.Add({New PointF(x, y), New PointF(x + w, y)})
        '' a
        x += xoff
        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
        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)})
        paths.Add({New PointF(x, y), New PointF(x + w, y)})
        '' i
        x += xoff
        paths.Add({New PointF(x + w / 2, y), New PointF(x + w / 2, y + h), New PointF(x + w, y + h * 0.7F)})
        paths.Add({New PointF(x + w / 2 - dx, y - h / 3 + dy), New PointF(x + w / 2 + dx, y - h / 3)})
        '' o
        x += xoff
        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
        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)})
        inkAnnot.Paths = paths

        page.Annotations.Add(inkAnnot)

        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class