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

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

        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
        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)

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