【问题标题】:return $pdf->stream doesn't load the logo - DomPDF Laravelreturn $pdf->stream 不加载徽标 - DomPDF Laravel
【发布时间】:2021-09-24 20:29:43
【问题描述】:

晚安,

我有一个带有徽标(图像)的 HTML。当我给出返回视图时,我正常查看页面:

$pdf = PDF::loadView('pdf.pdf', array_merge($request->all(),['logo'=>$baseImage])); 
view('pdf.pdf', array_merge($request->all(),['logo'=>$baseImage]));

但是,当我更改第二行时,它会生成 pdf,但没有徽标:

return $pdf->stream('teste.pdf', array_merge($request->all(),['logo'=>$baseImage]));

基础图像 - 控制器

public function pdf (Request $request){                 
    $baseImage = Storage::get('public/logo.png');       
    $baseImage = base64_encode($baseImage);
    $baseImage = 'data:image/png;base64,'.$baseImage;
    $customPaper = array(0,0,360,360);
    $pdf = PDF::loadView('pdf.pdf', array_merge($request->all(),['logo'=>$baseImage])); 
    return $pdf->stream('teste.pdf');
}

于是标志出现了:

<td rowspan="2" style="width: 25%;"> <img src="{{$logo}}" width='100%' height="auto"/> </td> 

【问题讨论】:

标签: php laravel dompdf


【解决方案1】:

据我所知,dompdf 有一些奇怪的特性,对于图像而不是服务器 url 或相对路径,使用服务器路径,所以将你的图像 src 更改为这样的:

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

【讨论】:

  • 我试图这样做,但图像坏了。 public_path 是 C:\xampp\htdocs\entidades\public 并且徽标在那里。
【解决方案2】:
$pdf = PDF::loadView('pdf.pdf', array_merge($request->all(),['logo'=>$baseImage])); 
return $pdf->stream('teste.pdf');

然后在查看文件中

 <img src="{{public_path($logo)}}"/>

注意:公共路径指向 laravel 公共文件夹。

参考:https://github.com/barryvdh/laravel-dompdf/issues/344

更新: 由于您正在从存储中获取图像并转换为 base64。所以我相信实际的图像路径在 storage/app/public/logo.png 中,因此您可以执行以下操作

  <img src="{{$logo}}"/>

另一个选项是创建到存储的符号链接。所以运行以下命令

php artisan storage:link

这将在公用文件夹中创建快捷方式文件夹,因此无需转换为 base64 等。

  <img src="{{public_path('storage/logo.png')}}"/>

【讨论】:

    猜你喜欢
    • 2018-12-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2020-04-17
    • 2020-07-17
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多