CakePHP和FPDF:浏览器中的视图标题

问题描述 投票:0回答:1

我发现了很多有关download pdf文件使用哪些标题的问题。相反,我想在线(例如,使用嵌入式Chrome插件)view并选择将其下载。

这里是我的CakePHP 3.7.9代码:

pdf.ctp

<?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标头不够吗?我还需要其他哪些标题?

如上所述,因为我不想默认下载文件,所以我没有设置文件名。

pdf http-headers cakephp-3.0
1个回答
0
投票

[在使用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

另请参见

© www.soinside.com 2019 - 2024. All rights reserved.