繁体   English   中英

如何在C#中使用iTextsharp检查PDF文件是否已签名?

[英]How to check if a PDF file is signed or not using iTextsharp in C#?

我有一个PDF文件,我想检查它是否由数字签名签名。 使用iTextsharp,这是C#中的代码。

我建议您看一下官方示例。

它们包含一个示例“ SignatureInfo”,该示例在嵌入PDF的所有签名上输出多个信息项; 因此,他们特别确定文件是否已签名。


如果您使用的是iTextSharp 5.5.x,则关键代码是这样

public void InspectSignatures(String path) {
    Console.WriteLine(path);
    PdfReader reader = new PdfReader(path);
    AcroFields fields = reader.AcroFields;
    List<String> names = fields.GetSignatureNames();
    SignaturePermissions perms = null;
    foreach (String name in names) {
        Console.WriteLine("===== " + name + " =====");
        perms = InspectSignature(fields, name, perms);
    }
    Console.WriteLine();
}

(来自iTextSharp示例C5_02_SignatureInfo.cs

如您所见,方法AcroFields.GetSignatureNames()会为您获取所有已签名签名字段的名称。 如果该列表非空,则对PDF签名。


如果您将iText 7用于.Net,则关键代码如下:

public virtual void InspectSignatures(String path)
{
    // System.out.println(path);
    PdfDocument pdfDoc = new PdfDocument(new PdfReader(path));
    PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, false);
    SignaturePermissions perms = null;
    SignatureUtil signUtil = new SignatureUtil(pdfDoc);
    IList<String> names = signUtil.GetSignatureNames();
    foreach (String name in names)
    {
        System.Console.Out.WriteLine("===== " + name + " =====");
        perms = InspectSignature(pdfDoc, signUtil, form, name, perms);
    }
    System.Console.Out.WriteLine();
}

(来自.Net的iText 7示例C5_02_SignatureInfo.cs

如您所见,方法SignatureUtil.GetSignatureNames()您获取所有已签名签名字段的名称。 如果该列表非空,则对PDF签名。


顺便说一句,由于您没有进一步指定,我假设您是指常规的集成PDF签名,尤其是分离签名和XFA签名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM