【问题标题】:How can I render existing view for output to PDF?如何渲染现有视图以输出到 PDF?
【发布时间】:2010-08-30 23:26:56
【问题描述】:

我作为供应商使用 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?

【问题讨论】:

  • 执行var_dump($data) 并查看您呈现的html 是否存储在对象中的某个位置。也许你必须做类似$this->set('html', $data['somethinginternal'])
  • 我得到NULL 的输出。没有其他的。但是我知道当我访问它时视图会输出一些东西,它会显示页面应该看起来的样子。

标签: php cakephp tcpdf


【解决方案1】:

我愿意

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

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

基本上,我使用wkhtmltopdf 来生成PDF 内容。它确实是独立的,并且可以生成在现代浏览器中的 html。

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

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

你可以看到我的 /app/views/layouts/pdf.ctp here。有cmets所以你应该明白。

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

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

我已经使用这种方法构建了一个网站:http://html-2-pdf.com,因此您可以看到它的实际效果。

HTH

【讨论】:

  • 事实证明这与我必须采取的方法相似。我这样做的方式非常草率(我认为),但它正在工作。我必须在现有视图中设置一个变量。如果变量设置为“pdf”,那么我运行 ob_start() 和生成 PDF 所需的其他命令。但我觉得它使视图非常混乱。我宁愿让它从另一个位置生成。这是我的强迫症!
【解决方案2】:

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

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

【讨论】:

  • 这不起作用......但同时,这将在控制器中的每个方法之后运行。这也不是我想要的副作用。但是感谢您尝试提供帮助。
猜你喜欢
  • 2017-04-18
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
相关资源
最近更新 更多