2010-05-13 56 views
1

我正在研究一個允許用戶下載動態生成的PDF文件的網絡應用程序。Adob​​e Reader無法在IE6中打開下載的文件

這工作正常,在IE8和Firefox,但未能在IE6使用Adobe Reader給消息「有一個錯誤打開此文件。該文件無法找到」

如果我將文件保存到硬盤的第一個那麼它在Reader中打開罰款。

我已經給文件一個簡單的短文件名,沒有空格,所以不知道還有什麼要嘗試。任何建議都非常受歡迎。

更多信息:PDF使用abcpdf插件

回答

0

也許是因爲在Adobe Reader中的ActiveX IE超時設置在asp.net代碼生成。您使用部分完成的文檔回覆瀏覽器,然後程序花費一些時間繼續響應文檔的其餘部分,並且Adobe Reader超時。嘗試生成整個PDF文檔,然後迴應http請求。例如在PHP中。

$s = ""; 
for(int i=0;i<10;i++) 
    $s .= "1"; 
echo #s; 

代替

for(int i=0;i<10;i++) 
    echo "1"; 
+0

PDF文檔在發送響應之前完全生成我相信 – chillysapien 2010-05-13 09:44:33

+0

檢查MIME類型以查看您是否將正確的MIME類型作爲PDF響應給瀏覽器? – VOX 2010-05-13 10:30:47

+0

MIME類型設置爲application/pdf。 – chillysapien 2010-05-13 12:57:29

1

是否真的有必要對您的網頁IE6的支持?一個有效的解決方案是否只需要用戶升級到更高版本的IE?

IE6在兩個半月前死亡。 (IE6 Funeral

+2

或者,如果您確實想繼續支持IE6,只需向IE6用戶提供有關如何右鍵單擊鏈接以將文件保存在HD上的說明。 – nico 2010-05-19 17:49:35

+1

不幸的是,在這裏所有的開發者都感到懊惱,因此有一個支持IE6的業務需求。只是提供解決方法的解釋是我的回退解決方案,但想知道爲什麼這個問題首先發生 – chillysapien 2010-05-20 09:20:26

0

恕我直言,這是一個頭解釋問題。我不是很熟悉或喜歡的ASP.NET但至少在PHP,你需要有這些:

ob_start(); (* should be equivalent to HttpContext.Current.Response.Buffer = true *) 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=somefile.pdf'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
//header('Content-Length: ' . filesize($file)); 

ob_flush(); (* should be equivalent to HttpContext.Current.Response.Flush() *) 
** output the pdf contents here 

(* header() should be similar to HttpContext.Current.Response.AddHeader() function *) 

注意與content-disposition:附件設置Content-Length:在一起可能會失敗,在Safari和IE瀏覽器的工作。

希望它可以幫助...

0

我想我已經在IE6中觀察到這種最令人討厭的行爲(錯誤),如果我記得,該錯誤的原因是,該文件並沒有存儲在緩存中,但已過期/立即刪除。請檢查以下內容:

  1. 您是否通過HTTPS返回文件?
  2. 檢查響應的標題,關於過期的任何事情?
  3. 你是否與靜態提供的文件有相同的問題(但在幾乎相同的URL中,嘗試使用瀏覽器重定向到/ file的'.../file.pdf'和'.../file.asp'。 pdf)
相關問題