【问题标题】:Dompdf "No block-level parent found" (enabled html5 parser and removed white space already..)Dompdf“未找到块级父级”(已启用 html5 解析器并已删除空格..)
【发布时间】:2018-02-09 20:48:39
【问题描述】:

我已经为此苦苦挣扎了好几个小时了..

我正在尝试使用 Dompdf 和 barryvdh 包装器从 Laravel 视图生成 PDF。

两者都使用 0.8.2 版本。我阅读了无数提到启用 HTML 5 解析器的帖子(它已经完成并使用返回 true 的 "$pdf->getDomPDF()->get_option('enable_html5_parser')" 进行了仔细检查)。我还阅读了很多关于空格的问题 - 我已经通过在 barryvdh 的 loadView 函数中添加它来修剪我可以在 html 标记之间找到的每一个空格/新行/等:

$html = str_replace("\n", "", $html);
$html = str_replace("\r", "", $html);
$html = str_replace("\t", "", $html);
$html = trim(preg_replace( '/>\s+</', '><', $html )); 

我已经“dd-ed”了生成的 $html 并检查了 html 标签之间没有任何空格..

但我仍然得到很好的旧“找不到块级父级。不好。”

所以.. 几乎卡在这里.. 如果有人对如何进一步调试有任何想法,我会接受任何建议!

谢谢

【问题讨论】:

标签: php laravel dompdf


【解决方案1】:

好的,经过进一步调查...问题似乎与

有关
body {
  display: flex;
}

所以.. 没有弹性体。

另外,dompdf 似乎还不支持 flexbox 布局,它们被渲染为不可见(参见https://github.com/dompdf/dompdf/issues/971)所以..这是我的答案。

【讨论】:

    【解决方案2】:

    变化:

    public function loadView($view, $data = array(), $mergeData = array(), $encoding = null){
        $html = $this->view->make($view, $data, $mergeData)->render();
        return $this->loadHTML($html, $encoding);
    }
    

    收件人:

    public function loadView($view, $data = array(), $mergeData = array(), $encoding = null){
        $html = $this->view->make($view, $data, $mergeData)->render();
        $html = preg_replace('/>\s+</', '><', $html);
        return $this->loadHTML($html, $encoding);
    }
    

    在 /vendor/barryvdh/laravel-dompdf/src/PDF.php

    注意:$html = preg_replace('/&gt;\s+&lt;/', '&gt;&lt;', $html); 在第二个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多