Skip to content

填写表单域

使用代码获取 PDF 文档中的表单域并在表单域中填写内容。

由于表单是特殊的注释类型,继承自注释类。所以对注释的接口也同样适用于表单。

使用代码填写表单域的步骤如下:

  1. 从 CPDFDocument 中获取想要填写表单的页面对象。

  2. 获取页面对象中的所有注释。

  3. 遍历所有注释,找到需要填写的表单。

  4. 根据需求修改表单填写内容。

以下是填写表单域的示例代码:

java
CPDFDocument document = new CPDFDocument(context);
document.open(pdfPath);

for (int i = 0; i < document.getPageCount(); i++) {
  CPDFPage page = document.pageAtIndex(i);
  for (CPDFAnnotation annotation : page.getAnnotations()) {
    switch (annotation.getType()) {
      case WIDGET:
        CPDFWidget cpdfWidget = (CPDFWidget) annotation;
        switch (cpdfWidget.getWidgetType()) {
          case Widget_TextField:
            CPDFTextWidget textWidget = (CPDFTextWidget) cpdfWidget;
            textWidget.setText("test");
            textWidget.updateAp();
            break;
          case Widget_RadioButton:
            CPDFRadiobuttonWidget radiobuttonWidget = (CPDFRadiobuttonWidget) cpdfWidget;
            radiobuttonWidget.setChecked(true);
            radiobuttonWidget.updateAp();
            break;
          case Widget_ListBox:
            CPDFListboxWidget listBoxWidget = (CPDFListboxWidget) cpdfWidget;
            listBoxWidget.setSelectedIndexes(new int[]{0});
            listBoxWidget.updateAp();
            break;
          default:
            break;
        }
        break;
      default:
        break;
    }
  }
}
kotlin
val document = new CPDFDocument(context)
document.open(pdfPath)

for (i in 0 until document.pageCount) {
  val page = document.pageAtIndex(i)
  for (annotation in page.annotations) {
    when (annotation.type) {
      CPDFAnnotation.Type.WIDGET -> {
        val cpdfWidget = annotation as CPDFWidget
        when (cpdfWidget.widgetType) {
          WidgetType.Widget_TextField -> {
            val textWidget = cpdfWidget as CPDFTextWidget
            textWidget.text = "test"
            textWidget.updateAp()
          }
          WidgetType.Widget_RadioButton -> {
            val radioButtonWidth = cpdfWidget as CPDFRadiobuttonWidget
            radioButtonWidth.isChecked = true
            radioButtonWidth.updateAp()
          }
          WidgetType.Widget_ListBox -> {
            val listBoxWidget = cpdfWidget as CPDFListboxWidget
            listBoxWidget.selectedIndexes = intArrayOf(0)
            listBoxWidget.updateAp()
          }
          else -> {}
        }
      }
      else -> {}
    }
  }
}