AnnotationTypes.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ドキュメントに追加する方法を示します。
Public Class Annotations
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()
        Dim page = doc.NewPage()
        '' 注釈の作成者のユーザー名。
        Dim user1 = "作成者1"
        Dim user2 = "作成者2"

        Dim tf = New TextFormat() With {.Font = StandardFonts.Helvetica, .FontSize = 10}
        Dim noteWidth = 72 * 4
        Dim gap = 8

        Dim rc = Util.AddNote(
            "このサンプルでは、DsPdfで作成できる注釈の種類を紹介しています。" + vbLf +
            "一部の注釈タイプは、特定のビューワ(ブラウザの組み込みビューワなど)では表示されない場合があります。" +
            "このページの注釈をすべて表示するには、Acrobat Readerまたはその他のフル機能のPDFビューワが必要です。",
            page)

        '' テキスト注釈。
        Dim ip = New PointF(rc.X, rc.Bottom + gap)
        rc = Util.AddNote(
            "このメモの右側には、赤色のテキスト注釈があります。",
            page, New RectangleF(ip.X, ip.Y, noteWidth, 100))
        Dim textAnnot = New TextAnnotation() With {
            .UserName = user1,
            .Contents = "これは注釈(赤)です。",
            .Rect = New RectangleF(rc.Right, rc.Top, 36, 36),
            .Color = Color.Red
        }
        page.Annotations.Add(textAnnot)
        '' 以前の注釈への返信。
        Dim textAnnotReply = New TextAnnotation() With {
            .UserName = user2,
            .Contents = "最初の注釈への返信です。",
            .Rect = New RectangleF(rc.Right, rc.Top, 36, 36),
            .ReferenceAnnotation = textAnnot,
            .ReferenceType = AnnotationReferenceType.Reply
        }
        page.Annotations.Add(textAnnotReply)

        '' 最初からコメントが表示されているテキスト注釈。
        ip = New PointF(rc.X, rc.Bottom + gap)
        rc = Util.AddNote(
            "このメモの右側には、最初からコメントが表示されている緑色のテキスト注釈があります。",
            page, New RectangleF(ip.X, ip.Y, noteWidth, 100))
        Dim textAnnotOpen = New TextAnnotation() With {
            .Open = True,
            .UserName = user1,
            .Contents = "これはコメントが表示されている注釈(緑)です。",
            .Rect = New RectangleF(rc.Right, rc.Top, 36, 36),
            .Color = Color.Green
        }
        page.Annotations.Add(textAnnotOpen)

        '' フリーテキスト注釈(ページに直接表示)。
        ip = New PointF(rc.X, rc.Bottom + gap)
        rc = Util.AddNote(
            "右下に青いフリーテキスト注釈が配置されており、そこからこのメモへと吹き出し線が描画されています。",
            page, New RectangleF(ip.X, ip.Y, noteWidth, 100))
        Dim freeAnnot = New FreeTextAnnotation() With {
            .Rect = New RectangleF(rc.Right + 18, rc.Bottom + 9, 72 * 2, 72),
            .CalloutLine = {
                New PointF(rc.Left + rc.Width / 2, rc.Bottom),
                New PointF(rc.Left + rc.Width / 2, rc.Bottom + 9 + 36),
                New PointF(rc.Right + 18, rc.Bottom + 9 + 36)
            },
            .LineWidth = 1,
            .LineEndStyle = LineEndingStyle.OpenArrow,
            .LineDashPattern = New Single() {8, 4},
            .Contents = "これはフリーテキスト注釈で、左上のメモに向かう吹き出し線があります。",
            .Color = Color.LightSkyBlue
        }
        page.Annotations.Add(freeAnnot)

        '' 内部にリッチテキストを含む別のフリーテキスト注釈。
        ip = New PointF(rc.X, freeAnnot.Rect.Bottom + gap)
        Dim freeRichAnnot = New FreeTextAnnotation() With {
            .Rect = New RectangleF(ip.X - 144, ip.Y, 72 * 5, 72),
            .LineWidth = 1,
            .Color = Color.LightSalmon,
            .RichText =
                "<body><p>これは<i>フリーテキスト注釈</i>です<b><i>リッチテキスト</i></b>が含まれています。</p>" +
                "<p><br /><b>フリーテキスト注釈</b>は、ページに直接テキストが表示されますが、" +
                "他の注釈としてページの境界の外に置くこともできます。</p></body>"
        }
        page.Annotations.Add(freeRichAnnot)

        '' ノートの周りの四角形注釈。
        ip = New PointF(rc.X, freeRichAnnot.Rect.Bottom + gap * 2)
        rc = Util.AddNote(
            "このメモの周りには、3pt幅のオレンジ色の線で描画された四角形注釈があり、リッチテキストが紐づけられています。",
            page, New RectangleF(ip.X, ip.Y, noteWidth, 100))

        rc.Inflate(8, 8)
        Dim squareAnnot = New SquareAnnotation() With {
            .UserName = user2,
            .Rect = rc,
            .LineWidth = 3,
            .Color = Color.Orange,
            .RichText =
                "<body><p>この<b><i>リッチテキスト</i></b>はテキストメモの周りに描画された四角形注釈に紐づいています。</p></body>"
        }
        page.Annotations.Add(squareAnnot)
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class