【问题标题】:itext pdf verify if signature is visible or invisibleitext pdf 验证签名是可见还是不可见
【发布时间】:2018-06-27 13:15:59
【问题描述】:

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

【问题讨论】:

  • 您指的是哪种类型的“隐形”?由于注释标志(HiddenNoView 而没有 Print),签名可能是不可见的,因为注释矩形是空的,因为它是与要开始的页面没有关联,因为它的注释矩形不在屏幕上,或者因为它的注释外观流在其边界框中没有显示任何内容。
  • 我指的不可见性是签名出现在签名导航面板中,但在文档的任何页面上都不可见。
  • 好的,以上所有...这是许多检查,而不仅仅是一个。
  • 还有“不可见”标志(在隐藏、noView 和 print 旁边)
  • 我正在尝试获取签名项的标志,但它总是返回 false,即使第一页上有签名注释 Item i = readerFields.getFieldItem(signatureFieldName); PdfDictionary pdct = i.getMerged(0); PdfNumber 标志 = pdct.getAsNumber(PdfName.F); if ((flags.intValue() & PdfAnnotation.FLAGS_INVISIBLE) != 0) { signatureIsVisibleOnPage = true; }

标签: pdf itext digital-signature


【解决方案1】:

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

    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;
}

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 2015-07-16
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2020-12-03
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多