Как работать с полями формы, которые имеют одинаковые имена? - PullRequest
0 голосов
/ 20 января 2020

У меня есть файл PDF, который содержит форму с полями, имена которых совпадают. Это было сделано для обмена данными в документе. Например, у меня есть контракт, и на каждой странице этого документа должно быть название компании, и я записываю название компании в одно поле формы, и оно копируется для всех страниц в текущем документе, но когда я пытаюсь прочитать этот документ, используя itext7 Библиотека Я не получаю эти данные, потому что 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 библиотека

1 Ответ

0 голосов
/ 21 января 2020

Я нашел, как решить мою проблему. Я получил все поля от 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...