mPDF 无法正确加载波斯语文本的自定义波斯字体(BMitra、IRANSans,...)

问题描述 投票:0回答:1

我无法让 mPDF 使用 BMitra 和 IRANSans 等自定义字体正确渲染波斯语(波斯语)文本。

问题:

主要问题是,当我尝试生成包含波斯语内容的 PDF 时,mPDF 要么无法加载指定的字体,要么文本完全以不同的字体显示。此外,我尝试启用 OpenType Layout (OTL) 功能,例如

useOTL
useKashida
,但收到一条错误消息,指出我的字体不支持 OTL 表:

我尝试使用 IRANSans 字体,但问题仍然存在。这是我的 PHP 代码的相关部分: enter image description here

$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,但遇到了类似的问题。 测试路径和字体文件有效性:字体位置正确且功能正常。

php pdf mpdf farsi
1个回答
0
投票

修复此问题:github

像这样:

'fontdata' => $fontData + [
                'vazir' => [
                    'R' => 'Vazirmatn-Regular.ttf',  // Regular font
                    'B' => 'Vazirmatn-Bold.ttf',
                    'I' => 'Vazirmatn-Light.ttf',
                    'useOTL' => 0xFF,
                    'useKashida' => 75,

                ]
            ],
© www.soinside.com 2019 - 2024. All rights reserved.