Symfony2 Knp-snappy 生成 PDF 不导入 CSS

Posted

技术标签:

【中文标题】Symfony2 Knp-snappy 生成 PDF 不导入 CSS【英文标题】:Symfony2 Knp-snappy to generate PDF doesn't import CSS 【发布时间】:2014-09-29 01:33:03 【问题描述】:

我想从 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:对不起,错别字,英语不是我的母语。

【问题讨论】:

什么给了你'app.request.host'? ***.com/questions/10526157/… 【参考方案1】:

这样提供绝对参数会更容易:

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

【讨论】:

仅适用于2.5及以上版本【参考方案2】:

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

<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">

我自己也遇到了这个问题,这为我解决了。

【讨论】:

我遇到了这个问题。有什么想法吗? @Soullivaneuh 完全取决于您到目前为止所做的工作。最好的办法是检查以确保您可以通过浏览器正确打开 CSS。如果可以的话,我会把它作为一个问题发布。 查看此答案以获取便携式解决方案***.com/questions/17049712/…【参考方案3】:

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

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

请参阅New in Symfony 2.7: the new Asset component 了解更多信息。

【讨论】:

【参考方案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 %

【讨论】:

对我来说,这会引发一个 twig 错误(symfony 2.8),我采用了这个解决方案:href=" app.request.scheme ~'://' ~ app.request.httpHost ~ asset_url "【参考方案5】:

资产看涨中的绝对期权:

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

在官方 bundle repo 中有相关: https://github.com/KnpLabs/KnpSnappyBundle/issues/78

【讨论】:

【参考方案6】:

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

这可以在 symfony 中使用 asset 树枝函数和“package urls”来完成:

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 中,您应该使用不同的 URL,例如:

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

【讨论】:

以上是关于Symfony2 Knp-snappy 生成 PDF 不导入 CSS的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2 - 使用没有附加任何实体的表单生成器

Symfony2 - 动态生成的表单在编辑表单时不起作用

symfony2 控制器的功能测试:如何生成路由

复合标识符,但使用 ID 生成器而不是手动分配 + Symfony2

由 Doctrine2 (Symfony2) 生成的约束中的奇怪随机名称

如何使用 symfony2 学说查询生成器选择不同的查询?