3

我正在尝试在 Zend Framework 应用程序中使用 mPDF 从操作的输出生成一个 .pdf 文件。

这是我的操作代码:

public function testAction()
{       
        $this->_helper->viewRenderer->setNoRender();
        $this->_helper->layout->disableLayout();

        $this->view->foo = 'bar';

        $this->render();
        $output = $this->getResponse()->getBody();

        $layout = new Zend_Layout();
        $layout->content = $output;     
        $layout->setLayoutPath(dirname(dirname(__FILE__)) . '/views/layouts/');
        $layout->setViewSuffix('tpl');
        $layout->setLayout('pdf');

        $html = $layout->render();

        $mpdf = new mPDF('utf-8', 'A4');
        $mpdf->WriteHTML($html);
        $mpdf->Output('report.pdf', 'D');
}

如果要显示的内容很长(即几段),在下载 .pdf 文件时,Adobe Reader 会抛出以下错误:Adobe Reader 无法打开“report.pdf”,因为它不是受支持的文件类型或因为文件已损坏(例如,它作为电子邮件附件发送且未正确解码)。

但是,如果我将相同的输出作为静态变量传递给 mpdf,而不使用 Zend Layout 渲染,那么 .pdf 文件将打开而不会出现任何错误。此外,当且仅当内容很长(即只有几个单词时它才有效)时,Adobe Reader 才会抛出这个问题。

我应该注意什么限制?

4

2 回答 2

0

文件开头和结尾不应有空格,因此请检查这些空格,

于 2013-05-07T10:10:52.417 回答
0

如果 PDF 文件损坏,Adobe Reader 的宽容度不如其他一些 PDF 阅读器。在文本编辑器中打开您的 PDF 文档并检查文件是否以以下内容开头:%PDF-1.4 %âãÃÓ</p>

有时会在文件顶部找到 PHP 错误通知。

资料来源:mpdf 论坛 IanBack 的回答

于 2014-07-22T21:18:14.470 回答