如何将输出的现有视图渲染为PDF?

时间:2010-08-30 23:26:56

标签: php cakephp tcpdf

我在CakePHP中使用TCPDF应用程序作为供应商。我按照说明进行了一切设置。我能够生成有效的PDF,效果很好。现在我想获取已存在的HTML呈现视图的结果并从中创建PDF。

我设置HTML变量并在视图中使用它: $pdf->writeHTML($html, true, false, true, false, '');

这是我尝试过的,它会呈现一个空白屏幕:

ob_start();
$this->render('results', 'pdf');
$data = ob_get_contents();
ob_end_clean();
$this->set('html', $data);

我也尝试过:

$data = $this->results();
$this->set('html', $data);

但它只显示带有OBJECT字样的PDF。

如何渲染现有视图,但将输出定向到PDF?

2 个答案:

答案 0 :(得分:1)

我愿意

ob_start();
....
ob_end_clean();

在布局中。对我来说,收集控制器中的数据还为时过早:)

基本上,我使用wkhtmltopdf来生成PDF内容。它非常独立,可以在现代浏览器中生成html。

我是如何使用它的: 有一个pdf.ctp布局,我使用ob_start()... ob_end_clean()来收集内容(包括布局)。

然后我用先前生成的html的输出运行wkhtmltopdf命令,然后读取此文件并在浏览器中打印。

您可以看到我的/app/views/layouts/pdf.ctp here。有评论所以你应该理解它。

通过这种方法,我可以用PDF运行我的整个应用程序:)

我最近没有使用TCPDF所以我不知道他在做什么。它可能类似:)

我使用这种方法构建了一个网站:http://html-2-pdf.com因此您可以看到这一点。

HTH

答案 1 :(得分:0)

尝试使用Controller的afterFilter回调和输出属性。这是一个例子:

function afterFilter(){
    $pdf->writeHTML($this->output, true, false, true, false, '');
}