You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopware 6自定义PDF文档第三方CDN字体无法渲染求助

问题描述

我们按照Shopware官方文档为Shopware 6项目创建了自定义PDF文档,功能正常但存在样式问题:使用的两款自定义字体中,Google Font的IBM Plex Sans可正常加载,而CDNFont的Gilligans Island完全无法在PDF中渲染。

当前字体加载代码(Twig模板中):

{% block document_font_links %}
   <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;600&display=swap" rel="stylesheet">
   <link href="https://fonts.cdnfonts.com/css/gilligans-island" rel="stylesheet">
{% endblock %}

style_custom_portrait.css.twig中的CSS设置:

font-family: 'IBM Plex Sans', Arial, sans-serif;
font-family: 'Gilligans Island', Arial, sans-serif;

仅IBM Plex Sans字体生效。我们已尝试两种方案:将字体直接存储在插件中本地加载、使用Base64内联加载字体:

@font-face { 
  font-family: gilligans island; 
  font-weight: 400; 
  src: local('Gilligans Island'), url(data:application/x-font-woff;charset=utf-8;base64,d09GRgABAAAAAFkIAA8AAAAAjIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAABYVAAAAD0AAABOhBhy82NtYXAAAFEQAAAB2QAAAzK0ij+MY3Z0IAAAAugAAAA6AAAAOl...}

但均未解决问题。请问加载非Google Fonts的CDN字体需要特殊处理吗?求可行解决方案。

可行解决方案

1. 修正@font-face语法错误

你提供的Base64内联代码存在两处关键错误:

  • 含空格的字体名称必须用引号包裹:font-family: 'Gilligans Island';
  • Base64编码的URL结尾缺少闭合括号与大括号,导致CSS解析失败

修正后的@font-face示例:

@font-face {
  font-family: 'Gilligans Island';
  font-weight: 400;
  font-style: normal;
  src: local('Gilligans Island'),
       url(data:application/font-woff;charset=utf-8;base64,替换为完整的Base64编码) format('woff');
}

2. 确保字体格式兼容wkhtmltopdf

Shopware 6的PDF生成依赖wkhtmltopdf,它对字体格式支持有限,优先使用WOFF 1.0或**TrueType(.ttf)**格式,避免使用WOFF 2.0。若当前Base64是WOFF 2.0,需转换为兼容格式后重新编码。

3. 本地字体的正确加载方式

若选择本地存储字体,需将字体文件放在插件的public/fonts目录下,再用相对路径引用:

@font-face {
  font-family: 'Gilligans Island';
  font-weight: 400;
  src: url('../fonts/gilligans-island.woff') format('woff');
}

同时执行以下命令确保Shopware发布插件静态资源:

bin/console plugin:refresh
bin/console plugin:install --activate YourPluginName
bin/console assets:install

4. CDN字体的跨域配置(可选)

若坚持使用CDNFont链接,需修改wkhtmltopdf配置允许跨域资源加载,在config/packages/shopware.yaml中添加:

shopware:
    pdf:
        enabled: true
        binary_path: '/usr/local/bin/wkhtmltopdf' # 替换为你的wkhtmltopdf实际路径
        options:
            - '--enable-javascript'
            - '--enable-local-file-access'
            - '--allow'
            - 'fonts.cdnfonts.com'

注意:该方式依赖CDN稳定性,且部分CDN的防盗链机制可能导致字体无法被抓取。

5. 验证字体加载效果

在PDF模板中添加强制使用目标字体的测试文本:

<p style="font-family: 'Gilligans Island', sans-serif;">测试Gilligans Island字体渲染</p>

若仍不生效,可启用wkhtmltopdf调试模式,查看字体加载错误日志排查问题。

内容的提问来源于stack exchange,提问作者Ria Spirjak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 09:12:29