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


存储在

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。是否存在根本的不兼容或我做错了什么?

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

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

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

您需要

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

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

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

获取和使用绝对路径对我根本不起作用。只有当我使用 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"
/>

相关内容

最新更新