我开始使用我的Android应用程序中的新功能,这将有助于填写某些PDF表单。
我发现最好的解决方案是使用iText库。
我可以阅读文件,并从文档中读取AcroFields,但有没有可能找出特定字段被标记为必需?
我试图在API文档和Internet上找到此选项,但没有什么可以帮助解决此问题。
答案 0 :(得分:0)
请查看my book的第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");
}
答案 1 :(得分:0)
检查必填字段而不循环使用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");
}