【问题标题】:can't create many pdf files using dompdf无法使用 dompdf 创建许多 pdf 文件
【发布时间】:2016-07-21 15:52:30
【问题描述】:

我正在尝试使用循环创建许多 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); 
}

【问题讨论】:

  • 我建议改用 TCPDF :)

标签: php pdf dompdf


【解决方案1】:

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

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

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

替换

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

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

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

【讨论】:

  • 只是一点,我正在使用 zf2,所以对于那些可能面临同样问题的人,我将其替换为 $eng = new \DOMPDF(); :)
猜你喜欢
  • 2017-08-19
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
相关资源
最近更新 更多