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

Laravel 5.5.4用Laravel Excel+mPDF导出PDF时泰文显示异常求助

解决Laravel Excel + mPDF导出泰文乱码问题

嘿,我之前处理过类似的Laravel Excel(maatwebsite版本)结合mPDF导出泰文乱码的问题,给你几个实操性强的解决方案,一步步来:

核心原因

mPDF默认的字体包可能不包含泰文字体,或者没有启用UTF-8编码支持,导致泰文字符无法正确渲染。


方案1:自定义mPDF配置参数(快速解决)

Laravel Excel允许你在导出PDF时直接传入mPDF的配置数组,指定编码、字体路径和默认字体:

$path = 'excel\save\1\3\20180114-210116_1.xlsx';
$excel = \Excel::load($path, function ($reader) {
    $reader->noHeading();
});

// 配置mPDF的UTF-8支持和泰文字体
$pdfConfig = [
    'mode' => 'UTF-8', // 强制UTF-8编码
    'format' => 'A4',
    'default_font' => 'thsarabun', // 替换为你使用的泰文字体名称
    'fontDir' => storage_path('fonts/'), // 字体文件存放路径(比如storage/fonts)
    'fontCache' => storage_path('fonts/cache/'),
    'autoScriptToLang' => true, // 自动识别脚本语言
    'autoLangToFont' => true, // 自动匹配语言对应的字体
];

// 传入配置导出PDF
$excel->export('pdf', $pdfConfig);

注意:

  • 先下载支持泰文的TrueType字体(比如THSarabun、THChakraPetch等),放到storage/fonts目录下
  • 确保服务器对该目录有读取权限

方案2:手动创建mPDF实例并注册字体(更灵活)

如果方案1无效,你可以直接创建自定义的mPDF实例,手动注册泰文字体后再传给Laravel Excel:

use Mpdf\Mpdf;

$path = 'excel\save\1\3\20180114-210116_1.xlsx';
$excel = \Excel::load($path, function ($reader) {
    $reader->noHeading();
});

// 创建mPDF实例并配置基础参数
$mpdf = new Mpdf([
    'mode' => 'UTF-8',
    'format' => 'A4',
    'fontDir' => storage_path('fonts/'),
    'fontCache' => storage_path('fonts/cache/'),
]);

// 注册泰文字体(替换为你的字体文件名)
$mpdf->AddFont('thsarabun', '', 'THSarabunNew.ttf'); // 常规体
$mpdf->AddFont('thsarabun', 'B', 'THSarabunNew Bold.ttf'); // 加粗体

// 设置默认字体为泰文字体
$mpdf->SetDefaultFont('thsarabun');

// 使用自定义mPDF实例导出
$excel->setPdfInstance($mpdf)->export('pdf');

额外检查项

  • 确认原Excel文件中的泰文字符是UTF-8编码(可以用Excel另存为“CSV UTF-8”格式验证)
  • 如果你使用的是Laravel Excel 2.1版本(对应Laravel 5.5),确保mPDF版本与Laravel Excel兼容(建议使用mPDF 7.x版本)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:17:51