Dompdf v2.0.1使用自定义字体Josefin Sans时空格渲染异常
Dompdf v2.0.1 自定义字体Josefin Sans空格渲染错误排查方案
1. 改用本地字体文件引入
Dompdf对远程Google Fonts的解析常存在字符映射问题,直接下载字体到本地是最稳妥的解决方式:
- 从Google Fonts官网下载Josefin Sans完整字体包(包含所需字重的ttf/woff文件)
- 将字体文件放到项目本地目录(比如
./fonts/) - 在CSS中通过
@font-face本地引入:
@font-face { font-family: 'Josefin Sans'; src: url('./fonts/JosefinSans-Regular.ttf') format('truetype'); font-weight: normal; font-style: normal; } @font-face { font-family: 'Josefin Sans'; src: url('./fonts/JosefinSans-Bold.ttf') format('truetype'); font-weight: bold; font-style: normal; } body { font-family: 'Josefin Sans', sans-serif; }
2. 检查字体文件完整性
部分字体子集可能未包含标准空格字符(ASCII 32),确保下载的是完整字符集的字体文件,而非仅包含部分字符的子集版本。
3. 配置Dompdf的字体与编码选项
在PHP初始化Dompdf时,明确设置字体和编码参数,避免默认解析问题:
require_once 'dompdf/autoload.inc.php'; use Dompdf\Dompdf; use Dompdf\Options; $options = new Options(); $options->set('defaultFont', 'Josefin Sans'); $options->set('isHtml5ParserEnabled', true); $options->set('charset', 'UTF-8'); $dompdf = new Dompdf($options); $dompdf->loadHtml($htmlContent); $dompdf->render(); $dompdf->stream('report.pdf');
同时确保HTML头部编码声明正确:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
4. 清理非标准空格字符
检查HTML内容中是否使用了全角空格、不间断空格( )等非标准空格,Dompdf对这类字符的渲染逻辑与浏览器不同。将所有非必要的特殊空格替换为标准ASCII空格。
5. 升级Dompdf版本
v2.0.1存在已知的字体渲染bug,升级到最新稳定版(如v2.0.3及以上)可能直接解决空格渲染异常问题。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

