JavaScriptAction.cs
// 
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// Copyright (c) GrapeCity 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 GcPdfWeb.Samples.Basics
{
    // PDF アクションを JavaScript スクリプトに関連付ける方法を示します。
    // この例では、スクリプトはページ上のリンクに関連付けられています。 
    // JavaScript が一部の PDF ビューア(ビルトインブラウザビューアなど)では
    // 動作しないことに注意してください。
    // 詳細は Adobe「PDF へのアクションおよびスクリプトの適用」 を参照してください。
    public class JavaScriptAction
    {
        const string js =
            "var cChoice = app.popUpMenu(\"はじめに\", \"序章\", \"第一章\",\r\n" +
            "[ \"第一章\", \"第二章 序盤\", \"第二章 中盤\",\r\n" +
            "[\"第二章 終盤\", \"おわり\"]]);\r\n" +
            "app.alert(\"メニューから '\" + cChoice + \"' を選択しました。\");";

        public void CreatePDF(Stream stream)
        {
            // PDFドキュメントのオブジェクトを生成
            var doc = new GcPdfDocument();
            // ページを追加し、描画するグラフィックスを取得します
            var g = doc.NewPage().Graphics;
            // アクションを作成します
            ActionJavaScript jsAction = new ActionJavaScript(js);
            // 「Hello World!」と描画するためのテキスト形式を作成します。
            TextFormat tf = new TextFormat()
            {
                Font = GcPdfWeb.Samples.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);
        }
    }
}