iText 不设置复选框字段
iText doesn't set checkbox field
我正在使用 iText 库基于模板生成 pdf 文件。但是当我尝试设置复选框字段时,它不会被填充。
Class 在这里:
public class MainClass {
public static void main(String[] args) {
try {
PdfReader reader = new PdfReader("pdf/fw9_template.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("test.pdf"));
AcroFields form = stamper.getAcroFields();
String states[] = form.getAppearanceStates("topmostSubform[0].Page1[0].FederalClassification[0].c1_1");
System.out.println(states);
for (Iterator i = form.getFields().keySet().iterator(); i.hasNext(); ) {
String key = (String) i.next();
System.out.print(key + " : ");
switch(form.getFieldType(key)) {
case AcroFields.FIELD_TYPE_CHECKBOX:
System.out.println("Checkbox");
break;
case AcroFields.FIELD_TYPE_COMBO:
System.out.println("Combobox");
break;
case AcroFields.FIELD_TYPE_LIST:
System.out.println("List");
break;
case AcroFields.FIELD_TYPE_NONE:
System.out.println("None");
break;
case AcroFields.FIELD_TYPE_PUSHBUTTON:
System.out.println("Pushbutton");
break;
case AcroFields.FIELD_TYPE_RADIOBUTTON:
System.out.println("Radiobutton");
break;
case AcroFields.FIELD_TYPE_SIGNATURE:
System.out.println("Signature");
break;
case AcroFields.FIELD_TYPE_TEXT:
System.out.println("Text");
break;
default:
System.out.println("?");
}
}
form.setField("topmostSubform[0].Page1[0].FederalClassification[0].c1_1[0]", "true");
stamper.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
程序输出:
null
topmostSubform[0].Page1[0].EmployerID[0].f1_14[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].f1_4[0] : Text
topmostSubform[0].Page1[0].f1_9[0] : Text
topmostSubform[0].Page1[0].f1_10[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1] : Checkbox
topmostSubform[0].Page1[0].f1_2[0] : Text
topmostSubform[0].Page1[0].EmployerID[0].f1_15[0] : Text
topmostSubform[0].Page1[0].SSN[0].f1_12[0] : Text
topmostSubform[0].Page1[0].SSN[0].f1_13[0] : Text
topmostSubform[0].Page1[0].Address[0].f1_8[0] : Text
topmostSubform[0].Page1[0].Address[0].f1_7[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[0] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[2] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_7[0] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[4] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[3] : Checkbox
topmostSubform[0].Page1[0].f1_1[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[5] : Checkbox
topmostSubform[0].Page1[0].SSN[0].f1_11[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].f1_3[0] : Text
topmostSubform[0].Page1[0].Exemptions[0].f1_6[0] : Text
topmostSubform[0].Page1[0].Exemptions[0].f1_5[0] : Text
我不明白为什么我们可以在输出中看到复选框时使用方法 getAppearanceStates() returns 'null'。此外,复选框未填写结果 pdf 文件。
谁能帮我解决这个问题?
提前致谢,
谢尔盖
为什么 status
结果是 null
当你这样做时:
String states[] = form.getAppearanceStates(
"topmostSubform[0].Page1[0].FederalClassification[0].c1_1");
您在自己的问题中提供了答案:因为您的表单中没有名称为 "topmostSubform[0].Page1[0].FederalClassification[0].c1_1"
的字段。
当您使用以下行时,states
是什么:
String states[] = form.getAppearanceStates(
"topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1]");
我正在使用 iText 库基于模板生成 pdf 文件。但是当我尝试设置复选框字段时,它不会被填充。 Class 在这里:
public class MainClass {
public static void main(String[] args) {
try {
PdfReader reader = new PdfReader("pdf/fw9_template.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("test.pdf"));
AcroFields form = stamper.getAcroFields();
String states[] = form.getAppearanceStates("topmostSubform[0].Page1[0].FederalClassification[0].c1_1");
System.out.println(states);
for (Iterator i = form.getFields().keySet().iterator(); i.hasNext(); ) {
String key = (String) i.next();
System.out.print(key + " : ");
switch(form.getFieldType(key)) {
case AcroFields.FIELD_TYPE_CHECKBOX:
System.out.println("Checkbox");
break;
case AcroFields.FIELD_TYPE_COMBO:
System.out.println("Combobox");
break;
case AcroFields.FIELD_TYPE_LIST:
System.out.println("List");
break;
case AcroFields.FIELD_TYPE_NONE:
System.out.println("None");
break;
case AcroFields.FIELD_TYPE_PUSHBUTTON:
System.out.println("Pushbutton");
break;
case AcroFields.FIELD_TYPE_RADIOBUTTON:
System.out.println("Radiobutton");
break;
case AcroFields.FIELD_TYPE_SIGNATURE:
System.out.println("Signature");
break;
case AcroFields.FIELD_TYPE_TEXT:
System.out.println("Text");
break;
default:
System.out.println("?");
}
}
form.setField("topmostSubform[0].Page1[0].FederalClassification[0].c1_1[0]", "true");
stamper.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
程序输出:
null
topmostSubform[0].Page1[0].EmployerID[0].f1_14[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].f1_4[0] : Text
topmostSubform[0].Page1[0].f1_9[0] : Text
topmostSubform[0].Page1[0].f1_10[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1] : Checkbox
topmostSubform[0].Page1[0].f1_2[0] : Text
topmostSubform[0].Page1[0].EmployerID[0].f1_15[0] : Text
topmostSubform[0].Page1[0].SSN[0].f1_12[0] : Text
topmostSubform[0].Page1[0].SSN[0].f1_13[0] : Text
topmostSubform[0].Page1[0].Address[0].f1_8[0] : Text
topmostSubform[0].Page1[0].Address[0].f1_7[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[0] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[2] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_7[0] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[4] : Checkbox
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[3] : Checkbox
topmostSubform[0].Page1[0].f1_1[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].c1_1[5] : Checkbox
topmostSubform[0].Page1[0].SSN[0].f1_11[0] : Text
topmostSubform[0].Page1[0].FederalClassification[0].f1_3[0] : Text
topmostSubform[0].Page1[0].Exemptions[0].f1_6[0] : Text
topmostSubform[0].Page1[0].Exemptions[0].f1_5[0] : Text
我不明白为什么我们可以在输出中看到复选框时使用方法 getAppearanceStates() returns 'null'。此外,复选框未填写结果 pdf 文件。
谁能帮我解决这个问题?
提前致谢, 谢尔盖
为什么 status
结果是 null
当你这样做时:
String states[] = form.getAppearanceStates(
"topmostSubform[0].Page1[0].FederalClassification[0].c1_1");
您在自己的问题中提供了答案:因为您的表单中没有名称为 "topmostSubform[0].Page1[0].FederalClassification[0].c1_1"
的字段。
当您使用以下行时,states
是什么:
String states[] = form.getAppearanceStates(
"topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1]");