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

DOMPDF with laravel - cannot load images in html file

我正在尝试使用 laravel 和 dompdf 库生成 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 中渲染图像?

我认为对于 dompdf,您需要传递可正确访问的 url 而不是相对路径。

试试看 <img src="{{ asset('img/logo.png')}}" alt="BTS">

或者,如果资产不起作用,请尝试 <img src="{{ public_path('img/logo.png')}}" alt="BTS">

另请注意,资产使用 public 目录作为 base_url 来计算 'asset' 来自。

我也为同样的错误挣扎了 3 天。此外,当我尝试上述技巧时,none 也奏效了。但是当我将图像文件更改为 .jpg 文件(扩展名)时,一切正常。

<img src="{{ public_path('img/logo.jpg') }}" >
  • Laravel版本:5.8.38
  • PHP版本:7.3
  • barryvdh/laravel-dompdf版本:0.8.6

您可以将图像路径打印为 <img> 标签的 src 属性。

假设您在变量中有图像位置的路径: $img = asset($imgen);

Yust echo it out like this: <img src="@php echo $img @endphp">

似乎需要设置协议并添加一个附加选项:

    $pdf->setOptions(['isRemoteEnabled' => true]);
    $pdf->getDomPDF()->setProtocol($_SERVER['DOCUMENT_ROOT'])

或者:

$pdf->setProtocol($_SERVER['DOCUMENT_ROOT']);

此后 src="/storage/myimage.png" 将起作用。

我尝试了所有的技巧!!唯一对我有用的解决方案是:

header {
            background-image: url("https://example.org/logo.jpg");
        }

$pdf->setOptions(['isRemoteEnabled' => true]);
$pdf->getDomPDF()->setProtocol($_SERVER['DOCUMENT_ROOT'])