在Cakephp中使用DomPDF发出错误无法重新声明类Dompdf \ View \ PdfView

时间:2017-09-06 16:04:48

标签: cakephp cakephp-3.0 dompdf

我在使用CakePHP和DomPDF打印PDF时遇到问题,因为我想在打印pdf之前从数据库中获取一些数据。没有获取数据,它就像一个魅力。我的功能如下:

public function tourpdf($tourid = null){

  $contain = ['Deliveries','Deliveries.Articletransactions','Deliveries.Orders','Deliveries.Orders.Customers',
            'Deliveries.Articletransactions.Orderarticles','Deliveries.Articletransactions.Orderarticles.Articles'];

  $tour = $this->Tours->get($tourid)
            ->contain($contain);

  $this->viewBuilder()
    ->className('Dompdf.Pdf')
    ->layout('Dompdf.default')
    ->options(['config' => [
        'filename' => $filename,
        'render' => 'browser',
        'size' => 'A4',
        'orientation' => 'landscape'
    ]]);

  $this->set('Test', 'Hallo');
  $this->set('Tour',$tour);
}

一旦我从最后一行设置数据,我上面提取的数据,我收到错误消息“致命错误:无法在... / src / View / PdfView.php中重新声明类Dompdf \ View \ PdfView第66行“。

然而,在最后一行注释时,第一组使用Test正在运行并生成PDF。如何将查询中的数据检索设置为pdf文件?

2 个答案:

答案 0 :(得分:1)

我得到了类似的错误,但是使用了Zend Framework 2.突然之间,DOMPDF会出现错误"无法重新声明(之前在...中声明)"。

我在某些模板中使用了PHP函数,当我删除它们时,我收到了另一个错误"找不到块级父级。不好。"。我注意到当我将libxml2从2.9.4升级到2.9.5或更高版本时,这种情况就开始发生了。

解决这两个问题的方法是像这样实例化DOMPDF类:

use Dompdf\Options;
$options = new Options();
$options->set('enable_html5_parser', true);
$dompdf = new Dompdf($options);

使用enable_html5_parser所有问题都消失了。 Here is some more information on this issue

答案 1 :(得分:0)

惊人!

Mac 10.12.6上有此问题 PHP版本5.6.30 libxml版本2.9.4

使用正则表达式删除标记之间的空格可以解决问题。

$html = preg_replace('/>\s+</', '><', $html);