【问题标题】:finding out required fields to fill in pdf file找出填写pdf文件的必填字段
【发布时间】:2014-02-17 20:45:53
【问题描述】:

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

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

我可以读取文件,并从文档中读取 AcroFields,但有没有可能发现特定字段被标记为必填项?

我试图在 API 文档和 Internet 上找到这个选项,但没有任何东西可以帮助解决这个问题。

【问题讨论】:

    标签: java android pdf itext


    【解决方案1】:

    请查看my book 的第 13.3.4 节,标题为“AcroForms revisited”。清单 13.15 显示了来自 InspectForm 示例的代码 sn-p,它检查字段是密码还是多行字段。

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

    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");
    }
    

    【讨论】:

    • 谢谢!在我的情况下,我需要将 getAsNumber 包装到 if,因为对于某些字段,此函数返回 null,但其余的都很好。
    • 啊哈,当没有为该字段设置标志时会发生这种情况。感谢您的反馈。我会更新我的答案,以便您接受。
    【解决方案2】:

    检查必填字段而不循环 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");
            }   
    

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 2023-03-22
      • 2021-04-23
      • 2013-11-14
      • 1970-01-01
      • 2018-02-02
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多