2012-09-22 107 views
0

我使用c#创建和签署pdf,itextsharp.Now我使用这个密码保护和数字标记的代码。首先我用password.Than我签署保护。如何使用iTextSharp来密码保护数字签名的pdf?

传送的pdf在开启时是不是要求密码? 有人可以告诉我为什么会发生这种情况?

谢谢..我使用数字签名

string passprotectedfile = filename; 

using (Stream input = new FileStream(signedfile, FileMode.Open, FileAccess.Read, 
            FileShare.Read)) 
{ 
    using (Stream output = new FileStream(passprotectedfile, FileMode.Create, 
              FileAccess.Write, FileShare.None)) 
    { 
     PdfReader reader = new PdfReader(input); 
     PdfEncryptor.Encrypt(reader, output, true, regno.ToString(), "", 
          PdfWriter.ALLOW_SCREENREADERS); 
    } 
} 

代码。

 PdfReader reader = new PdfReader(filename,pass); 
     Stream output = new FileStream(signedfile, FileMode.Create, FileAccess.Write, FileShare.None); 
     PdfStamper stamper = PdfStamper.CreateSignature(reader, output, '\0'); 

     Rectangle rect = new Rectangle(455, 105, 555, 170); 
     PdfSignatureAppearance appearance = stamper.SignatureAppearance; 
     appearance.SetVisibleSignature(rect, 1, "sign"); 
     PdfSignature dic = new PdfSignature(PdfName.ADOBE_PPKLITE, new PdfName("adobe.pkcs7.detached")); 
     PrivateKeySignature pks = new PrivateKeySignature(pk, "SHA-256"); 
     MakeSignature.SignDetached(appearance, pks, chain, null, null, null, 0, true); 
     return filename; 

然后我发送。

  Response.ContentType = "application/pdf"; 
      Response.AddHeader("content-disposition", "attachment;filename=tes2.pdf"); 
      Response.TransmitFile(signedfile); 
      Response.Flush(); 

      File.Delete(signedfile); 
      File.Delete(newfile); 
      File.Delete(passprotectedfile); 
+0

那么你面临的问题是什么? – Raghuveer

+0

传送的pdf是不是要求输入密码才能打开pdf? – Giri

回答

2

您正在创建使用一个所有者密码,允许iText的解密密码保护的PDF一个PdfReader实例。这就解释了为什么密码保护没有了:你告诉iText解密文件。

如果你想要一个签名和加密的文件,你需要一次完成两个操作,而不是按顺序执行! PdfStamper类具有允许您设置加密的不同方法。在stamper对象上使用这些方法之一。

+0

谢谢..它的工作.. – Giri