表单
福昕 PDF SDK 安卓版通过 Core SDK 提供了 AcroForm 表单的读取、填写、编辑和数据导入/导出能力。表单由一组字段(Field)和控件(Control)组成,支持文本框、复选框、单选按钮、下拉框、列表框、按钮和签名域等类型。
UI Extensions 内置表单填写
如果您使用的是完整阅读器(UI Extensions),表单填写功能已内置(FormFillerModule),用户可直接在文档中点击并填写表单字段。还内置了表单导航模块(FormNavigationModule),支持在表单字段间快速切换。无需额外编码。
核心类
| 类 | 说明 |
|---|---|
Form | 表单对象,管理字段和控件的集合,提供数据导入/导出 |
Field | 表单字段,定义字段类型、名称、值和属性 |
Control | 表单控件,字段在页面上的可视化表示(Widget 注释) |
Filler | 表单填充器,处理表单交互逻辑 |
字段类型
| 常量 | 值 | 说明 |
|---|---|---|
Field.e_TypePushButton | 1 | 按钮 |
Field.e_TypeCheckBox | 2 | 复选框 |
Field.e_TypeRadioButton | 3 | 单选按钮 |
Field.e_TypeComboBox | 4 | 下拉框 |
Field.e_TypeListBox | 5 | 列表框 |
Field.e_TypeTextField | 6 | 文本框 |
Field.e_TypeSignature | 7 | 签名域 |
常用字段标志位
| 常量 | 说明 |
|---|---|
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 参考
Form、Field、Control 的完整接口说明请参阅 API 手册。