【发布时间】:2016-05-17 13:38:27
【问题描述】:
我正在尝试在我的 Joomla 3 组件中使用 dompdf,但它生成的要下载的 PDf 总是损坏。我在文本编辑器中打开了 PDF 文件,发现损坏的原因是它包含了 joomla 中的所有标题、链接、样式表和 javascript,即使我只传递了我需要的 html。
我在 joomla 组件视图(default.php 模板)中使用的代码是:
<?php
defined('_JEXEC') or die('Restricted access');
ob_start();
?>
<div class="qp-div1">
<table class="table table-bordered">
<thead>
<tr>
<th colspan="2">Account Status</th>
</tr>
</thead>
<tbody>
<tr>
<th>Reference</th>
<td><?php echo $this->userdetails['cardcode']; ?></td>
... more html
<?php
require_once('dompdf/autoload.inc.php');
use Dompdf\Dompdf;
$html = ob_get_contents();
$dompdf = new Dompdf();
$dompdf->setPaper('A4', 'portrait');
$dompdf->setBasePath('');
$dompdf->loadHtml($html);
$dompdf->render();
$dompdf->stream('order');
ob_flush();
ob_end_clean();
?>
即使我只传递了我想传递给 dompdf->loadHtml 的 HTML,但当你运行 dompdf->stream 时,它最终还是使用了所有的 joomla html,包括所有的样式表、javascript 和更多。
当我使用 dompdf->output() 将输出转储到文件时,文件实际上是可以的,所以只有使用 dompdf->stream 有问题。
我用来转储 pdf 的代码插入到流命令之前,如下所示:
$file_to_save = '/temp/pdf/file.pdf';
file_put_contents($file_to_save, $dompdf->output());
$dompdf->stream('order');
我可以做些什么来阻止 $dompdf->stream 命令使用包括所有 Joomla html ?
干杯
【问题讨论】:
-
$dompdf->stream() 命令可能不是问题的根源。流式传输 PDF 后,dompdf 不会结束脚本处理。通常,如果启用了输出缓冲,您会看到类似的问题。我的猜测是 1)在 dompdf 流式传输 PDF 之前,输出缓冲区中正在捕获一些非 PDF 内容;或 2) Joomla 在 dompdf 完成后正在做某事。测试这一点的一种方法是在渲染之前清理输出缓冲区,并在调用流方法之后退出()。