2

我正在使用带有 tcpdf 的 CakePHP 2.x 创建 PDF 文件。我想现在将其输出到浏览器,而不保存。

布局->pdf.ctp

<?php 
header("Content-type: application/pdf");
echo $content_for_layout;
?>

查看->pdf_testing.ctp

<?php
App::import('Vendor', 'xtcpdf');
$pdf = new XTCPDF('P', 'mm', 'USLETTER', true, 'UTF-8', false);

$textfont = 'freesans'; // looks better, finer, and more condensed than 'dejavusans'

$pdf->AddPage();

$pdf->setHeaderData('', '', '', 'RMA#100000');
$pdf->SetTitle('Some Text');
$pdf->SetHeaderMargin(20);
$pdf->SetTopMargin(40);
$pdf->setFooterMargin(20);
$pdf->SetAutoPageBreak(True, PDF_MARGIN_FOOTER);
$pdf->SetAuthor('Any Author');
$pdf->SetDisplayMode('real', 'default');

$pdf->SetTextColor(0, 0, 0);
$pdf->SetFont($textfont, 'B', 20);
$pdf->Cell(0, 14, "TESTING", 0, 1, 'L');
echo $pdf->Output('filename.pdf', 'I');

?>

对于 Internet Explorer,这可以正常工作并显示 PDF。

使用 Chrome,我只能得到非常用户友好的输出,例如:

%PDF-1.7 %���� 10 0 obj << /Type /Page /Parent 1 0 R /Las....

即使我将其设置为

echo $pdf->Output('filename.pdf', 'F');

要将其保存为文件,我仍然会得到“内容长度:20”,并且对于内联选项“I”,我总是得到内容类型 HTML/文本而不是应用程序/pdf。

任何想法都非常感谢。

提前致谢。

4

2 回答 2

5

不要header在布局文件中包含调用,而是尝试将以下代码添加到控制器方法中:

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

Cake 准备好后会发送标题,因此您不应该将它们直接包含在您的视图/布局文件中。如果要设置标头,则应使用响应的标头方法,例如:

$this->response->header('Location', 'http://example.com');

我不确定这是否会解决您的问题,因为我无法对其进行测试,但我认为它有一个很好的选择。

于 2013-04-17T17:20:33.677 回答
0

我有同样的问题,并通过在 cakephp 控制器方法中禁用自动渲染来修复它:

$this->autoRender = false;
于 2015-04-23T09:21:13.270 回答