我发现了很多有关download pdf文件使用哪些标题的问题。相反,我想在线(例如,使用嵌入式Chrome插件)view并选择将其下载。
这里是我的CakePHP 3.7.9代码:
<?php
header('Content-Type: application/pdf');
require_once(ROOT . DS . 'vendor' . DS . 'fpdf182' . DS . 'fpdf.php');
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$pdf->Output();
相关控制器的功能为空。我将把变量打印在那里。浏览到测试pdf
页面,我得到了未解码的数据:
%PDF-1.3 3 0 obj <> endobj 4 0 obj <>流x�3R��2�35W(�rQ�w3T04�30PISp�Z*�[����(hx����+ ���(j *�d��7Wendstream endobj 1 0 obj <> endobj 5 0 obj <>流x�]R�n�0��>��L�%�DI�8���〜。 %E rv ﻻ HXgvVk?/���Ῑ��`]。[�x5�3\z��P�}����PO�j�Jݍ^���x6 / f ������������������4}�z�����}�@�,ۖ-��˺E�u�^�,���H����:��d��9c���[�X1〜��”�3�g��Ñ�;O��> endobj 2 0 obj << / ProcSet [/ PDF / Text / ImageB / ImageC / ImageI] /字体<< / F1 6 0 R >> / XObject << >> >> endobj 7 0 obj << / Producer(FPDF 1.82)/ CreationDate(D:20191229180430 )>> endobj 8 0 obj << / Type / Catalog / Pages 1 0 R >> endobj外部引用0 9 0000000000 65535 f 0000000228 00000 n 0000000867 00000 n 0000000009 00000 n 0000000087 00000 n 0000000315 00000 n 0000000749 00000 n 0000000971 00000 n 0000001047 00000 n拖车<< / Size 9 / Root 8 0 R / Info 7 0 R >> startxref 1096 %% EOF
对我来说,很明显,浏览器正在按原样读取内容,而不是将其解码为pdf。application/pdf
标头不够吗?我还需要其他哪些标题?
如上所述,因为我不想默认下载文件,所以我没有设置文件名。
[在使用CakePHP时不要直接使用header()
,也不要尝试手动将数据发送到浏览器,这只会引起问题,请始终使用CakePHP响应对象提供的抽象接口!
如果要在视图层中设置标题,请使用$this->response
,渲染后将其返回给控制器。但是,我倾向于说一个观点template通常不应该真正做出这样的决定,因为观点本身更合理,而且在大多数情况下,控制器层将是适当的位置。] >
无论如何,它在控制器,视图和视图模板级别上都相同,所以这里是一个示例:
$this->request = $this->request->withType('pdf'); $this->request = $this->request->withHeader( 'Content-Disposition', 'inline; filename="some.pdf"' );
请注意,您不能使用
withDownload()
,因为它将使用attachment
而不是inline
。
此外,如果使用视图模板,则应仅回显PDF内容,即相应地使用FPDF::Output()
方法的$dest
参数:
echo $pdf->Output('S'); // S = return String
另请参见