Как найти положение индекса переключателя, выбранного в PDF Acrofield, с помощью iText Java

PdfReader reader = new PdfReader(pdfbytes);
AcroFields acroFields = reader.getAcroFields();
Set <String> fields = acroFields.getFields().keySet();
for (String field:fields) {
    if (AcroFields.FIELD_TYPE_RADIOBUTTON == acroFields.getFieldType(field)) {
        String fieldId = acroFields.getField(field);
        List<AcroFields.FieldPosition> positions = acroFields.getFieldPostions(field);
        System.out.println("List size : " + positions.size());
        for (int i = 0; i < positions.size(); i++) {
            Rectangle rect = acroFields.getFieldPositions(field).get(i).position;
        }
    }
}

Я могу найти и повторить список позиций в радиогруппе.

Я хотел бы знать индекс переключателя, который выбран, чтобы найти его абсолютное положение.


person Anusuya    schedule 22.06.2020    source источник
comment
Я хотел бы знать индекс выбранного переключателя — какой индекс вы имеете в виду? И что вы подразумеваете под выбранным.   -  person mkl    schedule 23.06.2020


Ответы (1)


Следующий код должен дать вам указания. Обратите внимание, что может быть возможно, что ни одна радиокнопка не отмечена. Также вы должны выполнить обработку ошибок и т.д.

for (int i = 0; i < positions.size(); i++) {

    Item fieldItem = acroFields.getFieldItem(field);
    PdfDictionary dict = entry.getValue().getWidget(i);
    PdfName as = dict.getAsName(PdfName.AS);
    if(as==null){
      //handle/throw error if AS key is not set and there are one or more  subdictionaries!
    }
    String asValue = PdfName.decodeName(as.toString());
    if("Off".equalsIgnoreCase(asValue)){
       System.out.println("not checked");
    } 
    else{
       System.out.println("Checked");
       //do what you need to do
    }
}
person Lonzak    schedule 23.06.2020