带有laravel的DOMPDF - 无法在html文件中加载图像

Posted

技术标签:

【中文标题】带有laravel的DOMPDF - 无法在html文件中加载图像【英文标题】:DOMPDF with laravel - cannot load images in html file 【发布时间】: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 中渲染图片应该怎么做?

【问题讨论】:

【参考方案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/***/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'])

【讨论】:

以上是关于带有laravel的DOMPDF - 无法在html文件中加载图像的主要内容,如果未能解决你的问题,请参考以下文章

dompdf 没有从 Laravel 8 和 Livewire 视图下载 PDF

DOMPDF:图像不可读或为空。 (使用 barryvdh/laravel-dompdf)

Laravel Dompdf 生成 pdf 错误

laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy

Laravel:尝试获取 PDF 时出现 DOMPDF 错误

Laravel Dompdf- 更改摄影大小