Выяснение обязательных полей для заполнения в pdf файле
Я начинаю с новой функциональности в моем приложении для Android, которая поможет заполнить определенные формы PDF.
Я обнаружил, что лучшим решением будет использование библиотеки iText.
Я могу прочитать файл и прочитать AcroFields из документа, но есть ли возможность узнать, что конкретное поле помечено как обязательное?
Я пытался найти эту опцию в документации API и в Интернете, но не было ничего, что могло бы помочь решить эту проблему.
2 ответа
Пожалуйста, ознакомьтесь с разделом 13.3.4 моей книги, озаглавленной "Пересмотр AcroForms". В листинге 13.15 показан фрагмент кода из примера InspectForm, который проверяет, является ли поле паролем или многострочным полем.
С некоторыми незначительными изменениями вы можете адаптировать этот пример для проверки обязательных полей:
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");
}
Проверить обязательные поля без цикла для 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");
}