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

如何修复Laravel 9中使用Dompdf生成PDF的编码问题

解决Laravel 9 + Dompdf生成PDF时波斯语/阿拉伯语乱码问题

出现问号乱码的核心原因是Dompdf默认未加载支持波斯语/阿拉伯语的字体,且RTL(从右到左)语言需要额外配置。以下是具体修复步骤:

1. 引入支持UTF-8的波斯语/阿拉伯语字体

  • 下载兼容的字体(比如Vazirmatn、IRANSans),将字体文件(.ttf格式优先)放到项目的public/fonts目录下。
  • 在Blade视图的样式中指定字体并开启RTL布局:
body {
    font-family: 'Vazirmatn', sans-serif;
    direction: rtl; /* 波斯语/阿拉伯语为从右到左书写,必须设置 */
}

2. 配置Dompdf加载自定义字体

方法一:在生成方法中临时配置

修改你的convertToPdf方法:

public function convertToPdf(Request $request, Order $order)
{       
    $dompdf = new Dompdf();
    // 注册自定义字体(以Vazirmatn为例)
    $fontPath = public_path('fonts/Vazirmatn-Regular.ttf');
    $dompdf->getFontMetrics()->registerFont(
        ['family' => 'Vazirmatn', 'weight' => 'normal', 'style' => 'normal'],
        $fontPath
    );
    
    // 渲染视图并添加UTF-8编码声明
    $html = '<meta charset="UTF-8">' . view('admin.shop.orders.order_details_pdf')->render();
    $dompdf->loadHtml($html);
    
    $dompdf->setPaper('A4','landscape');
    // 开启HTML5解析以更好支持RTL
    $dompdf->setOption('isHtml5ParserEnabled', true);
    
    $dompdf->render();
    $dompdf->stream('demo.pdf',['Attachment' => false]);
}

方法二:全局配置Dompdf

先发布Dompdf配置文件:

php artisan vendor:publish --provider="Barryvdh\DomPDF\ServiceProvider"

在config/dompdf.php中添加字体相关配置:

'font_dir' => public_path('fonts/'),
'font_cache' => storage_path('fonts/'),
'default_font' => 'Vazirmatn',

3. 确保Blade视图编码正确

  • 在视图的<head>标签内添加<meta charset="UTF-8">声明。
  • 确保Blade视图文件本身的编码为UTF-8(避免用GBK等非UTF-8编码保存)。

4. 优化RTL布局显示

除了设置direction: rtl,可给容器元素添加text-align: right,确保文字排版符合波斯语/阿拉伯语的阅读习惯。


内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 22:30:57