2016-02-25 110 views
0

我们有一个PDF,我们通过iTextSharp 5.5从网页表格填写。由于Web场环境,我们将此PDF保存到网络共享中。在稍后的应用程序中,我们需要向用户提供已填写的pdf以供阅读,以便在继续之前确认文档。itextsharp读密码保护文件到流

的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"; 

守则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服务器或本地主机上运行,​​但如果我们需要从文件共享中读取文件,则无法运行。

回答

0

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

我使用的页面是从BasePage继承的,它对响应做了一些其他的魔术,这使得.aspx页面的响应变得糟糕。