pdf - 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;
}
推荐阅读
- java - 与外部程序共享数据库连接
- r - 通过动态选择的列填充 ggplot
- python - 迭代停止并抛出“不支持的操作数类型”错误
- azure - Azure 流分析 - 使用 input.EventEnqueuedUtcTime 与 EventEnqueuedUtcTime 排序的 TopOne
- css - 换行符不适用于清晰度可扩展行数据网格
- python - 在没有 Jupyter Notebook 的情况下打开 JupyterLab?
- ruby-on-rails-4 - 什么服务器规格足以满足我网站上 10,000 个并发用户的请求
- json - 如何在bash中使用jq过滤器过滤键和值
- javascript - forEach 不是函数并且 for...of 不是可迭代的
- python - 模拟 Python 对象实例化