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

Laravel 11中Spatie PDF生成时Vite未运行丢失CSS样式问题

问题排查与解决步骤

1. 修正TailwindCSS的内容扫描范围

生产构建时Tailwind会自动清除未使用样式,如果PDF视图文件没被纳入扫描范围,相关样式会被直接删掉。

修改tailwind.config.js,把PDF视图路径加入content数组:

export default {
  content: [
    "./resources/views/**/*.blade.php",
    "./resources/views/pdf/**/*.blade.php", // 替换为你实际的PDF视图目录
    "./app/Http/Controllers/**/*.php",
  ],
  // 其他配置项
}

修改后重新执行npm run build完成部署。

2. 使用绝对URL引入构建后的CSS

spatie/laravel-pdf的渲染引擎(如Chrome)无法解析相对路径的CSS文件,需用Laravel的资源生成函数输出完整绝对URL:

<link rel="stylesheet" href="{{ Vite::asset('resources/css/app.css') }}">

这个方法会自动适配本地开发和生产环境,指向正确的构建后文件,无需手动写哈希文件名。

如果直接指定构建文件,确保用asset()生成绝对路径:

<link rel="stylesheet" href="{{ asset('build/assets/app-Bq_2mYPq.css') }}">

3. 内联CSS到PDF视图

若外部CSS仍无法加载,可直接将构建后的CSS内容内联到PDF的<style>标签中:

<style>
{!! file_get_contents(public_path('build/assets/app-Bq_2mYPq.css')) !!}
</style>

注意确认服务器有该文件的读取权限,且文件名与实际构建后的哈希文件名一致。

4. 检查PDF渲染引擎的资源加载配置

确保spatie/laravel-pdf的渲染配置允许加载外部资源,以Chrome引擎为例:

// config/pdf.php 或生成PDF时的自定义配置
return [
    'default' => 'chrome',
    'engines' => [
        'chrome' => [
            'options' => [
                'no-sandbox' => true,
                'disable-gpu' => true,
                'allow-file-access-from-files' => true, // 允许加载本地静态资源
            ],
        ],
    ],
];

5. 验证构建后的CSS内容

直接查看服务器public/build/assets/下的CSS文件,搜索PDF中使用的类名,确认样式是否存在。如果不存在,回到第一步调整Tailwind的内容扫描范围。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:57:08