如何使用具有相同名称的表单域?

How to work with form fields which have the same names?

我的 PDF 文件包含一个表单,其中的字段名称相同。已经完成了在文档中共享数据。例如,我有合同,该文档的每一页都必须有公司名称,我在一个表单字段中写下公司名称,并将其复制到当前文档的所有页面,但是当我尝试使用 [=11 阅读该文档时=] library 我没有得到这个数据,因为 itext7 只用字段名创建了一个字段,其他的正在清理。

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 库读取具有相同字段名称的字段?

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

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