2012-09-22 127 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