我无法让 mPDF 使用 BMitra 和 IRANSans 等自定义字体正确渲染波斯语(波斯语)文本。
主要问题是,当我尝试生成包含波斯语内容的 PDF 时,mPDF 要么无法加载指定的字体,要么文本完全以不同的字体显示。此外,我尝试启用 OpenType Layout (OTL) 功能,例如
useOTL
和 useKashida
,但收到一条错误消息,指出我的字体不支持 OTL 表:
我尝试使用 IRANSans 字体,但问题仍然存在。这是我的 PHP 代码的相关部分:
$mpdf = new \Mpdf\Mpdf([
'fontDir' => array_merge($fontDirs, [__DIR__]),
'format' => $PAGE_FORMAT,
'autoLangToFont' => true,
'mode' => 'utf-8',
'useSubstitutions' => true,
'fontdata' => $fontData +
[
'bmitra' => [
'R' => 'assets/fonts/pdf/bmitra.ttf',
'B' => 'assets/fonts/pdf/bmitrabd.ttf',
],
'btitr' => [
'R' => 'assets/fonts/pdf/btitr.ttf',
'B' => 'assets/fonts/pdf/btitr.ttf'
],
'iransans' => [
'R' => 'assets/fonts/pdf/iransans.ttf',
'B' => 'assets/fonts/pdf/iransans.ttf'
],
'vazir' => [
'R' => 'assets/fonts/pdf/vazir.ttf',
],
],
'default_font' => 'bmitra',
]);
$mpdf->SetDirectionality('rtl');
$imagePath = ($draftArray['imageId'] == 1) ? 'assets/media/backgrounds/A4.min.png' : 'assets/media/backgrounds/A5.min.jpg';
$mpdf->AddPage();
$mpdf->Image($imagePath, 0, 0, $mpdf->w, $mpdf->h, '', '', '', false, 300, '', false);
$headerNumber = '<div dir="rtl" style="text-align: left;">';
$headerNumber .= '<span style="font-family: iransans;">شماره: 123456</span><br>';
$headerNumber .= '<span style="font-family: iransans;">تاریخ: 123456</span><br>';
$headerNumber .= '<span style="font-family: iransans;">پیوست: دارد</span>';
$headerNumber .= '</div>';
$mpdf->WriteHTML($headerNumber, \Mpdf\HTMLParserMode::HTML_BODY);
将 default_font 设置为 BMitra 和 IRANSans:文本出现,但字体未正确应用。 禁用 OTL 和 Kashida:字体加载,但文本无法正确呈现(例如,字母断开连接或以错误的格式显示)。 使用其他字体:我尝试了不同的波斯字体,例如 Vazir 和 Sahel,但遇到了类似的问题。 测试路径和字体文件有效性:字体位置正确且功能正常。
修复此问题:github
像这样:
'fontdata' => $fontData + [
'vazir' => [
'R' => 'Vazirmatn-Regular.ttf', // Regular font
'B' => 'Vazirmatn-Bold.ttf',
'I' => 'Vazirmatn-Light.ttf',
'useOTL' => 0xFF,
'useKashida' => 75,
]
],