Symfony 4 - DomPDF - Показать изображение с VichUploader? - PullRequest
1 голос
/ 06 октября 2019

Я хочу создать PDF с DomPDF в моем проекте Symfony 4. Я хотел бы вставить изображения от лица. Изображения управляются с помощью VichUploaderBundle.

Есть ли способ отобразить их?

На данный момент я сделал это в своем файле ветки

<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 секунд

1 Ответ

0 голосов
/ 06 октября 2019

Средство визуализации DomPDF не знает базовый URL-адрес изображений, потому что вы просто передаете ему строку HTML.

Для правильной визуализации изображений с помощью DomPDF необходимо использовать абсолютный путь ивключите удаленные источники следующим образом:

В вашем шаблоне используйте функцию absolute_url twig:

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

В вашем контроллере DomPDF позволяет отображать «удаленные» изображения:

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