PHP 孤立的 FPDF 阿拉伯文文本

PHP FPDF Arabic Text Isolated

我正在尝试生成阿拉伯语的 pdf 文档,我使用 fpdf 生成相同的英文格式。在做了一些研究之后,我最终用 tfpdf 和 tcpdf 替换了 fpdf。后来弄乱了我的 pdf 布局,并且不能 100% 地使用阿拉伯语单词。所以我选择了 tfpdf。

在对 tfpdf 进行更多研究后,我得到了以下代码:

//to add custom font from unicode folder
$pdf->AddFont('Tajawal', '', 'Tajawal-Medium.ttf', true); 
//to set the custom font 
$pdf->SetFont('Tajawal','',18,true);
    
//helper function to rever the arabic string since I get the output reversed in the pdf
function utf8_strrev($str){
    preg_match_all('/./us', $str, $ar);
    return implode(array_reverse($ar[0]));
}
//$answer comes from a php and is an arabic string        
$pdf->MultiCell(0 , 7, utf8_strrev($answer),1); 

如图(生成的 pdf 的屏幕截图)所示,阿拉伯字母是 separated/disjoint,但由于反向辅助函数,它们的顺序正确。我们如何解决 tfpdf 中的这个问题?

附加信息

我使用的字体是 Tajawal,它是阿拉伯语 google 字体:https://fonts.google.com/specimen/Tajawal?subset=arabic

我已将这些添加到我的 html 文档中:

ini_set('default_charset', 'UTF-8');
<html dir="rtl" lang="ar">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

我也试过在数据库中插入相同的阿拉伯语字段,它们工作得很好。

经过一段时间的尝试,我发现最好的解决方案是使用 TCPDF for laravel 而不是 FPDF。您可以从这个小示例开始构建您的代码:

$html_content = '<h1 dir="rtl">يسبي</h1>';
PDF::SetTitle('Sample PDF');
PDF::SetFont('aealarabiya', '', 18);
PDF::AddPage();
PDF::writeHTML($html_content, true, false, true, false, '');
PDF::Output('SamplePDF.pdf');

您还可以查看此 link 以了解有关用于生成阿拉伯语 pdf 的 TCPDF 库的更多详细信息。