インタラクティブフィールドとも呼ばれるPDFフォームフィールドは、主にユーザー情報の収集に使用されます。一般的なフォームフィールドには、ラジオボタン、チェックボックス、リストボックス、およびコンボボックスが含まれます。このテキストでは、Free Spire.PDF for Javaを使用して、JavaプログラムでPDFフォームフィールドを作成する方法を紹介します。
JARパッケージのインポート
方法1:Free Spire.PDF for Javaをダウンロードして解凍し、libフォルダー内のjarパッケージを依存関係としてJavaアプリケーションに直接インポートします。
**方法2:**Mavenリポジトリーからjarパッケージをインストールし、pom.xmlファイルのコードを次のように構成します。
<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コード
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);
}
}