Destinations.vb
'' 
'' このコードは、DioDocs for PDF のサンプルの一部として提供されています。
'' Copyright (c) GrapeCity inc. All rights reserved.
'' 
Imports System.IO
Imports System.Drawing
Imports System.Numerics
Imports GrapeCity.Documents.Pdf
Imports GrapeCity.Documents.Text
Imports GrapeCity.Documents.Drawing
Imports GrapeCity.Documents.Pdf.Annotations
Imports GrapeCity.Documents.Pdf.Actions

'' 移動先を作成し、文書本体のアウトラインノードまたは
'' リンクに関連付ける方法を示します。
Public Class Destinations
    Function CreatePDF(ByVal stream As Stream) As Integer
        Dim doc = New GcPdfDocument()

        Dim page1 = doc.NewPage()
        Dim page2 = doc.NewPage()
        Dim page3 = doc.NewPage()

        Dim mainNote = Util.AddNote(
            "これは1ページ目です。" + vbLf + vbLf + vbLf +
            "さまざまな移動先指定の例です。" + vbLf + vbLf +
            "ドキュメントのアウトラインツリーのノードに添付された移動先:" + vbLf +
            "  - 1 ページ:このページに移動し、ページ全体に合わせて表示" + vbLf +
            "  - 2 ページ:2ページ目に移動し、ページ全体に合わせて表示" + vbLf +
            "    -- ズーム率 200%: 2ページ目のメモ2に移動し、200%の拡大率で表示" + vbLf +
            "    -- ズーム率 100%: 2ページ目を100%で表示" + vbLf +
            "    -- 1 ページ目に戻る: このページに戻る" + vbLf +
            "  - 3 ページ: 3ページ目に移動し、ページ全体に合わせて表示" + vbLf +
            "    -- 3ページ目のメモにズーム: 3ページ目を表示しメモを拡大" + vbLf +
            "    -- 1 ページ目に戻る: このページに戻る" + vbLf +
            "  - 名前付き移動先: NamedDestinations辞書の名前でキー入力" + vbLf +
            "    -- P-1" + vbLf +
            "    -- P-2" + vbLf +
            "    -- P-3" + vbLf + vbLf +
            "ドキュメント本体の領域に関連付けした移動先:",
            page1)
        Util.AddNote(
            "これは2ページ目です。",
            page2)
        Dim noteOnPage2 = Util.AddNote(
            "2ページ目のメモ2",
            page2, New RectangleF(300, 400, 200, 300))
        Util.AddNote(
            "これは3ページ目です。",
            page3)
        Dim noteOnPage3 = Util.AddNote(
            "これは長めの文を設定したメモです。" + vbLf + "(確認用として改行を挿入)" + vbLf + "3ページ目に配置しています。",
            page3, New RectangleF(200, 440, 200, 300))

        '' アウトラインツリーの移動先。

        '' DestinationFit: ページ全体に合わせます。
        Dim on1 = New OutlineNode("1 ページ", New DestinationFit(0))
        doc.Outlines.Add(on1)

        Dim on2 = New OutlineNode("2 ページ", New DestinationFit(1))
        doc.Outlines.Add(on2)
        '' DestinationXYZ:上/左座標とズームレベル(1 は 100%)を指定できます。
        on2.Children.Add(New OutlineNode("ズーム率 200%", New DestinationXYZ(1, noteOnPage2.X, noteOnPage2.Y, 2)))
        on2.Children.Add(New OutlineNode("ズーム率 100%", New DestinationXYZ(1, Nothing, Nothing, 1)))
        '' 1ページ目に戻るリンクを追加します。
        on2.Children.Add(New OutlineNode("1 ページ目に戻る", New DestinationFit(0)))

        Dim on3 = New OutlineNode("3 ページ", New DestinationFit(2))
        doc.Outlines.Add(on3)
        '' DestinationFitR :ページ上に矩形を合わせます。
        on3.Children.Add(New OutlineNode("3 ページ目のメモにズーム", New DestinationFitR(2, noteOnPage3)))
        '' 1ページ目と2ページ目に戻るリンクを追加します。
        on3.Children.Add(New OutlineNode("2 ページ目に移動", New DestinationFit(1)))
        on3.Children.Add(New OutlineNode("1 ページ目に移動", New DestinationFit(0)))

        '' ドキュメントの本文内の移動先(アウトラインからの移動先を再利用)。
        '' 2ページ目に移動します。
        Dim rc = Util.AddNote("2 ページ目に移動", page1, New RectangleF(72, mainNote.Bottom + 18, 200, 72))
        page1.Annotations.Add(New LinkAnnotation(rc, on2.Dest))
        '' 3ページ目に移動します。
        rc = Util.AddNote("3 ページ目に移動", page1, New RectangleF(72, rc.Bottom + 18, 200, 72))
        page1.Annotations.Add(New LinkAnnotation(rc, on3.Dest))

        '' 移動先に名前を付けて、ドキュメントの NamedDestinations 辞書に追加することもできます。
        doc.NamedDestinations.Add("page1", New DestinationFit(0))
        doc.NamedDestinations.Add("page2", New DestinationFit(1))
        doc.NamedDestinations.Add("page3", New DestinationFit(2))
        '' 次に、DestinationRefクラスを使用して参照できます。ここで、これらをアウトラインに追加します。
        Dim onNamed = New OutlineNode("Named destinations", CType(Nothing, DestinationBase))
        doc.Outlines.Add(onNamed)
        onNamed.Children.Add(New OutlineNode("Named: page1", New DestinationRef("page1")))
        onNamed.Children.Add(New OutlineNode("Named: page2", New DestinationRef("page2")))
        onNamed.Children.Add(New OutlineNode("Named: page3", New DestinationRef("page3")))
        ''
        '' PDF ドキュメントを保存します。
        doc.Save(stream)
        Return doc.Pages.Count
    End Function
End Class