用于生成PDF的Symfony2 Knp-snappy不会导入CSS

时间:2014-08-06 07:46:21

标签: php css twitter-bootstrap symfony pdf

我想从html.twig模板生成一个pdf,但有些不对劲......

事实上,PDF已经创建了良好的内容,但没有布局。似乎CSS文件不是导入的......

我使用Twitter的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="http://{{app.request.host}}">
        <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:抱歉打字错误,英语不是我的母语。

6 个答案:

答案 0 :(得分:14)

提供绝对参数会更容易:

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

答案 1 :(得分:11)

必须使用绝对路径链接资产。所以而不是:

<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 :(得分:5)

在使用Symfony 2.7时请注意,Twig已删除asset()函数的绝对参数。

armeabi

有关详细信息,请参阅New in Symfony 2.7: the new Asset component

答案 3 :(得分:2)

@ 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 %}

答案 4 :(得分:0)

UP资产调用中的绝对期权:

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

与官方捆绑回购相关: https://github.com/KnpLabs/KnpSnappyBundle/issues/78

答案 5 :(得分:0)

我遇到了同样的问题。正如此issue中所述,您的资产网址必须是绝对的。

这可以使用资产 twig功能和“包网址”在symfony中完成:

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

例如:

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

然后,在 app / config / config.yml

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

如果您使用的是本地配置,则在 config_dev.yml 中,您应使用其他网址,例如:

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