KnpSnappyBundle - wkhtmltopdf: CSS / изображения загружаются, но не скрипты

Стиль и изображения для моего сгенерированного PDF-файла из HTML хорошо загружены, но не скрипты.

twig:
        debug: '%kernel.debug%'
        strict_variables: '%kernel.debug%'
        form_themes: ['bootstrap_4_horizontal_layout.html.twig']
        globals:
            pathToWeb: "%kernel.project_dir%/web"

knp_snappy:
    pdf:
        enabled:    true
        binary:     /usr/bin/wkhtmltopdf --javascript-delay 5000 --no-stop-slow-scripts --enable-javascript --debug-javascript --margin-top 0 --margin-bottom 0 --margin-left 0 --margin-right 0
        options:    []

DockerFile (wkhtmltopdf 0.12.3 с пропатченным qt (мне он нужен для верхних и нижних колонтитулов))

RUN apt-get install libssl1.0-dev -y
RUN cd ~
RUN wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.3/wkhtmltox-0.12.3_linux-generic-amd64.tar.xz
RUN tar vxf wkhtmltox-0.12.3_linux-generic-amd64.tar.xz 
RUN cp wkhtmltox/bin/wk* /usr/bin/

base.html.twig

<!DOCTYPE html>
<html>
    <head>
        <meta charset = "UTF-8" />
        <title>{% block title %}Meetings manager{% endblock %}</title>
        {% block stylesheets %}
            <link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity = "sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin = "anonymous">
            <link rel = "stylesheet" href = "https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity = "sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin = "anonymous">
            <link href = "https://fonts.googleapis.com/css?family=Lato:400,700" rel = "stylesheet">
            <link rel = "stylesheet" href = "{{ absolute_url(asset('css/navbar.css')) }}">
            <link rel = "stylesheet" href = "{{ absolute_url(asset('css/general.css')) }}">
        {% endblock %}
        <link rel = "icon" type = "image/x-icon" href = "{{ asset('favicon.ico') }}" />
        <meta name = "viewport" content = "width=device-width, initial-scale=1.0">
    </head>
    <body>
        {% block body %}{% endblock %}
        <script src = "https://code.jquery.com/jquery-3.3.1.min.js" integrity = "sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8 = " crossorigin = "anonymous"></script>
        <script src = "https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity = "sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin = "anonymous"></script>
    </body>
</html>

Затем этот шаблон расширяется и загружаются изображения, например:

<img style = "width: 100%;" src = "{{pathToWeb ~ asset('image/emargement_top.png') }}">

Похоже, что javascript может быть выполнен, если я вставлю

<script>document.write("test");</script>

Работает, но не другие скрипты.

Я пытался

    <script src = "{{ absolute_url(asset('pdf/js/bootstrap.js')) }}"></script>
    <script src = "{{ absolute_url(asset('pdf/js/jquery-3.3.1.js')) }}"></script>

а также

    <script src = "{{pathToWeb ~ asset('pdf/js/bootstrap.js')) }}"></script>
    <script src = "{{pathToWeb ~ asset('pdf/js/jquery-3.3.1.js')) }}"></script>

Это тоже не работает (я поместил локальную версию скриптов в веб-папку, как вы можете видеть)

В поддон до:

  • CSS работает (пользовательский css и bootstrap css)
  • Изображения работают
  • Javascript может быть выполнен
  • Скрипты jquery и bootstrap не загружаются (сетка начальной загрузки не работает)

Любые идеи ?

Какую версию начальной загрузки вы используете?

Tomsgu 09.11.2018 11:59

Я использую bootstrap 4, я знаю о проблеме с col, вам нужно использовать .col-n вместо .col-xs-n, я попробую использовать bootstrap 3, и я вернусь stackoverflow.com/questions/19705880/…

Thomas Fournet 09.11.2018 12:00
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
2
1 605
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я вижу, вы используете bootstrap 4 (flexbox). Это не поддерживается в стабильной версии wkhtmltopdf (0.12.x). Для получения дополнительной информации посмотреть здесь. К сожалению, в настоящее время разработка не ведется, поэтому может потребоваться много времени, пока это будет поддержано.

Есть некоторые неполные альтернативы, такие как кукловод (на данный момент нет ТОС).

Работает с бутстрапом 3! Я потерял так много времени на это. Но есть что-то странное, я ранее устанавливал версию 0.12.3.2 (по умолчанию), в которой не было исправлений qt. Я запустил его благодаря xvfb, и таким образом был сгенерирован bootstrap 4 (но у меня не было верхнего и нижнего колонтитула)

Thomas Fournet 09.11.2018 13:51

Я бы посоветовал установить 0.12.4 или 0.12.6-dev, если вы используете toc, и 0.12.5, если он вам не нужен. Для этих версий вам не нужен xvfb.

Tomsgu 09.11.2018 15:56

Другие вопросы по теме