无法使用 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 实例并创建一个新实例。
看起来您正在为 PdfModel
和 ViewModel
的每个循环创建一个实例,但是 Dompdf 实例是包含您的循环的 class 的一部分($this->getServiceLocator...
).
我不熟悉你使用的框架,所以无法给你一个具体的答案。最快的解决方案是不使用属于 ServiceLocator 实例的 Dompdf 实例。
替换
$eng = $this->getServiceLocator()->get('viewpdfrenderer')->getEngine();
有
$eng = new Dompdf();
$eng->setOption("paperSize", "a4");
如您所见,必须重新设置纸张尺寸,这是缺点。在 ServiceLocator 中配置的任何选项都将丢失。
我正在尝试使用循环创建许多 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 实例并创建一个新实例。
看起来您正在为 PdfModel
和 ViewModel
的每个循环创建一个实例,但是 Dompdf 实例是包含您的循环的 class 的一部分($this->getServiceLocator...
).
我不熟悉你使用的框架,所以无法给你一个具体的答案。最快的解决方案是不使用属于 ServiceLocator 实例的 Dompdf 实例。
替换
$eng = $this->getServiceLocator()->get('viewpdfrenderer')->getEngine();
有
$eng = new Dompdf();
$eng->setOption("paperSize", "a4");
如您所见,必须重新设置纸张尺寸,这是缺点。在 ServiceLocator 中配置的任何选项都将丢失。