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'])
我正在尝试使用 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'])