FormSubmit.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
{
    // このサンプルは、ユーザーが送信できる AcroForm PDF を作成する方法を示します。
    // ここでは、その内容をデモサーバーに送信します。サーバーはそのデータを受信し、
    // 特別な形式で返送します。
    public class FormSubmit
    {
        public int CreatePDF(Stream stream)
        {
            var doc = new GcPdfDocument();
            var page = doc.NewPage();

            var rc = Common.Util.AddNote(
                "このサンプルでは、Submit ボタンは ActionSubmitForm アクションに関連付けられており、" +
                "URL はサンプルサーバー上で実行されている POST ハンドラを指しています。" +
                "フォームが送信されると、そのハンドラは入力されたフォームからフォームのフィールド名と" +
                "フィールド値のコレクションを受け取り、それをシンプルな HTML ページに返します。" +
                "このサンプルをダウンロードした場合、正常に実行するには、独自のハンドラを設定し、" +
                "[送信]ボタンアクションの URL をそのハンドラを指すように変更する必要があります。",
                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。
            btnSubmit.Widget.Activate = new ActionSubmitForm("/Samples/HandleFormSubmitFields");
            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();
            doc.AcroForm.Fields.Add(btnReset);
            ip.Y += dY;

            // Done:
            doc.Save(stream);
            return doc.Pages.Count;
        }
    }
}