无法使用dompdf创建许多pdf文件

时间:2016-07-21 15:52:31

标签: php pdf dompdf

我尝试使用循环创建许多pdf文件并将它们放在特定的位置,但我收到此错误:

DOMPDF_Exception

File:
C:\wamp\www\leadmarket\vendor\dompdf\dompdf\include\inline_positioner.cls.php:37
Message:
No block-level parent found.  Not good.

这是我的代码:

for($i = 0 ; $i < 3 ; $i++){
    $pdf = new PdfModel();
    $pdf->setOption("paperSize", "a4"); //Defaults to 8x11
    $pdfView = new ViewModel($pdf);
    $pdfView->setTerminal(true)
            ->setTemplate('application/annonceur/generer-facture-mensuelle.phtml')
            ->setVariables(array(
                'client' => $i
                )
            );
    $html = $this->getServiceLocator()->get('viewpdfrenderer')->getHtmlRenderer()->render($pdfView);
    $eng = $this->getServiceLocator()->get('viewpdfrenderer')->getEngine();

    $eng->load_html($html);
    $eng->render();
    $pdfCode = $eng->output();
    file_put_contents('public/folder/file-'.$i'.pdf', $pdfCode); 
}

1 个答案:

答案 0 :(得分:1)

Dompdf目前仅支持为每个实例呈现单个文档(issue #1056)。在解决此问题之前,您需要取消设置Dompdf实例并创建一个新实例。

看起来您正在为PdfModelViewModel的每个循环创建一个实例,但Dompdf实例是包含循环($this->getServiceLocator...)的类的一部分。 / p>

我不熟悉你正在使用的框架,所以我不能给你一个具体的答案。最快的解决方案是不使用属于ServiceLocator实例的Dompdf实例。

替换

$eng = $this->getServiceLocator()->get('viewpdfrenderer')->getEngine();

使用

$eng = new Dompdf();
$eng->setOption("paperSize", "a4");

如您所见,纸张尺寸必须再次设定,这就是缺点。 ServiceLocator中配置的任何选项都将丢失。