FillForm.cs
//
// このコードは、DioDocs for PDF のサンプルの一部として提供されています。
// © MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Text;
using GrapeCity.Documents.Pdf;
using GrapeCity.Documents.Text;
using GrapeCity.Documents.Pdf.AcroForms;
namespace DsPdfWeb.Demos
{
// FormFieldsサンプルで作成されたフォームを読み込み、
// そのファイルにあるすべてのフォームフィールドをループし、
// 入力フィールドの値を変更します。
// 実行ログ(古い値と新しい値の記録)がフォームページに追加されます。
public class FillForm
{
public int CreatePDF(Stream stream)
{
// 読み込んだ PDF を操作している間は、元のファイルストリームを開いたままにしておく必要があります。詳しくは、LoadPDF を参照してください。
using var fs = File.OpenRead(Path.Combine("Resources", "PDFs", "FormFields.pdf"));
var doc = new GcPdfDocument();
doc.Load(fs);
var page = doc.Pages.Last;
var sb = new StringBuilder();
sb.AppendLine("サンプルコードで行われた更新のログ:\r\n");
foreach (Field fld in doc.AcroForm.Fields)
{
if (fld is CombTextField ctfld)
{
sb.Append($"マス目フィールド : '{ctfld.Value}', ");
ctfld.Value = "新しいマス目フィールド";
sb.AppendLine($" ⇒ ⇒ '{ctfld.Value}'.");
}
else if (fld is TextField tfld)
{
sb.Append($"テキストフィールド : '{tfld.Value}', ");
tfld.Value = $"更新日時 : {DateTime.Now}";
sb.AppendLine($" ⇒ ⇒ '{tfld.Value}'.");
}
else if (fld is CheckBoxField cfld)
{
sb.Append($"チェックボックス : '{cfld.Checked}', ");
cfld.Checked = !cfld.Checked;
sb.AppendLine($" ⇒ ⇒ '{cfld.Checked}'.");
}
else if (fld is RadioButtonField rbfld)
{
sb.Append($"ラジオボタン : '{rbfld.Value}', ");
rbfld.Value = rbfld.Widgets.Count - 1;
sb.AppendLine($" ⇒ ⇒ '{rbfld.Value}'.");
}
else if (fld is ComboBoxField cmbfld)
{
sb.Append($"コンボボックスフィールドの選択 : '{cmbfld.Items[cmbfld.SelectedIndex].Text}', ");
cmbfld.SelectedIndex = cmbfld.Items.Count - 1;
sb.AppendLine($" ⇒ ⇒ '{cmbfld.Items[cmbfld.SelectedIndex].Text}'.");
}
else if (fld is ListBoxField lbfld)
{
sb.Append($"リストボックスフィールドの選択 : '{lbfld.Items[lbfld.SelectedIndex].Text}', ");
lbfld.SelectedIndex = lbfld.Items.Count - 1;
sb.AppendLine($" ⇒ ⇒ '{lbfld.Items[lbfld.SelectedIndex].Text}'.");
}
else if (fld is SignatureField sfld)
{
sb.AppendLine("署名フィールドが存在");
}
else if (fld is PushButtonField btnfld)
{
sb.AppendLine($"ボタンフィールドが存在 '{btnfld.Widget.ButtonAppearance.Caption}' ");
}
else
{
sb.AppendLine($"その他 '{fld}' が存在/");
}
}
// ページの一番下に到達したことのログを追加します。
var tl = new TextLayout(72)
{
MaxWidth = page.Size.Width,
MaxHeight = page.Size.Height,
MarginLeft = 80,
MarginRight = 80,
MarginBottom = 80,
ParagraphAlignment = ParagraphAlignment.Far
};
tl.Append(sb.ToString(), new TextFormat() { Font = Common.Util.getFont(), FontSize = 10 });
tl.PerformLayout(true);
var rc = tl.ContentRectangle;
rc.Inflate(8, 8);
page.Graphics.FillRectangle(rc, Color.LightYellow);
page.Graphics.DrawRectangle(rc, Color.Orange);
page.Graphics.DrawTextLayout(tl, PointF.Empty);
// PDF ドキュメントを保存します。
doc.Save(stream);
return doc.Pages.Count;
}
}
}