在Symfony中包含用于传播PDF生成器包的字体

时间:2017-07-13 07:01:57

标签: php css symfony pdf fonts

我有一个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?

1 个答案:

答案 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安装(或更新)中得到处理。

以下是简要说明,如果有人需要进一步的详细信息,请在评论中添加问题,我会更新此答案。