iText PDF 验证签名是可见还是不可见



我目前正在使用Itext 5.4.4,我想知道是否可以检查我当前PDF中的签名是可见还是不可见。这可能吗?还是我必须升级到较新的 Itext 版本?

你可以像下面的代码一样做。其他标志很容易添加。

PdfReader reader; //instantiate
AcroFields acroFields = reader.getAcroFields();
Map<String, Item> fieldNames = acroFields.getFields();
Set<Entry<String, Item>> entries = fieldNames.entrySet();
Iterator<Entry<String, Item>> it = entries.iterator();
while(it.hasNext()){
Entry<String, Item> entry = it.next();
//Check flags
boolean invisible = isInvisible(entry.getValue());
boolean mandatory = isMandatory(entry.getValue());
boolean noView = isNoView(entry.getValue());
boolean hidden = isHidden(entry.getValue());
...
}
public static boolean isInvisible(Item item) {
//Add a nullcheck!
if(item.size()>0) {
PdfDictionary d = item.getMerged(0);
PdfNumber num = (PdfNumber) d.get(PdfName.F);
return num == null ? false : ((num.intValue() & PdfAnnotation.FLAGS_INVISIBLE) == PdfAnnotation.FLAGS_INVISIBLE);
}
return false;
}
public static boolean isMandatory(Item item) {
//Add a null check here!
if(item.size()>0) {
PdfDictionary d = item.getMerged(0);
PdfNumber num = (PdfNumber) d.get(PdfName.FF);
return num == null ? false : ((num.intValue() & PdfFormField.FF_REQUIRED) == PdfFormField.FF_REQUIRED);
}
return false;
}
public static boolean isNoView(Item item) {
//nullcheck!
if(item.size()>0) {
PdfDictionary d = item.getMerged(0);
PdfNumber num = (PdfNumber) d.get(PdfName.F);
return num == null ? false : ((num.intValue() & PdfAnnotation.FLAGS_NOVIEW) == PdfAnnotation.FLAGS_NOVIEW);
}
return false;
}
public static boolean isHidden(Item item) {
//Nullcheck!
if(item.size()>0) {
PdfDictionary d = item.getMerged(0);
PdfNumber num = (PdfNumber) d.get(PdfName.F);
return num == null ? false : ((num.intValue() & PdfAnnotation.FLAGS_HIDDEN) == PdfAnnotation.FLAGS_HIDDEN);
}
return false;
}

最新更新