Laravel dompdf 错误 "Image not found or type unknown"

Laravel dompdf error "Image not found or type unknown"

使用 dompdf 软件包在 Laravel 5.4 中下载 PDF 后出现错误 "Image not found or type unknown"。这是方法

public function pdf()
    {
        $users = User::get();
        $pdf = PDF::loadView('pdf', compact('users'));

        return $pdf->download('Users.pdf');
    }

我的查看文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>PDF</title>
</head>
<body> 
    <div class="container">
        <div class="row">
            @foreach ($users as $user)
                <img src="public/storage/images/{{ $user->profile_pic }}" alt="" style="width: 150px; height: 150px;">
            @endforeach
        </div>
    </div>
</body>
</html>

如果我尝试使用静态图像名称(如下所示),它会起作用

<img src="public/storage/images/image_1.jpg" alt="" style="width: 150px; height: 150px;">

但不适用于动态名称。

请建议我该如何修复它。

根据 this 问题,您必须使用完整的 服务器路径 尝试:

<img src="{{ public_path("storage/images/".$user->profile_pic) }}" alt="" style="width: 150px; height: 150px;">

假设图像存储在您的 public 目录中。

我已经解决了:

1- 调用 DomPDF 库:

require_once ($_SERVER['DOCUMENT_ROOT'] . "/mi/LiquidacionesSueldo/include/dompdf/autoload.inc.php");
    ob_start();

2- 生成 HTML 文件,我用 returns 一个简单的 HTML table:

函数来完成
get_dias_goce_sueldo($_POST['run'],$_POST['dvr'],$_POST['cantidad_dias'],$_POST['desde'],$_POST['hasta'],$_POST['am_pm']);

3- 现在,您必须初始化 DomPDF 对象,注意我设置的所有选项:

    $dompdf=new Dompdf\Dompdf();
    $dompdf->set_option('isHtml5ParserEnabled', true);
    $dompdf->set_option('isRemoteEnabled', true);   
    $dompdf->loadHtml(ob_get_clean());
    $dompdf->set_paper('letter', 'portrait');
    $dompdf->render();
    $dompdf->stream("Solicitud_de_permiso_con_goce_de_sueldo.pdf", array('Attachment'=>1));

注意:在我的函数中,在 HTML table 中,我用完整路径调用图像,这样:

<img src="'.$_SERVER['DOCUMENT_ROOT'].'/mi/DiasAdministrativos/logo.png">

就这些了,我希望这对我有用。

public function pdf()
{
    $users = User::get();
    $pdf = PDF::loadView('pdf', compact('users'));
    $pdf->getDomPDF()->setHttpContext(
        stream_context_create([
            'ssl' => [
                'allow_self_signed'=> TRUE,
                'verify_peer' => FALSE,
                'verify_peer_name' => FALSE,
            ]
        ])
    );

    return $pdf->download('Users.pdf');
}

试试这个,它在 Laravel 中运行良好。

public function pdf()
{
    $users = User::get();
    $pdf = PDF::setOptions([
        'isHtml5ParserEnabled' => true,
        'isRemoteEnabled' => true
    ])->loadView('pdf', compact('users'));

    return $pdf->download('Users.pdf');
}

就我而言。它适用于 windows 但不适用于 ubuntu 20.

我改为<img src="data:image/png;base64,{{ base64_encode(file_get_contents(public_path('/img/logo.png''))) }}"> 并且工作正常