印刷せずにエンドユーザーが直接入力できる PDF フォームを作成する機能は、ビジネスの効率化に大きなメリットをもたらします。ユーザーはこれらの書類をダウンロードし、入力して保存し、再度送信することができます。印刷やスキャンの手間が不要です。このガイドでは、C# で Spire.PDF for .NET を使用して、PDF に入力可能なフォームを作成、入力、または削除する方法について説明します。
Spire.PDF for .NET は、Spire.Pdf.Fields 名前空間に一連の便利なクラスを提供しており、テキストボックス、チェックボックス、コンボボックス、リストボックス、ラジオボタンなど、さまざまな種類のフォームフィールドを作成・編集できます。以下の表に、このチュートリアルで使用する主要なクラスを示します。
クラス | 説明 |
PdfForm | PDF 文書のインタラクティブフォームを表します。 |
PdfField | PDF 文書のインタラクティブフォームのフィールドを表します。 |
PdfTextBoxField | PDF フォームのテキストボックスフィールドを表します。 |
PdfCheckBoxField | PDF フォームのチェックボックスフィールドを表します。 |
PdfComboBoxField | PDF フォームのコンボボックスフィールドを表します。 |
PdfListBoxField | PDF フォームのリストボックスフィールドを表します。 |
PdfListFieldItem | リストフィールドの項目を表します。 |
PdfRadioButtonListField | PDF フォームのラジオボタンフィールドを表します。 |
PdfRadioButtonListItem | ラジオボタンリストの項目を表します。 |
PdfButtonField | PDF フォームのボタンフィールドを表します。 |
PdfSignatureField | PDF フォームの署名フィールドを表します。 |
Spire.PDF for .NET をインストールします
まず、Spire.PDF for .NET パッケージに含まれている DLL ファイルを .NET プロジェクトの参照として追加する必要があります。DLL ファイルは、このリンクからダウンロードするか、NuGet を介してインストールできます。
PM> Install-Package Spire.PDF
PDF 文書に入力可能なフォームフィールドを作成
PDF フォームを作成するには、対応するフィールドクラスのインスタンスを初期化し、Bounds プロパティを使用してフィールドのサイズと位置を設定し、PdfFormFieldCollection.Add() メソッドを使用して PDF に追加します。Spire.PDF for .NET を使用して PDF 文書にさまざまなタイプのフォームフィールドを作成する手順は以下のとおりです。
- PdfDocument オブジェクトを作成します。
- PdfDocument.Pages.Add() メソッドを使用してページを追加します。
- PdfTextBoxField オブジェクトを作成し、Bounds、フォント、テキストなどのプロパティを設定してから、PdfFormFieldCollection.Add() メソッドを使用して文書に追加します。
- チェックボックス、コンボボックス、リストボックス、ラジオボタン、署名フィールド、ボタンを追加するために、ステップ3を繰り返します。
- PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
- C#
using Spire.Pdf;
using Spire.Pdf.Actions;
using Spire.Pdf.Fields;
using Spire.Pdf.Graphics;
using System.Drawing;
namespace CreateFillableFormsInPdf
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentオブジェクトを作成
PdfDocument doc = new PdfDocument();
//ページを追加
PdfPageBase page = doc.Pages.Add();
//x座標とy座標を初期化
float baseX = 100;
float baseY = 30;
//2つのブラシオブジェクトを作成
PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.Blue));
PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.Black));
//フォントを作成
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Yu Gothic UI", 12f, FontStyle.Regular), true);
//テキストボックスを追加
page.Canvas.DrawString("テキストボックス:", font, brush1, new PointF(10, baseY));
RectangleF tbxBounds = new RectangleF(baseX, baseY, 150, 15);
PdfTextBoxField textBox = new PdfTextBoxField(page, "textbox");
textBox.Bounds = tbxBounds;
textBox.Text = "Hello World";
textBox.Font = font;
doc.Form.Fields.Add(textBox);
baseY += 25;
//2つのチェックボックスを追加
page.Canvas.DrawString("チェックボックス:", font, brush1, new PointF(10, baseY));
RectangleF checkboxBound1 = new RectangleF(baseX, baseY, 15, 15);
PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "checkbox1");
checkBoxField1.Bounds = checkboxBound1;
checkBoxField1.Checked = false;
page.Canvas.DrawString("オプション 1", font, brush2, new PointF(baseX + 20, baseY));
RectangleF checkboxBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
PdfCheckBoxField checkBoxField2 = new PdfCheckBoxField(page, "checkbox2");
checkBoxField2.Bounds = checkboxBound2;
checkBoxField2.Checked = false;
page.Canvas.DrawString("オプション 2", font, brush2, new PointF(baseX + 90, baseY));
doc.Form.Fields.Add(checkBoxField1);
doc.Form.Fields.Add(checkBoxField2);
baseY += 25;
//リストボックスを追加
page.Canvas.DrawString("リストボックス:", font, brush1, new PointF(10, baseY));
RectangleF listboxBound = new RectangleF(baseX, baseY, 150, 50);
PdfListBoxField listBoxField = new PdfListBoxField(page, "listbox");
listBoxField.Items.Add(new PdfListFieldItem("項目 1", "item1"));
listBoxField.Items.Add(new PdfListFieldItem("項目 2", "item2"));
listBoxField.Items.Add(new PdfListFieldItem("項目 3", "item3"));
listBoxField.Bounds = listboxBound;
listBoxField.Font = font;
listBoxField.SelectedIndex = 0;
doc.Form.Fields.Add(listBoxField);
baseY += 60;
//2つのラジオボタンを追加
page.Canvas.DrawString("ラジオボタン:", font, brush1, new PointF(10, baseY));
PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "radio");
PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("option1");
RectangleF radioBound1 = new RectangleF(baseX, baseY, 15, 15);
radioItem1.Bounds = radioBound1;
page.Canvas.DrawString("オプション 1", font, brush2, new PointF(baseX + 20, baseY));
PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("option2");
RectangleF radioBound2 = new RectangleF(baseX + 70, baseY, 15, 15);
radioItem2.Bounds = radioBound2;
page.Canvas.DrawString("オプション 2", font, brush2, new PointF(baseX + 90, baseY));
radioButtonListField.Items.Add(radioItem1);
radioButtonListField.Items.Add(radioItem2);
radioButtonListField.SelectedIndex = 0;
doc.Form.Fields.Add(radioButtonListField);
baseY += 25;
//コンボボックスを追加
page.Canvas.DrawString("コンボボックス:", font, brush1, new PointF(10, baseY));
RectangleF cmbBounds = new RectangleF(baseX, baseY, 150, 15);
PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "combobox");
comboBoxField.Bounds = cmbBounds;
comboBoxField.Items.Add(new PdfListFieldItem("項目 1", "item1"));
comboBoxField.Items.Add(new PdfListFieldItem("項目 2", "item2"));
comboBoxField.Items.Add(new PdfListFieldItem("項目 3", "item3"));
comboBoxField.Items.Add(new PdfListFieldItem("項目 4", "item4"));
comboBoxField.SelectedIndex = 0;
comboBoxField.Font = font;
doc.Form.Fields.Add(comboBoxField);
baseY += 25;
//署名フィールドを追加
page.Canvas.DrawString("署名欄:", font, brush1, new PointF(10, baseY));
PdfSignatureField sgnField = new PdfSignatureField(page, "sgnField");
RectangleF sgnBounds = new RectangleF(baseX, baseY, 150, 80);
sgnField.Bounds = sgnBounds;
doc.Form.Fields.Add(sgnField);
baseY += 90;
//ボタンを追加
page.Canvas.DrawString("ボタン:", font, brush1, new PointF(10, baseY));
RectangleF btnBounds = new RectangleF(baseX, baseY, 50, 15);
PdfButtonField buttonField = new PdfButtonField(page, "button");
buttonField.Bounds = btnBounds;
buttonField.Text = "送信";
buttonField.Font = font;
PdfSubmitAction submitAction = new PdfSubmitAction("https://www.e-iceblue.com/getformvalues.php");
submitAction.DataFormat = SubmitDataFormat.Html;
buttonField.Actions.MouseDown = submitAction;
doc.Form.Fields.Add(buttonField);
//ファイルに保存
doc.SaveToFile("output/PDFにフォームフィールドを作成.pdf", FileFormat.PDF);
doc.Close();
}
}
}
既存の PDF 文書のフォームフィールドに入力
フォームに入力するには、まず PDF 文書からすべてのフォームフィールドを取得し、特定のフィールドの種類を判別した後、値を入力するか、定義済みのリストから選択します。Spire.PDF for .NET を使用して既存の PDF 文書にフォームフィールドを入力する手順は以下のとおりです。
- PdfDocument オブジェクトを作成します。
- PdfDocument.LoadFromFile() メソッドを使用して PDF 文書を読み込みます。
- PdfDocument.Form プロパティを通じてフォームを取得します。
- PdfFormWidget.FieldsWidget プロパティを使用してフォームウィジェットコレクションを取得します。
- フォームウィジェットコレクションをループして、特定の PdfField を取得します。
- そのフィールドがテキストボックスであるかどうかを判別し、該当する場合は PdfTextBoxFieldWidget.Text プロパティを使用してテキストを設定します。
- ステップ6を繰り返して、ラジオボタン、チェックボックス、コンボボックス、リストボックスに値を入力します。
- PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
- C#
using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
namespace FillFormFields
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentオブジェクトを作成
PdfDocument doc = new PdfDocument();
//フォームを含むテンプレートを読み込む
doc.LoadFromFile("Sample1.pdf");
//ドキュメントからフォームを取得
PdfFormWidget form = (PdfFormWidget)doc.Form;
//フォームウィジェットコレクションを取得
PdfFormFieldWidgetCollection formWidgetCollection = form.FieldsWidget;
//ウィジェットをループ処理
for (int i = 0; i < formWidgetCollection.Count; i++)
{
//特定のフィールドを取得
PdfField field = formWidgetCollection[i];
//フィールドがテキストボックスかどうかを確認
if (field is PdfTextBoxFieldWidget)
{
if (field.Name == "name")
{
//テキストボックスのテキストを設定
PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field;
textBoxField.Text = "カイラ・スミス";
}
}
//フィールドがラジオボタンかどうかを確認
if (field is PdfRadioButtonListFieldWidget)
{
if (field.Name == "gender")
{
//ラジオボタンの選択インデックスを設定
PdfRadioButtonListFieldWidget radioButtonListField = (PdfRadioButtonListFieldWidget)field;
radioButtonListField.SelectedIndex = 1;
}
}
//フィールドがコンボボックスかどうかを確認
if (field is PdfComboBoxWidgetFieldWidget)
{
if (field.Name == "country")
{
//コンボボックスの選択インデックスを設定
PdfComboBoxWidgetFieldWidget comboBoxField = (PdfComboBoxWidgetFieldWidget)field;
int[] index = { 0 };
comboBoxField.SelectedIndex = index;
}
}
//フィールドがチェックボックスかどうかを確認
if (field is PdfCheckBoxWidgetFieldWidget)
{
//チェックボックスの「Checked」ステータスを設定
PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;
switch (checkBoxField.Name)
{
case "movie":
checkBoxField.Checked = true;
break;
case "music":
checkBoxField.Checked = true;
break;
}
}
//フィールドがリストボックスかどうかを確認
if (field is PdfListBoxWidgetFieldWidget)
{
if (field.Name == "degree")
{
//リストボックスの選択インデックスを設定
PdfListBoxWidgetFieldWidget listBox = (PdfListBoxWidgetFieldWidget)field;
int[] index = { 1 };
listBox.SelectedIndex = index;
}
}
}
//ファイルに保存
doc.SaveToFile("output/PDFフォームの記入.pdf", FileFormat.PDF);
doc.Close();
}
}
}
フォームフィールドを PDF 文書から削除
PDF 文書のフォームフィールドは、インデックスまたは名前でアクセスでき、PdfFieldCollection.Remove() メソッドを使用して削除できます。Spire.PDF for .NET を使用して、特定のフィールドまたは既存の PDF 文書からすべてのフィールドを削除する手順は以下のとおりです。
- PdfDocument オブジェクトを作成します。
- PdfDocument.LoadFromFile() メソッドを使用して PDF 文書を読み込みます。
- 文書からフォームウィジェットコレクションを取得します。
- ウィジェットコレクションをループして特定の PdfField を取得し、PdfFieldCollection.Remove() メソッドを使用してフィールドを1つずつ削除します。
- 特定のフォームフィールドを削除するには、PdfFormWidget.FieldsWidget["fieldName"] プロパティを使用してフィールドを取得し、PdfFieldCollection.Remove() メソッドを呼び出します。
- PdfDocument.SaveToFile() メソッドを使用して文書を保存します。
- C#
using Spire.Pdf;
using Spire.Pdf.Fields;
using Spire.Pdf.Widget;
namespace RemoveFormFields
{
class Program
{
static void Main(string[] args)
{
//PdfDocumentオブジェクトを作成
PdfDocument doc = new PdfDocument();
//PDFファイルを読み込む
doc.LoadFromFile("Sample.pdf");
//ドキュメントからフォームフィールドを取得
PdfFormWidget formWidget = doc.Form as PdfFormWidget;
//ウィジェットをループ処理
for (int i = formWidget.FieldsWidget.List.Count - 1; i >= 0; i--)
{
//特定のフィールドを取得
PdfField field = formWidget.FieldsWidget.List[i] as PdfField;
//フィールドを削除
formWidget.FieldsWidget.Remove(field);
}
//特定の名前でフィールドを取得
//PdfField field = formWidget.FieldsWidget["name"];
//フィールドを削除
//formWidget.FieldsWidget.Remove(field);
//ファイルに保存
doc.SaveToFile("output/PDFからすべてのフォームファイルを削除.pdf");
doc.Close();
}
}
}
一時ライセンスを申請する
結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。にお問い合わせ、30 日間有効な一時ライセンスを取得してください。