Подтвердить что ты не робот

Symfony2 Knp-snappy для создания PDF не импортирует CSS

Я хотел бы создать pdf файл из шаблона html.twig, но что-то не так...

Фактически, PDF был создан с хорошим контентом, но нет макета. Кажется, файлы CSS не импортируются...

Я использую Bootstrap из твиттера для управления макетом.

Здесь часть моего контроллера

 $filename = "CI-TRI-".$Chrono->getChrono();
            $this->get('knp_snappy.pdf')->generateFromHtml(
                                                            $this->renderView('WebStoreMainBundle:Admin:customInvoiceTemplate.html.twig', array('User'=>$User,'Parts'=>$parts, 'device'=>$device, 'rate'=>$rate)),
                                                            __DIR__.'/../../../../web/download/'.$filename.'.pdf'
                                                            );

И вот мой макет:

<html>
<head>
     {% block stylesheets %}
        <link rel="stylesheet" type="text/css" href="{{ asset('bootstrap/css/bootstrap.css') }}">
        <link rel="stylesheet" type="text/css" href="{{ asset('bootstrap/css/customInvoice.css') }}">
        <base href="#" onclick="location.href='http://{{app.request.host}}'; return false;">
        <meta charset="UTF-8" >
    {% endblock %}
</head>
<body>
    {% block header %}
        <div class="span2">
            <img src="{{ asset('bootstrap/img/GTO_logo.png') }}">
        </div>
    {% endblock %}

    {% block content %}

    {% endblock %}

</body>

Пожелайте, чтобы кто-то помог мне..

PS: Извините за опечатки, английский не является моим родным языком.

4b9b3361

Ответ 1

Активы должны быть связаны с использованием абсолютных путей. Поэтому вместо:

<link rel="stylesheet" type="text/css" href="{{ asset('bootstrap/css/bootstrap.css') }}">

Это должно быть:

<link rel="stylesheet" type="text/css" href="http://yourdomain.com/bootstrap/css/bootstrap.css">

У меня была эта проблема, и это меня разобрало.

Ответ 2

Было бы проще указать абсолютный параметр:

<link rel="stylesheet" type="text/css" href="{{ asset('bootstrap/css/bootstrap.css', absolute=true) }}">

Ответ 3

Обратите внимание, что при использовании Symfony 2.7 Twig удалил абсолютный аргумент для функции asset().

<link rel="stylesheet" type="text/css" href="{{ absolute_url(asset('bootstrap/css/bootstrap.css')) }}">

Подробнее см. Новое в Symfony 2.7: новый компонент Asset для получения дополнительной информации.

Ответ 4

@user1805558 Ответ работал у меня. Я также использовал Less и использовал это, что некоторые могут найти полезным:

{% block stylesheets %}
    {% stylesheets filter='lessphp' combine=true output='css/pdf.css.twig'
        '../app/Resources/assets/css/pdf.less'
    %}
        <link rel="stylesheet" type="text/css" href="{{ asset(asset_url, absolute=true) }}"/>
    {% endstylesheets %}
{% endblock %}

Ответ 5

UP для абсолютной опции при вызове актива:

<img src="{{ asset('/assets/img/AVNZ-Logo-H-SMALL.jpg', absolute=true) }}">

Это связано с официальной репликами пакетов: https://github.com/KnpLabs/KnpSnappyBundle/issues/78

Ответ 6

У меня была та же проблема. Как прокомментировано в этом issue, ваши URL-адреса активов должны быть абсолютными.

Это можно выполнить в symfony, используя актив twig funtion и "URL-адреса пакетов":

http://symfony.com/doc/current/reference/configuration/framework.html#assets-base-urls

Например:

<link rel="stylesheet" type="text/css" href="{{ asset('bootstrap/css/bootstrap.css') }}">

И затем в приложении /config/config.yml

framework:
# ...
templating:
    assets_base_urls:
        http:
            - "http://yourdomain.com/"

Если вы находитесь в своей локальной конфигурации, внутри своего config_dev.yml вместо этого вы должны использовать другой URL, например:

    - "http://localhost/myproject/web/"