Skip to content

表单

福昕 PDF SDK 安卓版通过 Core SDK 提供了 AcroForm 表单的读取、填写、编辑和数据导入/导出能力。表单由一组字段(Field)和控件(Control)组成,支持文本框、复选框、单选按钮、下拉框、列表框、按钮和签名域等类型。

UI Extensions 内置表单填写

如果您使用的是完整阅读器(UI Extensions),表单填写功能已内置(FormFillerModule),用户可直接在文档中点击并填写表单字段。还内置了表单导航模块(FormNavigationModule),支持在表单字段间快速切换。无需额外编码。

核心类

说明
Form表单对象,管理字段和控件的集合,提供数据导入/导出
Field表单字段,定义字段类型、名称、值和属性
Control表单控件,字段在页面上的可视化表示(Widget 注释)
Filler表单填充器,处理表单交互逻辑

字段类型

常量说明
Field.e_TypePushButton1按钮
Field.e_TypeCheckBox2复选框
Field.e_TypeRadioButton3单选按钮
Field.e_TypeComboBox4下拉框
Field.e_TypeListBox5列表框
Field.e_TypeTextField6文本框
Field.e_TypeSignature7签名域

常用字段标志位

常量说明
e_FlagReadOnly只读
e_FlagRequired必填
e_FlagNoExport不导出
e_FlagTextMultiline多行文本
e_FlagTextPassword密码输入
e_FlagTextComb等距梳状排列
e_FlagComboEdit可编辑下拉框
e_FlagChoiceMultiSelect多选列表

示例:获取表单字段与控件

java
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.PDFPage;
import com.foxit.sdk.pdf.interform.Form;
import com.foxit.sdk.pdf.interform.Field;
import com.foxit.sdk.pdf.interform.Control;

PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);

if (!doc.hasForm()) return;

Form form = new Form(doc);

// 遍历所有字段(filter 为 null 表示不过滤)
int fieldCount = form.getFieldCount(null);
for (int i = 0; i < fieldCount; i++) {
    Field field = form.getField(i, null);
    String name = field.getName();
    int type = field.getType();
    String value = field.getValue();
}

// 获取指定页面上的所有控件
PDFPage page = doc.getPage(0);
int controlCount = form.getControlCount(page);
for (int i = 0; i < controlCount; i++) {
    Control control = form.getControl(page, i);
    Field field = control.getField();
}

按类型过滤字段

getFieldCount(String filter)getField(int index, String filter) 支持按类型名过滤,如 "PushButton""CheckBox""RadioButton""ComboBox""ListBox""TextField""Signature"。传 null 返回所有字段。

示例:填写表单字段

java
Form form = new Form(doc);

// 填写文本框
int count = form.getFieldCount("TextField");
for (int i = 0; i < count; i++) {
    Field field = form.getField(i, "TextField");
    if ("name".equals(field.getName())) {
        field.setValue("张三");
    }
}

// 设置复选框选中状态
int cbCount = form.getFieldCount("CheckBox");
for (int i = 0; i < cbCount; i++) {
    Field field = form.getField(i, "CheckBox");
    Control control = field.getControl(0);
    if (control != null && !control.isEmpty()) {
        control.setChecked(true);
    }
}

doc.saveAs("path/to/filled.pdf", PDFDoc.e_SaveFlagNormal);

数据导入/导出

XML 格式

java
Form form = new Form(doc);

// 导出所有字段到 XML
form.exportToXML("/sdcard/form_data.xml");

// 从 XML 导入
form.importFromXML("/sdcard/form_data.xml");

FDF / XFDF 格式

java
import com.foxit.sdk.fdf.FDFDoc;
import com.foxit.sdk.common.Range;

// 导出表单数据到 FDF
FDFDoc fdfDoc = new FDFDoc(FDFDoc.e_FDF);
doc.exportToFDF(fdfDoc, PDFDoc.e_AnnotForm, new Range());
fdfDoc.saveAs("/sdcard/form_data.fdf");

// 从 FDF 导入表单数据
FDFDoc importFdf = new FDFDoc("/sdcard/form_data.fdf");
doc.importFromFDF(importFdf, PDFDoc.e_AnnotForm, new Range());

此外,Form 还支持导出为 CSV、HTML 和纯文本格式,详见 API 手册。

API 参考

FormFieldControl 的完整接口说明请参阅 API 手册