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的主要内容,如果未能解决你的问题,请参考以下文章
复合标识符,但使用 ID 生成器而不是手动分配 + Symfony2