【问题标题】:Laravel dompdf error "Image not found or type unknown"Laravel dompdf 错误“找不到图像或类型未知”
【发布时间】:2017-08-15 09:58:37
【问题描述】:

使用 dompdf 包在 Laravel 5.4 中下载 PDF 后出现错误“找不到图像或类型未知”。这是方法

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;">

但不适用于动态名称。

请建议我如何解决它。

【问题讨论】:

  • 您好,与您提到的问题不同。那篇文章是关于我可以制作的固定图像(请参阅我的帖子详细信息)。这是关于动态图片网址的。其次,那里的解决方案对我不起作用。我在这里发布之前尝试过。事实上,我尝试了stackoverflow和dompdf github页面中提供的其他解决方案。没有任何效果@milo526
  • 这个问题是关于barryvdh/laravel-dompdf 的吗?如果是,为什么不指定呢?

标签: php laravel laravel-5.4 dompdf


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    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');
    }
    

    【讨论】:

      【解决方案3】:

      我已经解决了:

      1- 调用 DomPDF 库:

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

      2- 生成 HTML 文件,我使用一个返回简单 HTML 表的函数:

      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 表中,我使用完整路径调用图像,这样:

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

      就是这样,我希望这对我有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-16
        • 2023-03-26
        • 2020-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        相关资源
        最近更新 更多