FormFields.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.Pdf.AcroForms;
using GrapeCity.Documents.Pdf.Annotations;
using GrapeCity.Documents.Pdf.Actions;
namespace DsPdfWeb.Demos
{
// テキストボックス、チェックボックス、プッシュボタンなど、
// 各種フォームフィールドを作成する方法を示しています。
public class FormFields
{
public int CreatePDF(Stream stream)
{
var doc = new GcPdfDocument();
var page = doc.NewPage();
var g = page.Graphics;
var tf = new TextFormat();
tf.FontName = "Yu Gothic";
tf.FontSize = 14;
var ip = new PointF(72, 72);
float fldOffset = 72 * 2;
float fldHeight = tf.FontSize * 1.2f;
float dY = 32;
// テキストフィールド。
g.DrawString("テキストフィールド:", tf, ip);
var fldText = new TextField();
fldText.Value = "初期値を表示できます。";
fldText.Widget.Page = page;
fldText.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight);
fldText.Widget.DefaultAppearance.Font = tf.Font;
fldText.Widget.DefaultAppearance.FontSize = tf.FontSize;
doc.AcroForm.Fields.Add(fldText);
ip.Y += dY;
// チェックボックス。
g.DrawString("チェックボックス:", tf, ip);
var fldCheckbox = new CheckBoxField();
fldCheckbox.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 fldRadio = new RadioButtonField();
fldRadio.Value = 1;
fldRadio.Widgets.Add(new WidgetAnnotation(page, new RectangleF(ip.X + fldOffset, ip.Y, fldHeight, fldHeight)));
fldRadio.Widgets.Add(new WidgetAnnotation(page, new RectangleF(ip.X + fldOffset, ip.Y + fldHeight * 1.2f, fldHeight, fldHeight)));
fldRadio.Widgets.Add(new WidgetAnnotation(page, new RectangleF(ip.X + fldOffset, ip.Y + (fldHeight * 1.2f) * 2, fldHeight, fldHeight)));
doc.AcroForm.Fields.Add(fldRadio);
ip.Y = fldRadio.Widgets[fldRadio.Widgets.Count - 1].Rect.Y + dY;
// マス目フィールド。
g.DrawString("マス目フィールド:", tf, ip);
var fldCombText = new CombTextField();
fldCombText.Value = "123";
fldCombText.Widget.DefaultAppearance.FontSize = 12;
fldCombText.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight);
fldCombText.Widget.Page = page;
doc.AcroForm.Fields.Add(fldCombText);
ip.Y += dY;
// コンボボックス。
g.DrawString("コンボボックス:", tf, ip);
var fldComboBox = new ComboBoxField();
fldComboBox.Items.Add(new ChoiceFieldItem("選択肢1"));
fldComboBox.Items.Add(new ChoiceFieldItem("選択肢2"));
fldComboBox.Items.Add(new ChoiceFieldItem("選択肢3"));
fldComboBox.SelectedIndex = 1;
fldComboBox.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 3, fldHeight);
fldComboBox.Widget.Page = page;
doc.AcroForm.Fields.Add(fldComboBox);
ip.Y += dY;
// リストボックス。
g.DrawString("リストボックス:", tf, ip);
ListBoxField fldListBox = new ListBoxField();
fldListBox.Items.Add(new ChoiceFieldItem("リスト項目1"));
fldListBox.Items.Add(new ChoiceFieldItem("リスト項目2"));
fldListBox.Items.Add(new ChoiceFieldItem("リスト項目3"));
fldListBox.SelectedIndexes = new int[] { 0, 2 };
fldListBox.MultiSelect = true;
fldListBox.CommitOnSelChange = true;
fldListBox.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 100, 60);
fldListBox.Widget.Page = page;
doc.AcroForm.Fields.Add(fldListBox);
ip.Y = fldListBox.Widget.Rect.Bottom - fldHeight + dY;
// 署名フィールド。
g.DrawString("電子署名:", tf, ip);
var fldSignature = new SignatureField();
fldSignature.AlternateName = "署名された文書は全てのフィールドがロックされます";
fldSignature.LockedFields = new SignatureLockedFields();
fldSignature.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72 * 2, 72 - dY);
fldSignature.Widget.DefaultAppearance.FontSize = 8;
fldSignature.Widget.ButtonAppearance.Caption = "クリックして署名";
fldSignature.Widget.Border = new Border() { Width = 0.5f, Color = Color.DarkSeaGreen };
fldSignature.Widget.Page = page;
doc.AcroForm.Fields.Add(fldSignature);
ip.Y += 72 - fldHeight;
// ボタン。
g.DrawString("ボタン:", tf, ip);
// フォーム送信ボタン。
var btnSubmit = new PushButtonField();
btnSubmit.Widget.Rect = new RectangleF(ip.X + fldOffset, ip.Y, 72, fldHeight);
btnSubmit.Widget.ButtonAppearance.Caption = "送信";
btnSubmit.Widget.Highlighting = HighlightingMode.Invert;
btnSubmit.Widget.Activate = new ActionSubmitForm("Sample Form Submit URI");
btnSubmit.Widget.Page = page;
doc.AcroForm.Fields.Add(btnSubmit);
// ip.Y += dY;
// フォームリセットボタン。
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.Activate = new ActionResetForm();
btnReset.Widget.Page = page;
doc.AcroForm.Fields.Add(btnReset);
ip.Y += dY;
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}