Laravel DOMPDF:如何从存储文件夹加载图像?

Posted

技术标签:

【中文标题】Laravel DOMPDF:如何从存储文件夹加载图像?【英文标题】:Laravel DOMPDF: how to load image from storage folder? 【发布时间】:2016-09-01 22:46:46 【问题描述】:

存储在Laravel 5.2 的/storage/app/ 文件夹中的图像未渲染到DOMPDF。我收到一条错误消息:image not found or type unknown

图片的路径是storage/app/v6_dashboard.png,我试过这些:

<img src="/media/v6_dashboard.png" />
<img src="media/v6_dashboard.png" />
<img src="http://localhost:8000/media/v6_dashboard.png" />

使用这条路线的:

Route::get('/media/img', function ($img) 
  $image = Image::make(Storage::disk('local')->get($img));
  return Response::make($image->encode('jpg'), 200, ['Content-Type' => 'image/jpeg']);
);

注意我有这个配置集:"DOMPDF_ENABLE_REMOTE" =&gt; true

它适用于典型的 html 视图,但不适用于 DOMPDF。是根本不兼容还是我做错了什么?

【问题讨论】:

你试过了吗:$image = Image::make(storage_path('app/' . $img)); @tptcat 路由本身在 HTML 视图中工作。你的意思是你的语法对于 DOMPDF 会更好吗? 【参考方案1】:

您需要引用图像的公共路径。因此,如果“image.jpg”在您的 public/images 文件夹中并存储在名为 $image 的变量中,您可以执行以下操作:

<img src=" public_path() . $image ">

dompdf 需要服务器上的绝对路径,而不是客户端看到的!

【讨论】:

这适用于 img 标签,但是当尝试在 background-image css prop 中使用它时不起作用。有什么建议吗? 什么意思,如果被css访问呢?只需将您的图片放入 public/images/ .my-css-class background-image: url("/images/file-name.png") 或仅在 html 标签内,&lt;div style="background-image: url(' asset('/images/'. $image) ');" &gt; 我的错,帖子说public_path,我的图像在存储路径中,我不希望它们可以公开访问,因此我需要使用完整路径来实现它,但我让它工作的唯一方法是使用 laravel 存储,获取文件并将其传递到 base64 编码的视图中 嗯,你读过这个文档吗? laravel.com/docs/5.6/filesystem#configuration您的文件将保存在存储文件夹中。【参考方案2】:

最后,我绕过了路由,使用str_replace/media/ 切换到绝对路径,如下所示:

str_replace('/media/', '../storage/app/', $link);

在 HTML 中从 publicstorage 有点违反直觉,但它似乎是 DOMPDF 呈现图像的唯一方法。还发现 DOMPDF 不会通过 HTTPS 呈现远程图像。

【讨论】:

以上是关于Laravel DOMPDF:如何从存储文件夹加载图像?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在 Laravel 中将多个数组/变量传递给 DOMPDF?

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

如何使用 barryvdh/laravel-dompdf 将 PDF 附加到 Laravel 的电子邮件中

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

使用 Laravel DomPDF 制作 PDF 文件