Laravel中dompdf导出PDF时HTML内韩文显示为???求助
解决Laravel中dompdf导出PDF时韩文显示为“???”的问题
我之前也碰到过类似的字体渲染坑,你的情况核心原因很明确:dompdf默认自带的字体不支持韩文,而通过$canvas->page_script()设置的页眉页脚大概率调用了系统已加载的支持韩文的字体,但loadHTML()加载的正文内容没有正确关联到支持韩文的字体文件。下面是一步步的解决方法:
1. 准备支持韩文的字体文件
选一款靠谱的开源韩文字体,比如「Noto Sans KR」,下载它的常规字重文件(比如NotoSansKR-Regular.ttf),把文件放到Laravel项目的public/fonts目录下——如果没有fonts文件夹就新建一个。
2. 配置dompdf的字体路径并注册字体
在你的dompdf初始化代码里,补充字体相关的配置,把我们准备的韩文字体注册进去:
$pdf = App::make('dompdf.wrapper'); $pdf->loadHTML($doc_content); $dom_pdf = $pdf->getDomPDF(); $options = new Options(); $options->set('isPhpEnabled', true); $options->set('isRemoteEnabled', true); // 指定字体存放的目录 $options->set('fontDir', public_path('fonts')); // 可选:设置字体缓存目录,dompdf会生成缓存文件提升后续渲染速度 $options->set('fontCache', storage_path('app/fonts/dompdf')); $dom_pdf->setOptions($options); // 注册我们的韩文字体 $dom_pdf->getFontMetrics()->registerFont([ 'family' => 'Noto Sans KR', 'style' => 'normal', 'weight' => 'normal', 'src' => public_path('fonts/NotoSansKR-Regular.ttf') ]); // 导出PDF $pdf->output();
3. 在HTML内容中指定使用韩文字体
确保你的$doc_content里的HTML明确调用注册好的字体,最稳妥的方式是在<head>里全局设置:
<head> <meta charset="UTF-8"> <!-- 务必加这行,确保HTML编码是UTF-8 --> <style> body, p, div { font-family: 'Noto Sans KR', sans-serif; } </style> </head>
如果只有部分内容需要显示韩文,也可以给对应元素单独设置样式:
<p style="font-family: 'Noto Sans KR';">안녕하세요!</p>
4. 额外排查点
- 确认
$doc_content本身是UTF-8编码的字符串,如果不确定,尝试用utf8_encode($doc_content)包裹后再传入loadHTML()。 - 如果你用的是
barryvdh/laravel-dompdf这类扩展包,可以直接在config/dompdf.php里全局配置字体目录,不用每次初始化都重复写配置。
按这个流程处理后,loadHTML()加载的正文里的韩文应该就能正常渲染到PDF里了。
内容的提问来源于stack exchange,提问作者Felix Prawira Azali
相关产品推荐
相关产品推荐

