【发布时间】:2023-03-08 03:57:01
【问题描述】:
我有这个端点,它输出(在浏览器中渲染)一个 PDF 文件:
$pdf = PDF::loadView('print.property', $data, []); // DOMPDF
$filename = 'test.pdf';
if($show) {
return $pdf->stream( $filename );
}
return $pdf->download($filename);
,其中$show 表示渲染,但不下载 PDF 文件。
对于桌面,一切正常并呈现 PDF 文件,但是当我使用移动模拟器 Chrome Dev Tools 进行设置时,服务器没有响应,而是停留在加载模式。
我试过退出,没有返回标题:
header("Content-Type: application/octet-stream");
header("Content-Disposition: inline; filename=\"$filename\"");
使用Content-Disposition: attachment,它会下载正确的生成文件。
我猜问题出在标题中的某个地方。
* 我正在使用LiteServer。
这是一些从库响应头中生成的:
content-disposition: inline; filename="test.pdf"
content-type: application/pdf
我之前尝试过并使用此标头:die ($pdf->stream( $filename));
header('Content-Length: 101840');
header('Content-Type: application/octet-stream');
或:
header('Content-Type: application/pdf');
或: header('Content-Disposition: inline; filename="'.$filename.'"'); 要么: header('Content-Disposition: attachment; filename="'.$filename.'"');
没有任何作用。我能得到的最接近的方法是在 Chrome(移动)的浏览器中将其下载或呈现为字符串。
【问题讨论】:
-
我认为您不应该自己修改标题。你是否在 Laravel 或浏览器控制台中遇到任何错误?
-
不,但如果我使用
die(),我可以设置它们。 -
当你说“服务器没有响应,只是停留在加载模式”时,你的意思是你没有收到响应,还是你得到一个空白页面?
-
页面不渲染,选项卡中的加载器在那里,但我有响应头,这真的很奇怪。此外,如果我单击取消加载页面(左侧到 URL),选项卡中的加载器仍然存在,就像页面仍在加载中一样。