Dompdf错误"找不到块级父级。不好。"

时间:2016-05-30 09:09:27

标签: php dompdf

require_once("function/dompdf/dompdf_config.inc.php");
$dompdf = new DOMPDF();
foreach($modules as $module){
   $output = "Hello " .$module['name'];
   $dompdf->load_html($output);
   $dompdf->render();
   $output_pdf = $dompdf->output();
   file_put_contents($dir . $name_modulo . ".pdf", $output_pdf);

}
  

致命错误:未捕获的异常' DOMPDF_Exception'使用消息'找不到块级父级。不好。'

11 个答案:

答案 0 :(得分:6)

dompdf 文件夹> dompdf_config.custom.inc.php 文件>尝试取消注释该行

define(“DOMPDF_ENABLE_HTML5PARSER”,true);

同时替换不支持的html5标签&支持的属性,清除html错误以获得更好的结果

答案 1 :(得分:1)

转到配置文件dompdf_config.custom.inc.php并取消注释define(“DOMPDF_ENABLE_HTML5PARSER”,true);并检查,基本上它需要在配置文件中启用html5解析器。

答案 2 :(得分:1)

我不知道为什么关于(" DOMPDF_ENABLE_HTML5PARSER",true)的答案也被拒绝了。因为我花了30多个小时试图弄清楚为什么会在我的网站上发生这种情况,直到我遇到这个解决方案。所以我启用了" DOMPDF_ENABLE_HTML5PARSER"将其设置为" TRUE"如上所述。并且立即出现关于"没有找到块级父级的错误"已解决,我的脚本工作。也许第二个答案被否决,因为它重复了之前的答案(但是让一个人休息一下,为什么不对你?也许他没有看到它......)。或者也许" downvoter"有态度问题。

答案 3 :(得分:1)

只需从define("DOMPDF_ENABLE_HTML5PARSER", true);此文件中取消注释dompdf_config.custom.inc.php这一行。

您可以在vendor/dompdf/dompdf此目录中找到codeigniter的此文件。

答案 4 :(得分:0)

只需定义

$dompdf->set_option('enable_html5_parser', TRUE);

我认为它将解决此问题。

或者可以编辑dompdf / dompdf_config.inc.php文件 转到第322行 改变

def("DOMPDF_ENABLE_HTML5PARSER", false);

def("DOMPDF_ENABLE_HTML5PARSER", true);

答案 5 :(得分:0)

该线程最新发布,但基于https://github.com/dompdf/dompdf/issues/902上的帖子,我能够通过删除<html><head></head><body></body></html>之间的空格来解决此问题。 / p>

因此,与其像这样正确格式化html代码,还不如:

<html>
<head>
...
</head>
<body>
...
</body>
</html>

我删除了标记之间的所有新行或空格,现在看起来像这样:

<html><head>
</head><body>
</body></html>

一切又变得怪诞了

答案 6 :(得分:0)

如果您已使用composer require安装了dompdf,则如果您不想修改供应商文件夹,则使用set_option方法定义enable_html5_parser选项会很好用

因此,将以下内容添加到每个正在创建错误的文档中

$dompdf->set_option('enable_html5_parser', TRUE);

答案 7 :(得分:0)

我在PHP 5.6上使用domPDF 0.8.3时遇到了同样的问题,找不到dompdf_config.custom.inc.php和dompdf_config.inc.php都没有用;为了解决我的问题,我在CSS中添加了{display:block;}正文,没有更多问题。

答案 8 :(得分:0)

我试图找到空白或其他空格。没有成功,所以 我只是最小化了PDF模板的HTML文件 它删除了所有空格,空格等 为我工作

答案 9 :(得分:0)

就我而言,这有点不同。

pdf创建代码在循环中,但dom pdf对象创建在循环上方。因此,当第二次尝试创建pdf时,我看到了上述错误。为了解决这个问题,每次我创建一个新对象时,它都按预期工作。

示例:

(代码不起作用)

//Reference of Dompdf namespace
use Dompdf\Dompdf;
use Dompdf\Options;

//instantiate and use the Options class
$options    =   new Options();
$options->set('enable_html5_parser', true);

$dompdf     =   new Dompdf($options);
for($i = 0; $i < $count; $i++) {
  //Create PDF
  $dompdf->loadHtml($form_data);
  $dompdf->setPaper('A4', 'landscape');
  $dompdf->render();
  $output = $dompdf->output();
  file_put_contents($pdf_file_name, $output);
}

工作代码:

//Reference of Dompdf namespace
use Dompdf\Dompdf;
use Dompdf\Options;

//instantiate and use the Options class
$options    =   new Options();
$options->set('enable_html5_parser', true);

for($i = 0; $i < $count; $i++) {
  $dompdf     =   new Dompdf($options);
  //Create PDF
  $dompdf->loadHtml($form_data);
  $dompdf->setPaper('A4', 'landscape');
  $dompdf->render();
  $output = $dompdf->output();
  file_put_contents($pdf_file_name, $output);
}

答案 10 :(得分:0)

您可以如上所述启用HTML5解析器,也可以更新dompdf库。我发现将dompdf库从6.2更新到8.2可以克服此错误,但如果您使用的是Drupal,例如我,那么您就需要做一些技巧才能使Drupal识别该库的较新版本(请参阅此处:{{ 3}})