找出填写pdf文件所需的字段

时间:2014-02-17 20:45:54

标签: java android pdf itext

我开始使用我的Android应用程序中的新功能,这将有助于填写某些PDF表单。

我发现最好的解决方案是使用iText库。

我可以阅读文件,并从文档中读取AcroFields,但有没有可能找出特定字段被标记为必需?

我试图在API文档和Internet上找到此选项,但没有什么可以帮助解决此问题。

2 个答案:

答案 0 :(得分:0)

请查看my book的第13.3.4节,题为“重新访问AcroForms”。代码清单13.15显示了InspectForm示例中的代码片段,该代码片段检查字段是密码还是多行字段。

通过一些细微的更改,您可以调整该示例以检查必填字段:

for (Map.Entry<String,AcroFields.Item> entry : fields.entrySet()) {
    out.write(entry.getKey());
    item = entry.getValue();
    dict = item.getMerged(0);
    flags = dict.getAsNumber(PdfName.FF);
    if (flags != null && (flags.intValue() & BaseField.REQUIRED) > 0)
        out.write(" -> required\n");
}

答案 1 :(得分:0)

检查必填字段而不循环使用itext5。

        String src = "yourpath/pdf1.pdf";
        String dest = "yourpath/pdf2.pdf";

        PdfReader reader = new PdfReader(src);
        PdfStamper stamper = new PdfStamper(this.reader, new FileOutputStream(dest));

        AcroFields form = this.stamper.getAcroFields();
        Map<String,AcroFields.Item> fields = form.getFields();
        AcroFields.Item item;
        PdfDictionary dict;
        PdfNumber flags;
        item=fields.get("fieldName");
        dict = item.getMerged(0);
        flags = dict.getAsNumber(PdfName.FF);
        if (flags != null && (flags.intValue() & BaseField.REQUIRED) > 0) 
        {
                System.out.println("flag  has set");
        }