C# itextsharp将受密码保护的文件读取到流中

C# itextsharp将受密码保护的文件读取到流中,c#,asp.net,pdf,itextsharp,C#,Asp.net,Pdf,Itextsharp,我们通过iTextSharp 5.5从web表单中填写pdf。由于web场环境,我们将此pdf保存到网络共享。稍后在应用程序中,我们需要将填写好的pdf提交给用户阅读,以便在继续之前确认文档 PDF是受密码保护的,为了便于查看,我们使用以下方法: PdfReader.unethicalreading = true; 如果将PDF保存到web服务器上的某个文件夹中,然后从该本地服务器读取,则在单个web服务器或本地主机上开发时,所有这些都有效。 但是,当部署到web场时,我们需要从网络共享位置读

我们通过iTextSharp 5.5从web表单中填写pdf。由于web场环境,我们将此pdf保存到网络共享。稍后在应用程序中,我们需要将填写好的pdf提交给用户阅读,以便在继续之前确认文档

PDF是受密码保护的,为了便于查看,我们使用以下方法:

PdfReader.unethicalreading = true;
如果将PDF保存到web服务器上的某个文件夹中,然后从该本地服务器读取,则在单个web服务器或本地主机上开发时,所有这些都有效。
但是,当部署到web场时,我们需要从网络共享位置读回PDF,从而获取文件并将其读入流。然而,使用这种技术,我们总是得到“输入密码打开PDF”

PDF显示在iFrame中,其中包含以下内容:

// DOES WORK (but only on single server or localhost)
// pdfAgreement.Attributes["src"] = "PdfFolder/myfile.pdf";

// does not work
pdfAgreement.Attributes["src"] = "../ShowFile.aspx?file=myfile.pdf";
ShowFile.aspx中的代码:

 string path = "networkshare" + "myfile.pdf"; // Request.QueryString["file"];
 FileInfo file = new FileInfo(path);

 if (file.Exists)
 {
   PdfReader reader = new PdfReader(path);
   PdfReader.unethicalreading = true;
   MemoryStream ms = new MemoryStream();    
   PdfStamper pdfStamper = new PdfStamper(reader, ms);
   pdfStamper.Writer.CloseStream = false;
   pdfStamper.Close();
   pdfBytes = ms.ToArray();
   reader.Close();

   Response.ContentType = "application/pdf";
   Response.AddHeader("content-length", pdfBytes.Length.ToString());
   Response.AddHeader("Content-Disposition", "inline;filename=data.pdf");
   Response.BinaryWrite(pdfBytes);
}

有没有办法从内存流中读取受密码保护的文件?无论出于何种原因,当在单个web服务器或本地主机上时,此代码都可以工作,但如果我们需要从文件共享中读取文件,则无法工作。

因此,我发现,当您的页面从System.web.UI.page继承时,此代码可以正常工作

我使用的页面是从一个基本页面继承而来的,这个基本页面对响应做了一些其他的处理,这会弄乱.aspx页面的响应