【问题标题】:Symfony 4 - DomPDF - Display image with VichUploader?Symfony 4 - DomPDF - 使用 VichUploader 显示图像?
【发布时间】:2020-02-03 21:58:46
【问题描述】:

我希望在我的 Symfony 4 项目中使用 DomPDF 创建 PDF。我希望我可以插入来自实体的图像。图片由 VichUploaderBundle 管理。

有没有办法显示它们?

目前我在我的 twig 文件中这样做

<html>
    <head>
        <meta charset="UTF-8">
        <title>Title of the PDF</title>
    </head>
    <body>
        <h4>{{ title }}</h4>
        <p>Lorem Ipsum</p>
        <div class="user-pic">
            {% if app.user and app.user.avatar and app.user.avatar.imageName %}
                <img class="img img-responsive img-rounded" src="{{ absolute_url(vich_uploader_asset(app.user.avatar, 'imageFile'))}}">

            {% else %}
                <img src={{"/images/avatar/default.jpg"}}>
            {% endif %}
        </div>
    </body>
</html>

但它不起作用。图像丢失。只有“alt”。

我的 vichUploader 配置:

avatar:
      uri_prefix: /images/avatar
      upload_destination: "%kernel.project_dir%/public/images/avatar"

      inject_on_load: false
      delete_on_update: true
      delete_on_remove: true

在我的控制器中:

 /**
     * Générer un PDF
     * @Route("/absence/pdf", name="absence_pdf")
     *
     * @return void
     */
    public function createPDF()
    {
        // Configure Dompdf according to your needs
        $pdfOptions = new Options();
        $pdfOptions->set('defaultFont', 'Arial')
        ->set('isRemoteEnabled', true);

        // Instantiate Dompdf with our options
        $dompdf = new Dompdf($pdfOptions);

        // Retrieve the HTML generated in our twig file
        $html = $this->renderView('absence/pdf.html.twig', [
            'title' => "Welcome to our PDF Test"
        ]);

        // Load HTML to Dompdf
        $dompdf->loadHtml($html);

        // (Optional) Setup the paper size and orientation 'portrait' or 'portrait'
        $dompdf->setPaper('A4', 'portrait');

        // Render the HTML as PDF
        $dompdf->render();

        // Output the generated PDF to Browser (inline view)
        $dompdf->stream("mypdf.pdf", [
            "Attachment" => false
        ]);
    }

我有这个错误:

错误:超过 120 秒的最大执行时间

【问题讨论】:

  • 你说的不起作用是什么意思?请将您的 VichUploader 配置和实际呈现 pdf/图像的控制器部分添加到问题中。如果将此模板呈现为 pdf 会发生什么? pdf 中的图像是否:a) 缺失 b) 空白,c) 显示 default.jpg, d) ...?我们无法猜测这段代码 sn-p 的当前行为。
  • 在 pdf 上,我只有出现的图像的“alt”部分。否则,图片丢失。我会更新我的第一篇文章
  • 我已经有一段时间没有使用 dompdf 了。问题是 dompdf 首先不知道您的本地网络服务器,因此无法从当前相对路径呈现图像。解决方案如下。

标签: image symfony twig dompdf vichuploaderbundle


【解决方案1】:

DomPDF 渲染器不知道图像的基本 URL,因为您只是将 HTML 字符串传递给它。

为了使用 DomPDF 正确渲染图像,您需要使用绝对路径并启用远程源,如下所示:

在您的模板中使用absolute_url twig 函数:

absolute_url(vich_uploader_asset(app.user.avatar, 'imageFile'))

在您的控制器中允许 DomPDF 呈现“远程”图像:

 $pdfOptions->set('isRemoteEnabled', true);

【讨论】:

  • 感谢您的回复!我更新了代码,但是当我启动页面时,出现“错误:超过 120 秒的最大执行时间”错误。但是,在我的树枝中,我现在有“”(我用新代码更新了我的第一篇文章)
猜你喜欢
  • 2019-08-03
  • 2019-09-07
  • 2021-12-17
  • 2017-03-30
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
  • 2013-05-28
  • 1970-01-01
相关资源
最近更新 更多