本文将介绍在Java程序中来获取PDF表单域值的方法,包括获取指定(可通过索引值或表单域名称)表单域的值及获取文档中所有表单域的值。PDF表单域操作,可参考相关文章“创建、填充PDF表单域以及设置表单域只读”里的方法。
使用工具:Free Spire.PDF for Java (免费版)
Jar文件获取:
方法1:通过官网下载jar文件包。下载后,解压文件,将lib文件夹下的Spire.Pdf.jar导入java程序。
方法2:通过maven仓库安装导入,可参考导入方法。
测试文文档如下:
Java代码示例
【示例1】获取指定表单域的值
import com.spire.pdf.PdfDocument;
import com.spire.pdf.widget.PdfFormWidget;
import com.spire.pdf.widget.PdfTextBoxFieldWidget;
import java.io.FileWriter;
import java.io.IOException;
public class GetSpecificFormfieldValue {
public static void main(String[] args) {
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("test.pdf");
//获取表单域
PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();
//通过索引值来获取指定表单域中的值
PdfTextBoxFieldWidget textbox = ( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get(0);
//PdfTextBoxFieldWidget textbox = ( PdfTextBoxFieldWidget)formWidget.getFieldsWidget().get("TextBox");//通过表单域名称来获取值
//将获取的值写入txt文档
String text = textbox.getText();
try {
//将文本写入 .txt文件
FileWriter writer = new FileWriter("GetSpecificFormfieldValue.txt");
writer.write(text);
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
pdf.close();
}
}
指定表单域值获取结果:
【示例2】获取文中所有表单域的值
import com.spire.pdf.PdfDocument;
import com.spire.pdf.fields.PdfField;
import com.spire.pdf.widget.*;
import java.io.FileWriter;
import java.io.IOException;
public class GetAllFormfieldValue {
public static void main(String[] args) {
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("测试.pdf");
//获取表单域
PdfFormWidget formWidget = (PdfFormWidget)pdf.getForm();
StringBuilder sb = new StringBuilder();
//遍历表单域控件集合并提取所有表单的值
for (int i = 0; i < formWidget.getFieldsWidget().getCount(); i++)
{
PdfField field = (PdfField)formWidget.getFieldsWidget().getList().get(i);
//获取文本框的值
if (field instanceof PdfTextBoxFieldWidget)
{
PdfTextBoxFieldWidget textBoxField = (PdfTextBoxFieldWidget)field ;
String text = textBoxField.getText();
sb.append("文本框内容: " + text + "\r\n");
}
//获取列表框的值
if (field instanceof PdfListBoxWidgetFieldWidget)
{
PdfListBoxWidgetFieldWidget listBoxField = (PdfListBoxWidgetFieldWidget)field;
//获取列表框中选中的值
String selectedValue = listBoxField.getSelectedValue();
sb.append("列表框选中的内容: " + selectedValue + "\r\n");
//获取列表框中的所有选项值
sb.append("列表框内容: \r\n");
PdfListWidgetItemCollection items = listBoxField.getValues();
for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items)
{
sb.append(item.getValue() + "\r\n");
}
}
//获取组合框的值
if (field instanceof PdfComboBoxWidgetFieldWidget)
{
PdfComboBoxWidgetFieldWidget comBoxField = (PdfComboBoxWidgetFieldWidget)field ;
//获取组合框中选中的值
String selectedValue = comBoxField.getSelectedValue();
sb.append("组合框选中的内容: " + selectedValue + "\r\n");
//获取组合框中所有选项值
sb.append("组合框内容: \r\n");
PdfListWidgetItemCollection items = comBoxField.getValues();
for (PdfListWidgetItem item : (Iterable<PdfListWidgetItem>) items)
{
sb.append(item.getValue() + "\r\n");
}
}
//获取单选按钮值
if (field instanceof PdfRadioButtonListFieldWidget)
{
PdfRadioButtonListFieldWidget radioBtnField = (PdfRadioButtonListFieldWidget)field;
String Value = radioBtnField.getValue();
sb.append("单选按钮内容: " + Value + "\r\n");
}
//获取复选框值
if (field instanceof PdfCheckBoxWidgetFieldWidget)
{
PdfCheckBoxWidgetFieldWidget checkBoxField = (PdfCheckBoxWidgetFieldWidget)field;
//获取复选框的选中状态
boolean state = checkBoxField.getChecked();
sb.append("复选框是否被选中? " + state + "\r\n");
}
}
try {
//将文本写入 .txt文件
FileWriter writer = new FileWriter("GetAllFormfieldValues.txt");
writer.write(sb.toString());
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}
pdf.close();
}
}
表单域读取结果:
(本文完)