JavaScriptAction.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
// 
using System;
using System.IO;
using System.Drawing;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Drawing;
using GrapeCity.Documents.Pdf.Annotations;
using GrapeCity.Documents.Pdf.Actions;

namespace DsPdfWeb.Demos.Basics
{
    // PDF アクションを JavaScript スクリプトに関連付ける方法を示します。
    // この例では、スクリプトはページ上のリンクに関連付けられています。
    // なお、JavaScript が一部の PDF ビューワ(ビルトインのブラウザビューワなど)では
    // 動作しないことに注意してください。
    // 詳細は Adobe「PDF へのアクションおよびスクリプトの適用」 を参照してください。
    public class JavaScriptAction
    {
        const string js =
            "var cChoice = app.popUpMenu(\"はじめに\", \" - \", \"第 1 章\",\r\n" +
            "[ \"第 2 章\", \"第 2 章 第 1 節\", \"第 2 章 第 2 節\",\r\n" +
            " \"第 2 章 第 3 節\"], \" - \", \"おわりに\");\r\n" +
            "app.alert(\"'\" + cChoice + \"' が選択されました。\");";

        public int CreatePDF(Stream stream)
        {
            // PDFドキュメントのオブジェクトを生成
            var doc = new GcPdfDocument();
            // ページを追加し、描画するグラフィックスを取得します
            var g = doc.NewPage().Graphics;
            // アクションを作成します
            var jsAction = new ActionJavaScript(js);
            // 描画のためのテキスト形式を作成します。
            var tf = new TextFormat()
            {
                Font = Common.Util.getFont(),
                FontSize = 14
            };
            // 矩形内にリンク文字列を描画します。
            var text = "クリックすると、ポップアップメニューが表示されます。";
            var rect = new RectangleF(new PointF(72, 72), g.MeasureString(text, tf));
            g.FillRectangle(rect, Color.LightGoldenrodYellow);
            g.DrawString(text, tf, rect);
            var result = new LinkAnnotation(rect, jsAction);
            doc.Pages.Last.Annotations.Add(result);
            // ブラウザで正しく表示できない可能性があることに関する警告文を追加します。
            Common.Util.AddNote(
                "注意:JavaScriptは、ビルトインのブラウザビューワなどの一部のPDFビューワでは動作しない場合があります。",
                doc.Pages.Last, new RectangleF(rect.X, rect.Bottom + 36, 400, 400));
            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}