创建表单域
ComPDF Flutter SDK 支持两种方式创建表单域:通过 CPDFReaderWidget 进入表单创建模式进行交互创建,或通过 CPDFDocument API 以编程方式创建表单域。
交互创建
通过 CPDFReaderWidget,用户可以进入表单模式并通过触摸操作添加表单域。
CPDFReaderWidgetController? _controller;
// 初始化 CPDFReaderWidget 并在 onCreated 回调中获取 controller
CPDFReaderWidget(
document: documentPath,
configuration: CPDFConfiguration(
modeConfig: const CPDFModeConfig(
initialViewMode: CPDFViewMode.forms)),
onCreated: (controller) {
});
await controller.setFormCreationMode(CPDFFormType.textField);退出创建模式
await controller.exitFormCreationMode();编程创建
通过 CPDFDocument API 以编程方式创建表单域,以下示例展示了如何创建各种类型表单:
注意:
rect参数定义了表单域在页面上的位置和大小,坐标系的原点位于页面的左下角。
创建文本域
final textWidget = CPDFTextWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.textField),
page: 0,
createDate: DateTime.fromMillisecondsSinceEpoch(1735696800000),
rect: const CPDFRectF(left: 40, top: 799, right: 320, bottom: 701),
borderColor: Colors.lightGreen,
alignment: CPDFAlignment.right,
fillColor: Colors.green,
borderWidth: 10,
text: 'This text field is created using the Flutter API.',
familyName: 'Times',
styleName: 'Bold'
);
await controller.document.addWidgets([textWidget]);创建复选框
final checkBoxWidget = CPDFCheckBoxWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.checkBox),
page: 0,
rect: const CPDFRectF(left: 361, top: 778, right: 442, bottom: 704),
borderColor: Colors.blue,
fillColor: Colors.white,
borderWidth: 10,
checkColor: Colors.blue,
isChecked: true,
checkStyle: CPDFCheckStyle.circle
);
await controller.document.addWidgets([checkBoxWidget]);创建单选按钮
final radioButtonWidget = CPDFRadioButtonWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.radioButton),
page: 0,
rect: const CPDFRectF(left: 479, top: 789, right: 549, bottom: 715),
borderColor: Colors.lightGreen,
fillColor: Colors.yellow,
borderWidth: 2,
checkColor: Colors.lightGreen,
isChecked: true,
checkStyle: CPDFCheckStyle.diamond
);
await controller.document.addWidgets([radioButtonWidget]);- 创建列表框
final listBoxWidget = CPDFListBoxWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.listBox),
page: 0,
rect: const CPDFRectF(left: 53, top: 294, right: 294, bottom: 191),
borderColor: Colors.blueAccent,
fillColor: Colors.white,
fontColor: Colors.black,
fontSize: 18,
familyName: 'Times',
styleName: 'Bold',
options: [
CPDFWidgetItem(text: 'ComPDF', value: 'ComPDF'),
CPDFWidgetItem(text: 'Flutter SDK', value: 'Flutter SDK'),
],
selectItemAtIndex: 0
);
await controller.document.addWidgets([listBoxWidget]);使用 CPDFReaderWidget 创建列表框时,默认会自动弹出选项列表弹窗,用于立即添加选项。ComPDF Flutter SDK 提供了关闭该弹窗的配置选项,示例如下:
CPDFReaderWidget(
document: widget.documentPath,
configuration: CPDFConfiguration(
formsConfig: const CPDFFormsConfig(
showCreateListBoxOptionsDialog: false
)
)
);您也可以通过 controller.addEventListener(CPDFEvent.formFieldsCreated, (event) {}) 监听表单创建完成事件,弹出自定义的选项列表弹窗进行编辑操作。详细请查看表单事件通知。
创建组合框
final comboBoxWidget = CPDFComboBoxWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.comboBox),
page: 0,
borderWidth: 5,
rect: const CPDFRectF(left: 354, top: 288, right: 557, bottom: 170),
borderColor: Colors.blueAccent,
fillColor: Colors.white,
fontColor: Colors.black,
fontSize: 18,
familyName: 'Times',
styleName: 'Bold',
options: [
CPDFWidgetItem(text: 'ComPDF', value: 'ComPDF'),
CPDFWidgetItem(text: 'Flutter SDK', value: 'Flutter SDK'),
],
selectItemAtIndex: 0
);
await controller.document.addWidgets([comboBoxWidget]);使用 CPDFReaderWidget 创建组合框时,默认会自动弹出选项列表弹窗,用于立即添加选项。ComPDF Flutter SDK 提供了关闭该弹窗的配置选项,示例如下:
CPDFReaderWidget(
document: widget.documentPath,
configuration: CPDFConfiguration(
formsConfig: const CPDFFormsConfig(
showCreateComboBoxOptionsDialog: false
)
)
);您也可以通过 controller.addEventListener(CPDFEvent.formFieldsCreated, (event) {}) 监听表单创建完成事件,弹出自定义的选项列表弹窗进行编辑操作。详细请查看表单事件通知。
创建签名域
final signatureWidget = CPDFSignatureWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.signaturesFields),
page: 0,
rect: const CPDFRectF(left: 64, top: 649, right: 319, bottom: 527),
borderColor: Colors.black,
fillColor: Colors.white,
borderWidth: 5
);
await controller.document.addWidgets([signatureWidget]);创建按钮
按钮可以设置不同的动作类型,如跳转网页、跳转页面等。
// 跳转网页按钮
final urlButtonWidget = CPDFPushButtonWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.pushButton),
page: 0,
rect: const CPDFRectF(left: 366, top: 632, right: 520, bottom: 541),
borderColor: Colors.amberAccent,
borderWidth: 5,
fillColor: Colors.white,
action: CPDFUriAction(uri: 'https://www.compdf.com'),
buttonTitle: 'To Web'
);
// 跳转页面按钮
final gotoButtonWidget = CPDFPushButtonWidget(
title: CPDFWidgetUtil.createFieldName(CPDFFormType.pushButton),
page: 0,
rect: const CPDFRectF(left: 365, top: 503, right: 501, bottom: 413),
borderColor: Colors.indigoAccent,
borderWidth: 5,
fillColor: Colors.white,
action: CPDFGoToAction(pageIndex: 1),
buttonTitle: 'Jump Page 1',
familyName: 'Times',
styleName: 'Bold'
);
await controller.document.addWidgets([urlButtonWidget, gotoButtonWidget]);使用 CPDFReaderWidget 创建按钮时,默认会自动弹出选项编辑弹窗,用于立即设置按钮事件。ComPDF Flutter SDK 提供了关闭该弹窗的配置选项,示例如下:
CPDFReaderWidget(
document: widget.documentPath,
configuration: CPDFConfiguration(
formsConfig: const CPDFFormsConfig(
showCreatePushButtonOptionsDialog: false
)
)
);您也可以通过 controller.addEventListener(CPDFEvent.formFieldsCreated, (event) {}) 监听表单创建完成事件,弹出自定义的事件编辑弹窗进行编辑操作。详细请查看表单事件通知。
支持的表单域类型
| 类型 |
|---|
| textField |
| checkBox |
| radioButton |
| listBox |
| comboBox |
| signaturesFields |
| pushButton |