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

FTL中引用CSS文件生成PDF无效果的问题求助(Liferay DXP环境)

解决Liferay DXP中FTL引用CSS生成PDF不生效的问题

我之前在Liferay里做PDF生成需求时也踩过类似的坑,直接写相对路径经常会因为资源加载上下文的问题导致CSS不生效,给你几个实用的解决方案:

1. 用Liferay专属FTL标签生成可靠的资源URL

Liferay提供了现成的标签来生成资源的绝对访问路径,能完美适配PDF渲染引擎(比如Liferay常用的Flying Saucer)的资源加载逻辑,不用再纠结层级混乱的相对路径。在FTL里这么写就行:

<link rel="stylesheet" href="<@liferay.resource url='/font/fonts.css' />" />
<link rel="stylesheet" href="<@liferay.resource url='/stylesheets/global.css' />" />

这里的url参数直接从META-INF/resources根目录开始写,Liferay会自动处理路径映射,确保渲染PDF时能精准找到文件。

2. 核对FTL位置与相对路径的匹配关系

如果你更倾向用相对路径,一定要先确认FTL文件的目录层级:

  • 假设你的FTL在META-INF/resources/templates/report.ftl,那fonts.css的相对路径应该是../font/fonts.css(先回到resources根目录,再进入font文件夹),global.css则是../stylesheets/global.css
  • 如果FTL本身就在META-INF/resources根目录下,直接写font/fonts.css和stylesheets/global.css即可,不用加../或/开头

3. 检查CSS内部的资源引用(比如字体)

要是你的fonts.css里引用了字体文件,这个路径也不能错。比如字体文件放在META-INF/resources/font/下,那fonts.css里得这么写:

@font-face {
    font-family: 'CustomFont';
    src: url('./custom-font.ttf') format('truetype');
}

用./开头表示相对于fonts.css所在的font目录,避免因为字体加载失败,让你误以为整个CSS都没生效。

4. 排查PDF渲染引擎的资源加载限制

Liferay默认用Flying Saucer渲染HTML生成PDF,它对外部资源加载有一定限制。你可以开启调试模式查看生成日志,看看有没有资源加载失败的报错信息,这能帮你快速定位问题根源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:36:30