【问题标题】:itextsharp read password protected file into streamitextsharp 将受密码保护的文件读入流
【发布时间】:2016-02-25 19:42:57
【问题描述】:

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

PDF 受密码保护,出于查看目的,我们通过以下方式解决此问题:

PdfReader.unethicalreading = true;

如果将 PDF 保存到 Web 服务器上的文件夹并从该本地服务器读取,则所有这些都适用于单个 Web 服务器或 localhost 开发。
但是,当部署到网络场时,我们需要从网络共享位置读回 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 服务器或本地主机上都有效,但如果我们需要从文件共享中读取文件则不行。

【问题讨论】:

    标签: c# asp.net pdf itextsharp


    【解决方案1】:

    所以我发现当您的页面继承自 System.Web.UI.Page 时,此代码可以正常工作。

    我使用的页面是从 BasePage 继承的,它对响应做了一些其他的魔法,这弄乱了 .aspx 页面的响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2015-11-15
      相关资源
      最近更新 更多