【问题标题】:iText doesn't set checkbox fieldiText 未设置复选框字段
【发布时间】:2015-02-03 01:10:35
【问题描述】:

我正在使用 iText 库基于模板生成 pdf 文件。但是当我尝试设置复选框字段时,它不会被填充。 上课在这里:

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() 方法返回“null”。复选框也没有填写结果pdf文件。

谁能帮我解决这个问题?

提前致谢, 谢尔盖

【问题讨论】:

  • 这可能与Checking off pdf checkbox with itextsharp 重复。在您的问题中,您没有显示您如何尝试填写复选框。此外:您的字段名称看起来好像您有一个混合 XFA 表单。也许这是导致问题的原因...您的 PDF 是 XFA 表单吗?

标签: pdf checkbox itext


【解决方案1】:

为什么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]");

【讨论】:

  • 谢谢,布鲁诺!你是对的。 codeString states[] = form.getAppearanceStates("topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1]");code 这个语句返回'2'。所以,要设置一个复选框,我需要编写下一个代码: form.setField("topmostSubform[0].Page1[0].FederalClassification[0].c1_1[1]", "2");
  • 有时您需要一双额外的眼睛才能看到问题所在 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多