当前位置:  开发笔记 > 编程语言 > 正文

PDF格式的数字签名

如何解决《PDF格式的数字签名》经验,为你挑选了0个好方法。

我正在尝试使用此项目对PDF文件进行数字签名.

当它执行st.Close(); 我得到臭名昭着的"对象引用未设置为对象的实例".

我不知道为什么会发生这种情况,st是一个对象的实例,它在上面使用.这个异常发生在.Close()中,因为我没有源代码,我只能猜测为什么......

我只能这样说:

    原始PDF正在成功阅读.

    正在生成一个空的pdf(我猜.Close()将写入该文件).

    我的证书正在加载,但我不确定这是正确的方法.

这是我如何加载证书:

private void processCert(X509Certificate2 card)
{
    X509CertificateParser cp = new org.bouncycastle.x509.X509CertificateParser(card.RawData);
    chain = new org.bouncycastle.x509.X509Certificate[] { cp.ReadCertificate() };
}

这就是我试图签署PDF的方式.

public string Sign(string SigReason, string SigContact, string SigLocation, bool visible)
{
    string bugLog ="";
    try
    {
        PdfReader reader = new PdfReader(this.inputPDF);

        //Activate MultiSignatures
        PdfStamper st = PdfStamper.CreateSignature(reader, new FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0', null, true);

        FileStream(this.outputPDF, FileMode.Create, FileAccess.Write), '\0'); 

        st.MoreInfo = this.metadata.getMetaData();

        st.XmpMetadata = this.metadata.getStreamedMetaData();

        PdfSignatureAppearance sap = st.SignatureAppearance;

        sap.SetCrypto(this.myCert.Akp, this.myCert.Chain, null, PdfSignatureAppearance.WINCER_SIGNED);

        sap.Reason = SigReason;
        sap.Contact = SigContact;
        sap.Location = SigLocation;

        if (visible)
           sap.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), 1, null);

        st.Close();
    }
    catch (Exception e)
    {
        bugLog += " ERROR Sign: " + e.Message;
    }

    return buglog;
  }

有没有人知道为什么我得到这个例外,或者我应该怎么做才能克服这个问题?

iTextSharp文档没有多大帮助......

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有