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

使用DomPdf与ar-php生成PDF时阿拉伯语文本显示错乱求助

解决阿拉伯语文本在DomPdf+ar-php中语序错乱的问题

问题根源

阿拉伯语是**从右到左(RTL)**的语言,你的代码存在两个核心问题:

  1. 未在HTML中明确声明文本方向,导致渲染引擎默认按LTR(从左到右)逻辑处理
  2. 手动反向循环替换阿拉伯语片段的逻辑错误,直接引发整体语序颠倒

修复方案

1. 给HTML添加RTL方向声明

在包含阿拉伯语的容器元素中添加dir="rtl"和lang="ar"属性,明确告知渲染引擎文本的语言规则和排版方向:

<div dir="rtl" lang="ar">
يقول الله عز وجل :(وكلوا واشربوا ولا تسرفوا إنه لا يحب المسرفين) الأعراف
</div>

2. 简化ar-php的文本处理逻辑

ar-php提供了封装好的arGlyphs()方法,可直接完成阿拉伯语字形转换和方向适配,无需手动编写反向循环:

require_once 'ar-php/src/Arabic.php';
$Arabic = new ArPHP\I18N\Arabic();

// 正确包裹带方向声明的HTML结构
$html = '<div dir="rtl" lang="ar">يقول الله عز وجل :(وكلوا واشربوا ولا تسرفوا إنه لا يحب المسرفين) الأعراف</div>';

// 用arGlyphs自动处理阿拉伯语字形和排版逻辑
$processedHtml = $Arabic->arGlyphs($html);

3. 配置DomPdf支持RTL和阿拉伯语字体

DomPdf默认对RTL支持有限,必须开启RTL选项并加载适配阿拉伯语的字体(比如Noto Naskh Arabic):

use Dompdf\Dompdf;

$dompdf = new Dompdf();
// 开启RTL渲染支持
$dompdf->set_option('is_rtl', true);
// 设置阿拉伯语字体(确保字体文件已放入DomPdf字体目录,或指定绝对路径)
$dompdf->set_option('defaultFont', 'NotoNaskhArabic');

// 加载处理后的HTML并生成PDF
$dompdf->loadHtml($processedHtml);
$dompdf->render();
$dompdf->stream('arabic_output.pdf');

关键注意事项

  • 务必使用最新版本的DomPdf和ar-php,旧版本对RTL的支持存在较多兼容性bug
  • 字体文件需正确嵌入DomPdf,避免出现乱码或字形断裂问题
  • 禁止手动反向处理文本片段,ar-php的封装方法已包含完整的RTL排版逻辑

内容的提问来源于stack exchange,提问作者Rajan CK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:26