tcpdf在safari和opera中生成.html文档

时间:2013-05-03 15:25:59

标签: cakephp cakephp-2.1 tcpdf

我在Cakephp中使用tcpdf。这些PDF在Linux下可以很好地下载,但是当涉及Mac for Opera和Safari时,它会添加.html扩展。

我还注意到,即使它在FireFox和谷歌浏览器中以PDF文档形式下载,弹出窗口也会将其保存为“HTML文档”但保存为PDF。 PLease帮助我。

4 个答案:

答案 0 :(得分: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));

希望它有效。 :)

答案 1 :(得分:0)

对于mime类型,似乎Mac和Safari更严格,并且始终遵守脚本中设置的内容类型。因此,如果将Content类型设置为text / html,Safari会将其视为HTML文档并添加html扩展名。 Firefox和Chrome使用此内容类型标头来显示文件类型(HTML文档),但不会更改文件名,因此会将其保存为PDF格式。

在使用CakePHP时,最好在Controller中使用内置文件响应:

$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可能不知道某些文件的mimetype,并且默认为text / 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;

答案 2 :(得分:0)

我通过添加

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

到视图文件,通过更新到最新版本的TCPDF供应商文件,它为我们解决了同样的问题(以及其他显示问题)。

答案 3 :(得分:0)

在您的控制器中,只需添加此

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

通过添加同样的问题,我就解决了。