我们允许用户上传PDF文档供我们存储。我们警告用户,在上传之前必须先将PDF展平,但是许多用户仍在上传包含表单字段的PDF文档。我们希望通过在上传到我们的存储设备之前验证PDF文件来防止这种情况。
我们正在使用iText-5.1将文件读取为字节[],并使用PdfReader打开它。然后,我们使用AcroFields()提取字段并测试是否存在。当前,即使对于我知道包含表单字段的测试PDF,getFields()。size()始终返回0 [请参见下面的代码] 。
PdfReader reader = new PdfReader(bytes);
AcroFields fields = reader.getAcroFields()
boolean hasFormFields =
(fields != null && fields.getFields() != null && fields.getFields().size() > 0);
if (hasFormFields) {
// Report Error to User - throw exception, etc.
}
当PDF包含表单字段元素时,我希望getFields()。size()大于0。还有其他使用Java和iText标识表单字段的方法吗?
答案 0 :(得分:0)
我曾经编写自己的方法来检查表单域:
public static boolean containsPdfForms(PdfReader reader){
PdfDictionary acroForm = (PdfDictionary)PdfReader.getPdfObjectRelease(reader.getCatalog().get(PdfName.ACROFORM));
if(acroForm!=null){
PdfObject forms = acroForm.get(PdfName.FIELDS);
if(forms!=null){
//check for indirect reference
if( forms.isIndirect()){
forms = acroForm.getDirectObject(PdfName.FIELDS);
}
if(forms.isArray() && ((PdfArray)forms).size()>0){
return true;
}
}
}
return false;
}