JavaはPDFにフォームフィールドを追加します

インタラクティブフィールドとも呼ばれるPDFフォームフィールドは、主にユーザー情報の収集に使用されます。一般的なフォームフィールドには、ラジオボタン、チェックボックス、リストボックス、およびコンボボックスが含まれます。このテキストでは、Free Spire.PDF for Javaを使用して、JavaプログラムでPDFフォームフィールドを作成する方法を紹介します。

**JARパッケージのインポート**
**方法1：**[Free Spire.PDF for Java](https://www.e-iceblue.com/Download/pdf-for-java-free.html)をダウンロードして解凍し、libフォルダー内のjarパッケージを依存関係としてJavaアプリケーションに直接インポートします。

**方法2：**Mavenリポジトリーからjarパッケージをインストールし、pom.xmlファイルのコードを次のように構成します。

```java
<repositories>
   <repository>
      <id>com.e-iceblue</id>
      <name>e-iceblue</name>
      <url>http://repo.e-iceblue.com/nexus/content/groups/public/</url>
   </repository>
</repositories>
<dependencies>
   <dependency>
      <groupId>e-iceblue</groupId>
      <artifactId>spire.pdf.free</artifactId>
      <version>2.6.3</version>
   </dependency>
</dependencies>
```

**Javaコード**

```java
import java.awt.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.fields.*;
import com.spire.pdf.graphics.*;

public class AddFormFields {
    public static void main(String[] args) throws Exception {

        //PdfDocumentオブジェクトを作成する
        PdfDocument doc = new PdfDocument();

        //ページを追加
        PdfPageBase page = doc.getPages().add();

        //位置変数を初期化する
        float baseX = 100;
        float baseY = 0;

        //ブラシオブジェクトを作成する
        PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.BLUE));
        PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.black));

        //TrueTypeフォントを作成する
        PdfTrueTypeFont font= new PdfTrueTypeFont(new Font("MS Mincho",Font.PLAIN,12),true);

        //チェックボックスを追加
        page.getCanvas().drawString("チェックボックス：", font, brush1, new Point2D.Float(0, baseY));
        java.awt.geom.Rectangle2D.Float rec1 = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 15, 15);
        PdfCheckBoxField checkBoxField = new PdfCheckBoxField(page, "CheckBox1");
        checkBoxField.setBounds(rec1);
        checkBoxField.setChecked(false);
        page.getCanvas().drawString("オプション2", font, brush2, new Point2D.Float(baseX + 20, baseY));
        java.awt.geom.Rectangle2D.Float rec2 = new java.awt.geom.Rectangle2D.Float(baseX + 70, baseY, 15, 15);
        PdfCheckBoxField checkBoxField1 = new PdfCheckBoxField(page, "CheckBox2");
        checkBoxField1.setBounds(rec2);
        checkBoxField1.setChecked(false);
        page.getCanvas().drawString("オプション2", font,  brush2, new Point2D.Float(baseX+90, baseY));
        doc.getForm().getFields().add(checkBoxField);
        baseY += 25;

        //リストボックスを追加
        page.getCanvas().drawString("リストボックス：", font, brush1, new Point2D.Float(0, baseY));
        java.awt.geom.Rectangle2D.Float rec = new java.awt.geom.Rectangle2D.Float(baseX, baseY, 150, 50);
        PdfListBoxField listBoxField = new PdfListBoxField(page, "ListBox");
        listBoxField.getItems().add(new PdfListFieldItem("アイテム1", "item1"));
        listBoxField.getItems().add(new PdfListFieldItem("アイテム2", "item2"));
        listBoxField.getItems().add(new PdfListFieldItem("アイテム3", "item3"));;
        listBoxField.setBounds(rec);
        listBoxField.setFont(font);
        listBoxField.setSelectedIndex(0);
        doc.getForm().getFields().add(listBoxField);
        baseY += 60;

        //ラジオボタンを追加
        page.getCanvas().drawString("ラジオボタン：", font, brush1, new Point2D.Float(0, baseY));
        PdfRadioButtonListField radioButtonListField = new PdfRadioButtonListField(page, "Radio");
        PdfRadioButtonListItem radioItem1 = new PdfRadioButtonListItem("Item1");
        radioItem1.setBounds(new Rectangle2D.Float(baseX, baseY, 15, 15));
        page.getCanvas().drawString("オプション1", font, brush2, new Point2D.Float(baseX + 20, baseY));
        PdfRadioButtonListItem radioItem2 = new PdfRadioButtonListItem("Item2");
        radioItem2.setBounds(new Rectangle2D.Float(baseX + 70, baseY, 15, 15));
        page.getCanvas().drawString("オプション2", font, brush2, new Point2D.Float(baseX + 90, baseY));
        radioButtonListField.getItems().add(radioItem1);radioButtonListField.getItems().add(radioItem2);
        radioButtonListField.setSelectedIndex(0);
        doc.getForm().getFields().add(radioButtonListField);
        baseY += 25;

        //コンボボックスを追加
        page.getCanvas().drawString("コンボボックス：", font, brush1, new Point2D.Float(0, baseY));
        Rectangle2D.Float cmbBounds = new Rectangle2D.Float(baseX, baseY, 150, 15);
        PdfComboBoxField comboBoxField = new PdfComboBoxField(page, "ComboBox");
        comboBoxField.setBounds(cmbBounds);
        comboBoxField.getItems().add(new PdfListFieldItem("アイテム1", "item1"));
        comboBoxField.getItems().add(new PdfListFieldItem("アイテム2", "itme2"));
        comboBoxField.getItems().add(new PdfListFieldItem("アイテム3", "item3"));
        comboBoxField.getItems().add(new PdfListFieldItem("アイテム4", "item4"));
        comboBoxField.setSelectedIndex(0);
        comboBoxField.setFont(font);
        doc.getForm().getFields().add(comboBoxField);
        baseY += 25;

        //署名フィールドを追加
        page.getCanvas().drawString("署名ドメイン：", font, brush1, new Point2D.Float(0, baseY));
        PdfSignatureField sgnField= new PdfSignatureField(page,"sgnField");
        Rectangle2D.Float sgnBounds = new Rectangle2D.Float(baseX, baseY, 150, 80);
        sgnField.setBounds(sgnBounds);
        doc.getForm().getFields().add(sgnField);
        baseY += 90;

        //追加ボタン
        page.getCanvas().drawString("送信ボタン：", font, brush1, new Point2D.Float(0, baseY));
        Rectangle2D.Float btnBounds = new Rectangle2D.Float(baseX, baseY, 50, 15);
        PdfButtonField buttonField = new PdfButtonField(page, "Button");
        buttonField.setBounds(btnBounds);buttonField.setText("送る");
        buttonField.setFont(font);
        doc.getForm().getFields().add(buttonField);

        //ドキュメントを保存します
        doc.saveToFile("AddFormField.pdf", FileFormat.PDF);
    }
}
```

![p](https://user-images.githubusercontent.com/63445660/92216635-21bb9480-eec9-11ea-8abc-d52a003a8181.png)