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

svmlkihl  于 2023-06-07  发布在  其他
关注(0)|答案(3)|浏览(152)

存储在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" => true
它可以在典型的HTML视图中工作,但不能在DOMPDF中工作。是根本的不相容还是我做错了什么?

zu0ti5jz

zu0ti5jz1#

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

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

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

vbopmzt1

vbopmzt12#

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

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

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

nbnkbykc

nbnkbykc3#

获取和使用绝对路径对我来说根本不起作用。我的图像只在使用base64编码时才显示在pdf中:

$fullpath = storage_path('app/public/'.$tprofile->profilepic); 

<img 
 class="w-48 mr-6 mb-6"
src="data:image/png;base64,
<?php echo base64_encode(file_get_contents($fullpath)); ?>"
width="150px"
 />

相关问题