2016-02-25 131 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頁面的響應變得糟糕。