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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:23:25