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
相关产品推荐
相关产品推荐

