C＃を使用してPDFでフィールドを作成および入力する方法

ご存知のとおり、通常PDFドキュメントは編集および変更などはできません。ユーザーがPDFドキュメントの他のコンテンツに署名または入力する必要がある場合は、PDFドキュメントに編集可能なフィールドが必要です。開発者は、PDFテンプレートフィールドにデータをプログラムで入力する必要もしばしばあります。このとき、次の2つの問題を解決しなければなりません。
・どうやってPDFで編集可能なフィールドを作成しますか？
・どうやってフィールドにコンテンツを正確に入力しますか？
次は、C＃およびSpire.PDFコンポーネントを使用してこの機能を実現する方法を紹介します。

## Spire.PDFコンポーネントの概要
Spire.PDF for .NETは、開発者が.NET（C#、VB.NET、ASP.NET、.NET Core、.NET 5.0、MonoAndroid ＆Xamarin.iOS）プラットホームでPDFのドキュメントを迅速かつ高品質で作成・編集・変換・印刷するために設計された専門的なPDF処理APIです。これは完全に独立したスタンドアロンAPIであり、Adobe Acrobatを実行環境にインストールする必要はありません。また、無料版の[Free Spire.PDF](https://www.e-iceblue.com/Introduce/free-pdf-component.html)も提供しています。個人的に使用するならこれが十分です。

インストールには、公式Webサイトや、開発者が好んで一般的に使用しているNuGetメソッドなど、多くのチャネルがあります。Visual StudioのNuGetパッケージマネージャーコンソールで次のPowerShellコマンドを入力し、Enterキーを押すと、コンポーネントのdllがプロジェクトに自動的に参照されます。

PM> Install-Package Spire.PDF

## フィールドの作成と入力の実装
### 1フィールドの作成
このコンポーネントは、さまざまなPDFフィールドを作成できる多くの対応するクラスを提供します。それでは、PDFドキュメントで最も一般的な2つの編集可能なフィールドである、テキストフィールドと署名フィールドを紹介します。
**1.1テキストフィールド**

まず、簡単なテキストフィールドを作成します。フィールドの名前を、作成時に指定した方がいいです。こうすると、ドキュメントに複数のテキストフィールドが同時に存在する場合、プログラムでフィールドに入力するときに、コンテンツをすばやく正確に確認して入力できます。注意すべきなのは、フィールド名を繰り返さないこと。さもないと、フィールド名に対応するすべてのフィールドにコンテンツが入力されます。
```
//PDFドキュメントを作成する
PdfDocument pdf = new PdfDocument();

//新しいページを追加する
PdfPageBase page = pdf.Pages.Add(PdfPageSize.A4, new PdfMargins());

//ページにテキストを追加する
PdfTrueTypeFont font = new PdfTrueTypeFont(new Font("Arial Unicode MS", 10f), true);
page.Canvas.DrawString("年齢:", font, PdfBrushes.DeepSkyBlue, 10, 50);

//テキストフィールドを作成してその名前を指定する
PdfTextBoxField textbox = new PdfTextBoxField(page, "Age");

//テキストフィールドのサイズ、位置、フォントを設定する
textbox.Bounds = new RectangleF(40, 50, 50, 12);
textbox.Font = font;

//ドキュメントにテキストフィールドを追加する 
pdf.Form.Fields.Add(textbox);

//ドキュメントを保存する
pdf.SaveToFile("Fields.pdf");
```

もちろん、ほとんどの場合は、単にテキストフィールドを作成するだけでなく、境界線、背景色、フォントの色、フォントの配置など、他の設定も行う必要があります。指定したテキストフィールドの入力内容（日付のみ、特定の範囲内の数字など）も入力できます。
フォーマットを設定する：
```
//ボーダーを設定する
textbox.BorderWidth = 0.75f;
textbox.BorderStyle = PdfBorderStyle.Solid;
textbox.BorderColor = Color.Black;

//背景色を設定する
textbox.BackColor = Color.Yellow;

//フォントの色を設定する
textbox.ForeColor = Color.Red;

//フォントの配置を設定する 
textbox.TextAlignment = PdfTextAlignment.Center;
```

Adobe Acrobatは、開発者がJavaScriptを使用して、テキストフィールドの入力コンテンツの形式や種類などを事前に定義することをサポートしています。今回のコンポーネントはこのタイプのスクリプトもサポートし、これらの関数を実装するための対応するメソッドを提供しています。次の表の通り、JavaScriptとメソッドをいくつか示します。

サンプルコード：
```
//入力データを1〜100の範囲で指定する
string js = PdfJavaScript.GetRangeValidateString(true, 1, true, 100);
PdfJavaScriptAction jsAction = new PdfJavaScriptAction(js);
textbox.Actions.Validate = jsAction;
```
**1.2署名フィールド**
署名フィールドの作成はテキストフィールドに似ており、フィールドの境界線、サイズ、位置などのプロパティを設定することもできます。
```
//署名フィールドを作成し、フィールド名を指定する
PdfSignatureField signaturefield = new PdfSignatureField(page, "Signature");

//フィールドの境界を設定する
signaturefield.BorderWidth = 1.0f;
signaturefield.BorderStyle = PdfBorderStyle.Solid;
signaturefield.BorderColor = new PdfRGBColor(System.Drawing.Color.Black);

//ハイライトモードを設定する
signaturefield.HighlightMode = PdfHighlightMode.Outline;

//サイズと位置を設定する
signaturefield.Bounds = new RectangleF(40, 150, 200, 100);

//ページに署名フィールドを追加する
pdf.Form.Fields.Add(signaturefield);
```

### 2.フィールドに入力します
フィールドに入力するときは、最初にドキュメント内のすべてのフィールドを取得してから、指定したフィールドを1つずつ入力する必要があります。同じタイプのフィールドが複数である場合は、フィールドの名前を使用してすばやく入力できます。
```
//PDFドキュメントをロードする
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("Fields.pdf");

//最初のページを取得する
PdfPageBase page = pdf.Pages[0];

//ドキュメントのすべてのフィールドを取得する
PdfFormWidget form = pdf.Form as PdfFormWidget;

//最初のテキストフィールドに入力する
PdfTextBoxFieldWidget textboxField = form.FieldsWidget[0] as PdfTextBoxFieldWidget;
textboxField.Text = "25";

//2番目の署名フィールドに入力する
PdfSignatureFieldWidget signatureField = form.FieldsWidget[1] as PdfSignatureFieldWidget;
String pfxPath = @"gary.pfx";
PdfCertificate digi = new PdfCertificate(pfxPath, "123456");
PdfSignature signature = new PdfSignature(pdf, page, digi, "demo", signatureField);
signature.IsTag = true;
signature.DigitalSigner = "Gary";
signature.ConfigGraphicType = ConfiguerGraphicType.TextSignInformation;

//ドキュメントを保存する
pdf.SaveToFile("Fill.pdf");
```

上記は、PDFでフィールドの作成と入力の機能の紹介です、最後まで読んでいただきありがとうございました。