MPDF问题:日语文本中的拉丁字符显示为粗体
解决MPDF 8生成日语PDF时拉丁字符显示为粗体的问题
问题根源
你当前配置的默认字体SJIS(对应MPDF内置的SJIS字体集),其包含的拉丁字符仅提供粗体样式;再加上开启autoScriptToLang和autoLangToFont后,MPDF自动匹配脚本字体时,无法找到SJIS字体对应的常规重量拉丁字符,最终导致拉丁文本强制显示为粗体。
解决方案
1. 更换兼容型日语字体
改用同时支持日语字符和常规拉丁字符的内置字体,比如NotoSansCJKjp(Noto Sans日语版),MPDF 8原生支持该字体,能同时适配两种字符的常规显示:
$mpdf = new \Mpdf\Mpdf([ 'mode' => 'ja', // 指定日语模式,自动适配字体规则 'format' => 'A4', 'default_font_size' => '12', 'default_font' => 'NotoSansCJKjp', ]); $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true;
2. 手动指定拉丁字符的常规字体
如果必须保留SJIS作为日语字体,可以单独为拉丁脚本指定常规字体,覆盖MPDF的自动匹配逻辑:
$mpdf = new \Mpdf\Mpdf([ 'mode' => 's', 'format' => 'A4', 'default_font_size' => '12', 'default_font' => 'SJIS', ]); // 注册常规拉丁字体(以Arial为例,需确保字体文件存在于MPDF字体目录) $mpdf->fontdata['arial'] = [ 'R' => 'arial.ttf', 'B' => 'arialbd.ttf', ]; // 为拉丁脚本绑定常规字体 $mpdf->setScript('LATIN', 'arial'); $mpdf->autoScriptToLang = true; $mpdf->autoLangToFont = true;
3. 关闭自动字体切换(不推荐)
若不需要适配多语言文本,可直接关闭自动切换配置,强制所有文本使用默认字体,但这可能导致非日语/拉丁字符显示异常:
$mpdf = new \Mpdf\Mpdf([ 'mode' => 's', 'format' => 'A4', 'default_font_size' => '12', 'default_font' => 'SJIS', ]); // 注释或删除自动切换配置 // $mpdf->autoScriptToLang = true; // $mpdf->autoLangToFont = true;
验证方式
修改配置后重新生成PDF,检查拉丁字符是否显示为常规重量,同时确认日语字符无显示异常。
内容的提问来源于stack exchange,提问作者Jeremie
相关产品推荐
相关产品推荐

