2013-05-03 28 views
0

我在CakePHP中使用tcpdf。這些PDF在Linux下可以很好地下載,但是當涉及到Opera和Safari的Mac時,它會添加.html文件。tcpdf在safari和opera中生成.html文件

我還注意到,即使它在FireFox和Google Chrome中作爲PDF文檔下載,彈出窗口將另存爲「HTML文檔」,但保存爲PDF。請幫我解決一下這個。

+0

PDFs是從* Controller *還是在* View *中輸出?你使用的是什麼版本的CakePHP? – thaJeztah 2013-05-03 15:48:54

+0

是輸出在視圖內部。 Cakephp版本是2.1.5 – user2339182 2013-05-03 15:55:56

回答

1

試圖修改標題,如:

header("Content-Description: File Transfer"); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file_name)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header("Cache-Control: private", false); // required for certain browsers 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file_name)); 

希望工程。 :)

0

看起來像Mac和Safari在MIME類型方面更加嚴格,並且始終服從腳本中設置的內容類型。所以如果內容類型設置爲text/html,Safari會希望它是一個HTML文檔並添加html擴展。 Firefox和Chrome正在使用此內容類型標題來顯示文件類型(HTML文檔),但不會更改文件名,因此將其另存爲PDF。

當你使用CakePHP的,這是一個好主意,使用內置在你的控制器文件響應:

$this->response->file($path,array('download' => true, 'name' => $filename)); 
return $this->response; 

這將正確設置你需要的大多數文件的標題。看到這裏的文檔:http://book.cakephp.org/2.0/en/controllers/request-response.html#sending-files

被警告,CakePHP可能不知道某些文件的MIME類型,並將默認爲文本/ HTML。然後你會在Safari中遇到同樣的問題。這是測試一個好主意,如果你看到這樣的情況,自己設定的MIME類型(在設置文件):

$ext = pathinfo($filename, PATHINFO_EXTENSION); 
switch ($ext) { 
    case 'dotx': 
     $this->response->type('application/vnd.openxmlformats-officedocument.wordprocessingml.template'); 
    break; 
} 
$this->response->file($path,array('download' => true, 'name' => $filename)); 
return $this->response; 
0

我發現通過增加

$this->response->type('application/pdf'); 

到視圖文件通過更新到最新版本的TCPDF供應商文件,它爲我們解決了同樣的問題(以及其他顯示問題)。

0

在你的控制器只需添加本

$this->response->header(array('Content-type: application/pdf')); 
$this->response->type('pdf'); 

通過添加此相同的問題就解決了我。