2015-09-09 158 views
0

我使用asp.net在某些瀏覽器上生成動態.pdf文件,例如firefox顯示pdf,但是在IE上& Safari提供了「另存爲」比在瀏覽器中顯示它。我已經使用了相同的iFrame。此外,要顯示PDF文件是否要求客戶端應該有Adobe Reader或某個插件來顯示PDF?PDF不會在所有使用Asp.net的瀏覽器上呈現

protected void bttnpdf_Click(object sender, EventArgs e) 
    { 
     string FilePath = Server.MapPath("sample.pdf"); 
     WebClient User = new WebClient(); 
     Byte[] FileBuffer = User.DownloadData(FilePath); 
     if (FileBuffer != null) 
     { 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-length", FileBuffer.Length.ToString()); 
     Response.BinaryWrite(FileBuffer); 
    } 
} 

任何幫助,將不勝感激。

在此先感謝

+1

它取決於Adobe插件,如果您沒有爲I.E安裝該插件。或Safari然後它會要求保存文件,而不是然後打開PDF文件 –

+0

感謝您的快速響應。你也可以請推薦一些標準的方式來呈現所有瀏覽器的PDF,考慮到這兩種情況,即客戶端已安裝/未安裝Adobe插件。 – Dev

+0

由於您提到您使用的是iframe,所以如果iframe能夠找到插件,它將呈現pdf並顯示該pdf文件,否則它將不會呈現並將整個pdf文件傳遞給瀏覽器,因此瀏覽器無法理解該做什麼與該pdf和按默認行動,它會要求保存文件 –

回答

0

在aspx文件:

<div> 
    <iframe id="myFrame" runat="server" style="width:600px; height:500px;" frameborder="0"></iframe> 
</div> 
在CS文件

myFrame.src="yourPDFPath" 

例如

myFrame.Src = "http://docs.google.com/gview?url=http://path.com/to/your/pdf.pdf&embedded=true"; 
+0

Pranav我的所有pdf文件都是動態生成的,並存儲在我們的服務器上。所以我需要在谷歌服務器上傳我的pdf文檔,然後將網址映射到iFrame上?提前Thanx – Dev

+0

不,你需要傳遞你存儲你的pdf文件的路徑。 例如, 如果您存儲在myfolder/mypdf.pdf那麼 myFrame.Src = Server.MapPath(「myfolder/mypdf.pdf」); –

0

當我這樣做我也有添加了一個內容dispo sition。在代碼中(不能共享它,因爲它是生產代碼)有一個函數在數據庫中查找記錄並返回一個FileHandle。

該函數返回一個文件句柄:

FileStream stream = new FileStream(filePath, FileMode.Open); 

var fileHandle = new FileHandle 
{ 
    FileStream = stream, 
    ContentType = "application/pdf", 
    Filename = fileDownloadName 
}; 

其中,filepath是文件路徑(例如使用Server.Mappath( 「sample.pdf」))。在控制器操作中,我有:

var cd = new System.Net.Mime.ContentDisposition 
{ 
    // for example foo.bak 
    FileName = fileHandle.Filename, 

    // always prompt the user for downloading, set to true if you want 
    // the browser to try to show the file inline 
    Inline = true, 
}; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 
return File(fileHandle.FileStream, fileHandle.ContentType); 
+0

謝謝奈傑爾。你可以請用pdf文件的路徑更新上面的代碼嗎?例如http://mydomain/pdf/sample.pdf?上述代碼也會在所有瀏覽器上呈現,而不管客戶端是否安裝了Adobe Reader /某些pdf閱讀器? – Dev

+0

我已經豐富了答案。這已經在IE,Chrome和Fox中測試過。我們擁有的PDF文件然後在瀏覽器中內聯呈現 - 直接進入鏈接或通過iframe。 (注意:fileDownloadName是文件的名稱(不含路徑)) –

0

在行Response.BinaryWrite(FileBuffer);之前加上以下行。

Response.AddHeader("Content-Disposition", "inline");

添加此頭REPONSE,使PDF文件將在瀏覽器本身打開。

相關問題