当前位置: 首页 > 知识库问答 >
问题:

如何处理具有相同名称的表单字段?

姚向晨
2023-03-14

我有一个PDF文件,其中包含一个表单,其中的字段具有相同的字段名。这是为了共享文档中的数据而做的。例如,我有合同,此文档的每一页都必须有公司名称,我将公司名称写在一个表单字段中,并将其复制到当前文档的所有页面,但是当我尝试使用itext7库阅读此文档时,我没有得到此数据,因为itext7只创建一个字段名为的字段,而另一个字段名为clean。

PdfFormField field = acroform.getFormFields().values().get(0);
if(field.getFieldName().equals(“my_company”)) {
    List<PdfWidgetAnnotation> list = field.getWidgets();
    if(pdf.getPageNumber(list.get(0).getPage()) == 1).  { // because I have this text on page 1, but this code return page = 7, because is the last page of the document which contains this text field.
        …
    }
}

如何使用itext7库读取具有相同字段名称的字段?

共有1个答案

谢英光
2023-03-14

我找到了解决问题的方法。我从Catalog中获取了所有字段,这些字段位于PdfDocument类中。代码如下所示:

public List<PdfFormField> getFields() {
    final List<PdfFormField> pdfFormFields = new ArrayList<>();
    final PdfDictionary acroFormDict = pdf.getCatalog().getPdfObject().getAsDictionary(PdfName.AcroForm);
    if (acroFormDict != null) {
        final PdfArray fields = acroFormDict.getAsArray(PdfName.Fields);
        if(fields != null) {
            fillPdfFormFields(fields, pdfFormFields);
        }
    }
    return pdfFormFields;
}
private List<PdfFormField> fillPdfFormFields(PdfArray array, List<PdfFormField> fields) {
    array.forEach(pdfObject -> {
        final PdfFormField field = PdfFormField.makeFormField(pdfObject, pdfFile);
        fields.add(field);
        final PdfArray fieldKids = field.getKids();
        if (fieldKids != null) {
            fillPdfFormFields(fieldKids, fields);
        }
    });
    return fields;
}
 类似资料:
  • 问题内容: 如果您有一个包含带有重复属性的文本输入的表单,并且该表单已经过帐,那么您仍然能够从PHP数组中获取所有字段的值吗? 问题答案: 否。仅最后一个输入元素可用。 如果要使用相同名称的多个输入,请使用输入名称属性。然后将包含foo的数组,其中包含来自输​​入元素的所有值。 如果不使用则仅包含最后一个值的原因是因为PHP基本上只会爆炸并遍历要填充的原始查询字符串。当遇到已经存在的名称/值对时,

  • 我使用的是,我需要展平包含同名字段的文档。 我创建的文档如下所示: 在那之后,我试图像下面这样压平文档: 我的主要方法是: 展平后,我得到的文档包含一个展平字段,但我必须得到两个展平字段。 如何解决此问题?

  • 问题内容: 我目前正在使用Gson用Java编写RSS feed解析器。我正在将RSS的XML转换为JSON,然后使用Gson将JSON反序列化为Java POJO(有点回旋,但是有原因)。就下面列出的Feed#1( BBC )进行反序列化而言,一切工作正常,但是对于下面列出的Feed#2( NPR ),我开始抛出异常。 我认为我已经确定了问题,但不确定如何解决该问题: 这是由于以下两个RSS F

  • 问题内容: 说我有一个类似的代码: 我应该是完全合格的班级名称吗?我可以摆脱导入声明吗?这种情况在现实世界编程中是否常见? 问题答案: 你可以忽略导入语句,并使用整个路径引用它们。例如: 但是我要说的是,使用两个具有相同名称和类似功能的类通常不是最好的主意,除非你能真正弄清是哪个。

  • 我正在探索GraphQL,想知道是否有任何重命名响应字段的方法,例如我有一个POJO与这些字段 GraphQL查询: 我的回答是这样的 我是否可以将名称字段重命名为类似用户名的名称,以便我的回答如下

  • 问题内容: 考虑以下代码 如果名称重叠,如何访问外部类的字段? 我尝试了以下方法: 并收到编译错误。 现实生活中会不会发生这种情况? 问题答案: 最好的解决方案是为字段赋予有意义的名称和不同的名称。但这并不总是可能的… 要获取字段或外部实例,您可以使用 或者该字段是静态的 注意:通常是缩写(取决于实际定义的位置) 同样,您需要调用外部类的实例方法。 要么 注意:在Java 8中,您有可能是基于实例