本人根据itextSharp组件解决了动态加密pdf文件,但时在显示到网页中时要根据已知的密码解密pdf文件。就是在网页中打开pdf时不需要密码,从本地打开要密码,这一步不知如何解决?请高手指点。
这样做才能解决pdf不能下载,保存,打印根本问题。
以下是加密pdf文件代码,与各位朋友共享:
先要引用itextSharp
using System.Text;
using System.IO;
using iTextSharp.text;
using iTextSharp.text.pdf;
//以下是加密过程:
string sname=Server.MapPath("/file/dis/efb/")+"\\经验反馈帮助文档.pdf";
string sname1=Server.MapPath("/file/dis/efb/")+"\\test.pdf"; PdfReader reader = new PdfReader(sname);
int n = reader.NumberOfPages;

Document document = new Document(reader.GetPageSizeWithRotation(1));
PdfWriter writer=PdfWriter.GetInstance(document, new FileStream(sname1, FileMode.Create));
writer.SetEncryption(PdfWriter.STRENGTH128BITS, "123456", null, PdfWriter.AllowPrinting);

document.Open();
PdfContentByte cb = writer.DirectContent;
PdfImportedPage page;
int rotation;
int i = 0;
// step 4: we add content
while (i < n) 
{
i++;
document.SetPageSize(reader.GetPageSizeWithRotation(i));
document.NewPage();
page = writer.GetImportedPage(reader, i);
rotation = reader.GetPageRotation(i);
if (rotation == 90 || rotation == 270) 
{
cb.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(i).Height);
}
else 
{
cb.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);
}

}
//
// step 5: we close the document

document.Close();
writer.Close();
//以下是显示pdf文件过程:
FileStream PDFfile = new FileStream(sname1,FileMode.Open);
long FileSize;          
FileSize = PDFfile.Length;
byte[] buffer = new byte[(int)FileSize];
PDFfile.Read(buffer, 0, (int)FileSize);
PDFfile.Close();
File.Delete(sname1);
Response.AddHeader("Content-Disposition", "attachment");
Response.ContentType = "application/pdf";
Response.BinaryWrite(buffer);
Response.Flush(); 
Response.Close();