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

namespace DsPdfWeb.Demos
{
    // このサンプルは FormSubmit サンプルに似ていますが、フォームのSubmitボタンと
    // フォームのResetボタンに ActionSound が追加されているため、
    // ユーザーはフォームを送信またはリセットするときに音声によるフィードバックを受け取ることができます。
    // このサンプルをダウンロードしてスタンドアロン モードで実行する場合は、
    // 有効なサーバーを指すように送信 URL を更新する必要があることに注意してください。
    public class FormSubmitSound
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            var rc = Common.Util.AddNote(
                "[フォームを送信する]サンプルと同様に、[送信]ボタンの Activate は ActionSubmitForm に関連付けられ、" +
                "[リセット]ボタンの Activate は ActionResetForm に関連付けられています。" +
                "\nこれらのハンドラーに加えて、このサンプルではボタンの MouseDown イベントが ActionSound に関連付けられているため、" +
                "ユーザーはボタンをクリックしたときに適切な音声フィードバックを受け取ることができます。",
                page);

            var g = page.Graphics;
            var tf = new TextFormat() { Font = Common.Util.getFont(), FontSize = 12 };
            var ip = new PointF(72, rc.Bottom + 36);
            float fldOffset = 72 * 2 + 46;
            float fldHeight = tf.FontSize * 1.2f;
            float dY = 32;

            // テキストフィールド。
            g.DrawString("お名前(姓):", tf, ip);
            var fldFirstName = new TextField() { Name = "LastName", Value = "吉良" };
            fldFirstName.Widget.Page = page;
            fldFirstName.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight);
            fldFirstName.Widget.DefaultAppearance.Font = tf.Font;
            fldFirstName.Widget.DefaultAppearance.FontSize = tf.FontSize;
            doc.AcroForm.Fields.Add(fldFirstName);
            ip.Y += dY;

            // テキストフィールド。
            g.DrawString("お名前(名):", tf, ip);
            var fldLastName = new TextField() { Name = "FirstName", Value = "富似雄" };
            fldLastName.Widget.Page = page;
            fldLastName.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight);
            fldLastName.Widget.DefaultAppearance.Font = tf.Font;
            fldLastName.Widget.DefaultAppearance.FontSize = tf.FontSize;
            doc.AcroForm.Fields.Add(fldLastName);
            ip.Y += dY;

            // チェックボックス。
            g.DrawString("メールマガジンの配信登録:", tf, ip);
            var fldCheckbox = new CheckBoxField() { Name = "Subscribe", Checked = true };
            fldCheckbox.Widget.Page = page;
            fldCheckbox.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, fldHeight, fldHeight);
            doc.AcroForm.Fields.Add(fldCheckbox);
            ip.Y += dY;

            // マルチラインテキストボックス。
            g.DrawString("付加情報:", tf, ip);
            var fldAdditionalInfo = new TextField() { Name = "AdditionalInfo", Multiline = true };
            fldAdditionalInfo.Widget.Page = page;
            fldAdditionalInfo.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight * 2);
            fldAdditionalInfo.Widget.DefaultAppearance.Font = tf.Font;
            fldAdditionalInfo.Widget.DefaultAppearance.FontSize = tf.FontSize;
            doc.AcroForm.Fields.Add(fldAdditionalInfo);
            ip.Y += dY * 2;

            // フォーム送信ボタン。
            var btnSubmit = new PushButtonField();
            btnSubmit.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72, fldHeight);
            btnSubmit.Widget.ButtonAppearance.Caption = "送信";
            btnSubmit.Widget.DefaultAppearance.Font = tf.Font;
            btnSubmit.Widget.Highlighting = HighlightingMode.Invert;
            btnSubmit.Widget.Page = page;

            //送信用のURL(現在はActionSubmitFormを無効化しています)。
            //動作を確認したい場合は、実際に使用可能な送信先URLを入力し、コメントアウトを解除してご利用ください。
            //btnSubmit.Widget.Activate = new ActionSubmitForm("/Samples/HandleFormSubmitFields");
            // 送信ボタンのMouseDownイベントに再生ファイルを設定します。
            btnSubmit.Widget.Events.MouseDown = new ActionSound(SoundObject.FromFile(Path.Combine("Resources", "Sounds", "form-submitted.wav")));
            doc.AcroForm.Fields.Add(btnSubmit);

            // フォームリセットボタン。
            var btnReset = new PushButtonField();
            btnReset.Widget.Rect = new RectangleF(ip.X + fldOffset + 72 * 1.5f, ip.Y, 72, fldHeight);
            btnReset.Widget.ButtonAppearance.Caption = "リセット";
            btnReset.Widget.Highlighting = HighlightingMode.Invert;
            btnReset.Widget.DefaultAppearance.Font = tf.Font;
            btnReset.Widget.Page = page;
            // ボタンのアクティブ化時にフォームをリセットします。
            btnReset.Widget.Activate = new ActionResetForm();
            // リセットボタンのMouseDownイベントに再生ファイルを設定します。
            btnReset.Widget.Events.MouseDown = new ActionSound(SoundObject.FromFile(Path.Combine("Resources", "Sounds", "form-reset.wav")));
            doc.AcroForm.Fields.Add(btnReset);
            ip.Y += dY;

            // PDF ドキュメントを保存します。
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}