我有一个Symfony项目,我需要导出PDF代码(存储在数据库中,然后随后用标题下载),其中包含图像,文本等。我无法在Web服务器上安装任何东西,所以有没看过KnpSnappyBundle,但是我正在使用Spread PDF生成器Bundle(https://github.com/stedekay/SpraedPDFGeneratorBundle)。
我可以在控制器中创建一个pdf:
$html = $this->render('templates/test1.html.twig');
$pdfGenerator = $this->get('spraed.pdf.generator');
return new Response($pdfGenerator->generatePDF($html),
200,
array(
'Content-Type' => 'application/pdf',
'Content-Disposition' => 'inline; filename="out.pdf"'
)
);
来自twig文件:
<html>
<head>
<title>test</title>
<style>
@font-face {
font-family: 'Roboto';
src: url({{ absolute_url(asset('css/fonts/Roboto/Roboto-Medium.ttf')) }}) format('truetype');
}
h1 {
font-family: Roboto;
font-size: 100px;
}
</style>
</head>
<body>
<h1>test</h1>
</body>
</html>
但它总是将Times New Roman显示为字体!即使我选择像Arial一样普通的东西。
如何获取要嵌入的字体?或者是否有另一个Symfony包将从html创建一个不需要在服务器上安装任何东西的PDF?
答案 0 :(得分:0)
我现在正在使用扩展wkhtmltopdf的Knp Snappy Bundle https://github.com/KnpLabs/KnpSnappyBundle。为了避免在服务器上手动安装任何东西,我在使用https://github.com/zendre4/wkhtmltopdf-amd64时会在你进行作曲家安装时包含二进制文件(我没有使用这个项目,因为它是陈旧的)。
然后在你的配置中(通常是/app/config/config.yml)添加:
knp_snappy:
pdf:
enabled: true
binary: %kernel.project_dir%/vendor/bin/wkhtmltopdf-amd64
options: []
composer install将添加一个供应商(因此二进制文件不包含在您的项目存储库中),它将在vendor / bin中创建二进制文件的符号链接。然后,此配置将告诉knp_snappy在哪里找到此二进制文件,因此您的部署的所有内容都将在您的composer安装(或更新)中得到处理。
以下是简要说明,如果有人需要进一步的详细信息,请在评论中添加问题,我会更新此答案。