带有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】:您可以将图像路径打印为<img>
标记的src
属性。
假设您在一个变量中有图片所在位置的路径:
$img = asset($imgen);
你可以像这样回显它:
<img src="@php echo $img @endphp">
【讨论】:
【参考方案4】:似乎需要设置协议并添加一个额外的选项:
$pdf->setOptions(['isRemoteEnabled' => true]);
$pdf->getDomPDF()->setProtocol($_SERVER['DOCUMENT_ROOT'])
或者:
$pdf->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中使用的PDF扩展包——laravel-dompdf和laravel-snappy