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

本文关键字:读取 文件 密码保护 itextsharp | 更新日期: 2023-09-27 18:36:11

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

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

PdfReader.unethicalreading = true;
在单个 Web 服务器

或本地主机开发上,如果将 PDF 保存到 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";

显示文件中的代码.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 服务器或本地主机上都有效,但如果我们需要从文件共享中读取文件,则不行。

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

所以我发现当你的页面继承自 System.Web.UI.Page 时,这段代码工作得很好。

我使用的页面继承自 BasePage,该 BasePage 对响应执行其他一些魔术,这会弄乱.aspx页面的响应。