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

Posted

技术标签:

【中文标题】在 Symfony 中包含用于传播 PDF 生成器包的字体【英文标题】:Including fonts for spread PDF generator bundle in Symfony 【发布时间】:2017-12-17 19:38:38 【问题描述】:

我有一个 Symfony 项目,我需要导出包含图像、文本等的 PDF 代码(存储在数据库中,然后与标题一起下载)。我无法在 Web 服务器上安装任何东西,所以没有查看在 KnpSnappyBundle,但我使用的是 Spread PDF 生成器包 (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"'
    )
);

来自树枝文件:

<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】:

我现在正在使用扩展 wkhtmltopdf 的 Knp Snappy Bundle https://github.com/KnpLabs/KnpSnappyBundle。为了避免在服务器上手动安装任何东西,我使用了https://github.com/zendre4/wkhtmltopdf-amd64,它会在你安装 composer 时包含二进制文件(我没有使用这个派生出来的项目,因为它已经过时了)。

然后在你的配置(一般是/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 安装(或更新)中处理。

这些是简要说明,如果有人需要更多详细信息,请在评论中添加问题,我会更新此答案。

【讨论】:

您好,您是如何从 css 初始化字体的?

以上是关于在 Symfony 中包含用于传播 PDF 生成器包的字体的主要内容,如果未能解决你的问题,请参考以下文章

导出为 PDF 时如何在文本字段中包含图像和表格?

在 for 循环 r markdown 中包含两个变量之间的空格(pdf 输出)

脚本移动选择相对于传播范围?

使用 PDF.js 生成 pdf 的缩略图

Symfony2 Knp-snappy 生成 PDF 不导入 CSS

GScript将同一文档中的多张图纸转换为单独的PDF,并将每个PDF发送到每张图纸的单元格B2中包含的电子邮件地址中