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
相关产品推荐
相关产品推荐

