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

DomPDF本地可用自定义字体,Docker生产环境无法加载求助

DomPDF 3.1.0 在Docker容器中无法加载自定义字体的解决方法

1. 确认字体文件已正确同步到容器

  • 检查项目根目录的.dockerignore文件,确保没有排除public/templates/reports/fonts目录,否则COPY . .指令不会把字体文件复制进容器。
  • 进入容器执行命令验证文件存在:
    docker exec -it [你的容器名] ls /var/www/html/public/templates/reports/fonts/
    
    确保输出中能看到Ubuntu-Regular.ttf。

2. 修复字体文件及目录权限

Alpine环境下www-data用户需要读取字体文件的权限,在Dockerfile中添加更精细的权限设置:

RUN chown -R www-data:www-data . \
    && chmod -R 755 public/templates/reports/fonts \
    && chmod -R 644 public/templates/reports/fonts/*.ttf

或者进入容器手动调整:

docker exec -it [你的容器名] chmod -R 644 /var/www/html/public/templates/reports/fonts/*.ttf

3. 补充Alpine系统的字体渲染依赖

php:8.3-fpm-alpine基础镜像缺少DomPDF渲染字体所需的底层库,在Dockerfile中添加:

RUN apk add --no-cache fontconfig freetype libpng libjpeg-turbo

这些库是字体渲染的必要依赖,缺失会导致DomPDF无法正确解析自定义字体。

4. 修正DomPDF路径配置

  • 验证路径正确性:在代码中临时输出APPPATH . '../public/templates/reports/fonts'的实际值,确认在容器中对应/var/www/html/public/templates/reports/fonts(因为WORKDIR是/var/www/html,APPPATH通常指向application/,拼接后路径应正确)。
  • 调整CSS字体路径:将CSS中的相对路径改为基于chroot的绝对路径:
    @font-face {
      font-family: "Ubuntu";
      src: url("/fonts/Ubuntu-Regular.ttf");
    }
    
  • 直接使用绝对路径配置DomPDF:避免APPPATH拼接可能的问题,直接指定绝对路径,同时单独设置缓存目录避免和字体目录混用:
    $options = new Options();
    $options->setIsRemoteEnabled(true);
    $options->setFontDir('/var/www/html/public/templates/reports/fonts');
    $options->setFontCache('/var/www/html/storage/dompdf-cache');
    $options->setChroot('/var/www/html/public/templates/reports/');
    $this->dompdf = new Dompdf($options);
    
    记得创建缓存目录并赋予写权限:
    RUN mkdir -p storage/dompdf-cache && chown -R www-data:www-data storage/dompdf-cache
    

5. 排查默认字体无效问题

如果设置$options->setDefaultFont('Courier')也无效,说明DomPDF配置可能未正确生效:

  • 确认代码中没有重复初始化DomPDF覆盖配置。
  • 检查模板CSS是否强制指定了serif等默认字体,尝试暂时注释body的font-family配置,测试默认字体是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:03:15