PHP FPDF / FPDI,希伯来语字符反转/镜像可以解决吗?

问题描述

我正在使用PHP中的setasign\FPDI库来生成PDF文档,而我所有的文档都在希伯来语中。

我正在接收UTF-8中的希伯来语字符,并将其转换为cp1255,然后将希伯来语字体添加到FPDF中,一切呈现得很好,只有希伯来语单词被反转/镜像了。

我测试一下字符串是否包含希伯来字母,如果是,我使用strrev()对其进行反转,但是如果该字符串还包含电话号码或其他非希伯来语单词,那么它也会被反转。

>

这些是我为FPDF格式化希伯来语的方法

/**
 * Utility to check if the string is in Hebrew
 * @param string $string
 * @return int|false
*/
protected function isHebrew(string $string)
{
    if (!$string) return false;
    // return strlen($string) != strlen(utf8_decode($string));
    return preg_match("/\p{Hebrew}/u",$string);
}

/**
 * Utility to format a string to be used with FPDF.
 * @param string $string
 * @return string
*/
protected function formatString(string $string): string
{
    $formattedValue = iconv('UTF-8','cp1255',$string);
    return $this->isHebrew($string) ? strrev($formattedValue) : $formattedValue;
}

这是设置FPDI / FPDF实例的方式:

    $pdf = new Fpdi();
    $pdf->AddFont('OpenSansHebrew','','OpenSansHebrew.PHP');
    $pdf->SetFont('OpenSansHebrew',10);

是否可以使用不使用strrev()方法解决此问题?对我来说这是一个非常糟糕的解决方案。

还有,有什么方法可以使文档成为RTL?而是将其生成为LTR。

谢谢!

解决方法

FPDI可以与TCPDF(最终从FPDF继承)一起使用,并且对RTL具有本机支持,并且还内置了对支持cp1255编码的“免费”字体的支持。

使用FPDI时,只需用TCPDF替换FPDF,它就可以解决您的问题。