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

