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

can't create many pdf files using 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); 
}

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

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

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

替换

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

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

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