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

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

        Dim rc = Util.AddNote(
            "このサンプルでは、GcPdfで作成できる注釈の種類を紹介しています。" + 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 = "これは注釈1(赤)です。",
            .Rect = New RectangleF(rc.Right, rc.Top, 72 * 2, 72),
            .Color = Color.Red
        }
        page.Annotations.Add(textAnnot)
        '' 以前の注釈への返信。
        Dim textAnnotReply = New TextAnnotation() With {
            .UserName = user2,
            .Contents = "最初の注釈への返信です。",
            .Rect = New RectangleF(rc.Right, rc.Top, 72 * 2, 72),
            .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, 72 * 2, 72),
            .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 * 4, 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