我尝试使用循环创建许多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);
}
答案 0 :(得分:1)
Dompdf目前仅支持为每个实例呈现单个文档(issue #1056)。在解决此问题之前,您需要取消设置Dompdf实例并创建一个新实例。
看起来您正在为PdfModel
和ViewModel
的每个循环创建一个实例,但Dompdf实例是包含循环($this->getServiceLocator...
)的类的一部分。 / p>
我不熟悉你正在使用的框架,所以我不能给你一个具体的答案。最快的解决方案是不使用属于ServiceLocator实例的Dompdf实例。
替换
$eng = $this->getServiceLocator()->get('viewpdfrenderer')->getEngine();
使用
$eng = new Dompdf();
$eng->setOption("paperSize", "a4");
如您所见,纸张尺寸必须再次设定,这就是缺点。 ServiceLocator中配置的任何选项都将丢失。