Dompdf 错误“未找到块级父级。不好。”

问题描述 投票:0回答:13
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”,消息“未找到块级父级”。不好。”

php dompdf
13个回答
32
投票

本线程较晚,但根据 https://github.com/dompdf/dompdf/issues/902 上的帖子,我能够通过删除

<html><head>
</head><body>
和 之间的空格来解决此问题
</body></html>

所以,不要使用这样格式正确的 html 代码:

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

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

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

一切又变得美好了


22
投票

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

define("DOMPDF_ENABLE_HTML5PARSER", true);

还可以用支持的标签和属性替换不支持的 html5 标签和属性,清除 html 错误以获得更好的结果


19
投票

定义一下

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

我认为这会解决这个问题。

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

def("DOMPDF_ENABLE_HTML5PARSER", false);

def("DOMPDF_ENABLE_HTML5PARSER", true);

5
投票

如果您使用composer require安装了dompdf,那么如果您不想修改供应商文件夹,则使用set_option方法定义

enable_html5_parser
选项效果很好

因此,将以下内容添加到产生错误的每个文档中

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

4
投票

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


3
投票

只需取消注释

define("DOMPDF_ENABLE_HTML5PARSER", true);
此文件中的
dompdf_config.custom.inc.php
这行即可。

您可以在

vendor/dompdf/dompdf
这个目录中找到codeigniter的这个文件。


2
投票

对于较新版本的 Dompdf,您可以使用它来启用 HTML5 解析器:

use Dompdf\Options;

$options = new Options();
$options->set('isHtml5ParserEnabled', true);
$dompdf = new Dompdf($options);

1
投票

我也不知道为什么有关(“DOMPDF_ENABLE_HTML5PARSER”,true)的答案也被否决了。因为我花了 30 多个小时试图找出为什么我的网站会发生这种情况,直到我找到了这个解决方案。因此,我通过将“DOMPDF_ENABLE_HTML5PARSER”设置为“TRUE”来启用它,如上所述。立即解决了有关“未找到块级父级”的错误,并且我的脚本开始工作。也许第二个答案被否决了,因为它重复了之前的答案(但是让一个人休息一下,为什么不呢?也许他没有看到它..)。或者“投反对票的人”可能有态度问题。


1
投票

我在 PHP 5.6 上的 domPDF 0.8.3 上遇到了同样的问题,我既找不到 dompdf_config.custom.inc.php 也找不到 dompdf_config.inc.php,也不起作用;为了解决我的问题,我将 body {display:block;} 添加到我的 CSS 中,并且没有进一步的问题。


1
投票

就我而言,有点不同。

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);
}

0
投票

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


0
投票

您可以如上所述启用 HTML5 解析器,也可以更新 dompdf 库。 我发现将 dompdf 库从 6.2 更新到 8.2 可以解决这个错误,但是如果您像我一样使用 Drupal,则需要采取一些技巧才能让 Drupal 识别该库的新版本(请参见此处:https ://www.drupal.org/project/print/issues/3010637


0
投票

如果您尝试过:

  1. 拥有 PHP 7.4+

  2. 将 DOMPDF 更新到最新版本

  3. $options->set('isHtml5ParserEnabled', true);

  4. 堆叠标签

    ... ...

仍然有这个错误,这是因为你有空格破坏了解析器,你可以使用这个正则表达式替换来去除标签之间的空格:

$html = preg_replace('/>\s+</', '><',$html);
© www.soinside.com 2019 - 2024. All rights reserved.