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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:25:17