2012-07-13 60 views
2

.aspx頁面中有一個.pdf文件,如下所示:<embed src="http://.../ShowPdf.aspx?id=1" type="application/pdf">。 Chrome只顯示一個「加載」圖片並掛起而不顯示pdf(Chrome瀏覽器和Adobe插件都不起作用)。其他瀏覽器打開PDF。有任何想法嗎?Chrome不顯示來自asp.net的PDF

回答

2

我也有這個問題,經過多次研究,我終於解決了這個問題。

我發現的是,HTTP響應頭應具有以下實體頭:

content-length: file size

如果沒有指定這個頭,Web服務器就會把默認:

content-length: chunked

我不知道Google Chrome爲什麼會出現這個問題,因爲正如您所說,在其他瀏覽器(如IE或Firefox)中,它們會正確呈現/打開PDF文件。

以下是我用來解決此問題的代碼。它適用於我的情況,現在Google Chrome瀏覽器正在顯示我的Web應用程序的PDF文件!

System.IO.FileInfo fileInfo; 
    fileInfo = My.Computer.FileSystem.GetFileInfo(fullPathToFile); 
    Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 

我希望我幫你。

這裏有一些參考,我發現有用:
PDF Handler Problem with Chrome & Firefox
What's the 「Content-Length」 field in HTTP header?

0

非常感謝你,我有同樣的問題,這是解決方案。我使用的是一個報表查看器,但我需要自動顯示在pdf中,並且它工作正常,但是當我使用Chrome時,它有同樣的問題,當我想保存文件時,它被保存爲擴展名.ASPX而不是.pdf。

我與解決方案分享我的代碼:

   string deviceInfo = ""; 
       string[] streams = null; 
       string mimeType = null; 
       string encoding = null; 
       string fileNameExtension = null; 
       Warning[] war = null; 
       Byte[] bytes = this.ReportViewer.LocalReport.Render("PDF", deviceInfo, out mimeType, out encoding, out fileNameExtension, out streams, out war); 
       System.IO.MemoryStream ms = new System.IO.MemoryStream(bytes); 
       Response.Clear(); 
       Response.ContentType = "Application/pdf"; 
       Response.AddHeader("Content-Length", bytes.Length.ToString()); 
       Response.AddHeader("Content-disposition", "inline; filename= NombreReporte"); 
       Response.BinaryWrite(ms.ToArray()); 
       Response.Flush(); 
       Response.End(); 
1

如果你也有一個顯示在Firefox中PDF的問題,我發現這一點:

「你需要指定的內容鍵入所以瀏覽器知道什麼文件 它正在下載/顯示內聯....像這樣:「

 Response.ContentType = "application/pdf" 
    Response.AddHeader("Content-Disposition", "inline;filename=YourFileName.pdf") 

這對我很有用,我也希望你也能幫到你。

來源:http://forums.asp.net/t/1784151.aspx