【问题标题】:DOMPDF with laravel - cannot load images in html file带有laravel的DOMPDF - 无法在html文件中加载图像
【发布时间】:2018-09-16 23:53:47
【问题描述】:

我正在尝试使用 laravel 和 dompdf lib 生成 pdf 文件。这是我的控制器代码:

public function create(Request $request) {
    $pdf = new Dompdf();
    $html = Storage::disk('local')->get('public/pdf/template.html');
    $pdf->loadHtml($html, 'UTF-8');
    $pdf->setPaper('A4', 'portrait');
    $pdf->render();
    $filename = "Hi!";
    return $pdf->stream($filename, ["Attachment" => false]);
}

template.html 中,我得到了一些 html,在某处我得到了这样的图像:

<img src="img/logo.png" alt="BTS">

但是 dompdf 不能写这个图像:Image not found or type unknown。我的文件系统是:

.pdf ...img ......here is images ...template.html ...*some_fonts_files*

但与此同时,字体加载正常。在 template.html 中渲染图片应该怎么做?

【问题讨论】:

    标签: php html laravel render dompdf


    【解决方案1】:

    我相信对于 dompdf,您需要传递可正确访问的 url 而不是相对路径。

    试试 <img src="{{ asset('img/logo.png')}}" alt="BTS">

    或者,如果资产不起作用,请尝试 <img src="{{ public_path('img/logo.png')}}" alt="BTS">

    另外请注意,asset 使用公共目录作为 base_url 来计算“asset”。

    【讨论】:

    • 如果你 dd(asset('img/logo.png')); 那说明什么?
    • 此 URL 在浏览器中可以正常工作,但在 dompdf 中无法正常工作
    • 或许可以试试<img src="{{ public_path('img/logo.png')}}" alt="BTS">
    • 如果你使用外部图像,它会起作用吗 - 比如cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/…
    • 哦,不,它工作正常,我的错!谢谢 :) 更新您的答案,然后我会将其标记为正确 :)
    【解决方案2】:

    我也为同样的错误挣扎了 3 天。此外,当我尝试上述技巧时,它们都没有奏效。但是当我将图像文件更改为 .jpg 文件(扩展名)时,一切正常。

    <img src="{{ public_path('img/logo.jpg') }}" >
    
    • Laravel 版本:5.8.38
    • PHP 版本:7.3
    • barryvdh/laravel-dompdf 版本:0.8.6

    【讨论】:

    • 感谢它的工作,.. 上一个版本 (0.8.5) 我使用asset() 函数它的工作,但在版本 0.8.6 中它不起作用。 @Angelwise 为什么asset() 函数不再起作用?
    【解决方案3】:

    您可以将图像路径打印为&lt;img&gt; 标记的src 属性。

    假设您在一个变量中有图片所在位置的路径: $img = asset($imgen);

    你可以像这样回显它: &lt;img src="@php echo $img @endphp"&gt;

    【讨论】:

      【解决方案4】:

      似乎需要设置协议并添加一个额外的选项:

          $pdf->setOptions(['isRemoteEnabled' => true]);
          $pdf->getDomPDF()->setProtocol($_SERVER['DOCUMENT_ROOT'])
      

      或者:

      $pdf-&gt;setProtocol($_SERVER['DOCUMENT_ROOT']);

      在此之后src="/storage/myimage.png" 将起作用。

      【讨论】:

        【解决方案5】:

        我尝试了所有提示!唯一适合我的解决方案是:

        header {
                    background-image: url("https://example.org/logo.jpg");
                }
        

        $pdf->setOptions(['isRemoteEnabled' => true]);
        $pdf->getDomPDF()->setProtocol($_SERVER['DOCUMENT_ROOT'])
        

        【讨论】:

          猜你喜欢
          • 2020-07-12
          • 2016-09-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-25
          • 2021-12-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多