无法使用Response Class加载PDF

时间:2017-10-26 06:09:24

标签: php laravel-5.2 dompdf

我正在使用Laravel 5.2,使用Dompdf“barryvdh / laravel-dompdf”:“^ 0.7.0”。 第一步,我正在创建一个带有HTML输入的PDF文件,并将其保存在存储路径中,这很好。后来我有一个链接,可以帮助使用Response类在浏览器中呈现这个保存的PDF文件。 该代码段如下所示 -

$filename = 'file.pdf';
$path = storage_path($filename);
return \Response::make(file_get_contents($path), 200, [
      'Content-Type' => 'application/pdf',
      'Content-Disposition' => 'inline; filename="'.$filename.'"'
]);

这在我的本地计算机上运行正常,但在预生产和生产服务器上抛出错误,并显示警告消息“无法加载PDF”。

请理解你出了什么问题需要你的帮助。或者,我有什么办法可以在浏览器中加载PDF文件吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

使用laravel中的响应类

return response()->download($pathToFile);

OR

return response()->file($pathToFile);

使用dompdf方法链接

return PDF::loadFile(public_path().'/myfile.html')->save('/path-to/my_stored_file.pdf')->stream('download.pdf');

修改 从dompdf源,stream方法只需要一个文件路径

public function stream($filename = 'document.pdf' ){
        $output = $this->output();
        return new Response($output, 200, array(
            'Content-Type' => 'application/pdf',
            'Content-Disposition' =>  'inline; filename="'.$filename.'"',
        ));
    }

所以你可以尝试dompdfobj->stream($filepath);

OR

我在网上找到了

 $headers = [
            'Content-Type' => 'application/pdf',
            'Content-Disposition' => 'inline; ' . $fileName,
        ];

        return Response::make(File::get($filePath . $fileName), 200, $headers);

答案 1 :(得分:0)

使用laravel return response()->file('/path_tofile/document.pdf');

您也可以通过向响应添加Accept-Ranges标头并将其设置为bytes来完成此操作,如下所示:

$headers = [
    'Content-Type' => 'application/pdf',
    'Accept-Ranges' => 'bytes',
];
return \Response::make('/path_tofile/document.pdf', 200, $headers);