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

Laravel 8使用dompdf生成乌尔都语/阿拉伯语PDF显示问号求助

Laravel 8 中使用 dompdf 生成乌尔都语/阿拉伯语 PDF 解决问号乱码方案

核心解决步骤

1. 导入支持乌尔都语的字体

  • 下载支持乌尔都语的字体文件(如 Noto Nastaliq Urdu、Amiri),优先选择TTF格式。
  • 将字体文件放到项目的 public/fonts 目录下(目录不存在则手动新建)。

2. 在PDF视图中配置字体与RTL排版

编辑你的 pdf.blade.php,添加字体引入和从右到左排版设置:

<style>
@font-face {
    font-family: 'NotoNastaliqUrdu';
    src: url('{{ public_path('fonts/NotoNastaliqUrdu-Regular.ttf') }}') format('truetype');
    font-weight: normal;
    font-style: normal;
}

body {
    font-family: 'NotoNastaliqUrdu', sans-serif;
    direction: rtl; /* 乌尔都语为从右到左排版,必须开启 */
    text-align: right;
}
</style>
  • 注意:必须用 public_path 指向本地字体文件,dompdf无法直接解析前端的 asset() 路径。

3. 控制器中配置dompdf参数

生成PDF时,指定UTF-8编码、启用远程资源加载,并设置默认字体:

use Barryvdh\DomPDF\Facade as PDF;

public function generateUrduPdf()
{
    $data = [
        // 替换为你的业务数据,包含乌尔都语文本
        'urdu_text' => 'یہ ایک اردو متن ہے'
    ];

    $pdf = PDF::loadView('pdf', $data, [], [
        'charset' => 'UTF-8',
        'enable_remote' => true,
        'isHtml5ParserEnabled' => true,
    ]);

    // 设置默认字体为导入的乌尔都语字体
    $pdf->setOptions(['defaultFont' => 'NotoNastaliqUrdu']);

    return $pdf->download('urdu-document.pdf');
}

4. 额外检查项

  • 确保 pdf.blade.php 文件本身的编码为 UTF-8(在编辑器中设置编码格式)。
  • 更新dompdf到适配Laravel 8的稳定版本:
    composer require barryvdh/laravel-dompdf:^0.9.0
    
  • 不要对乌尔都语文本做转义处理,直接在视图中输出原始文本。

内容的提问来源于stack exchange,提问作者Hafiz Ali Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:50:19