Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 阿拉伯字体在dompdf中以相反顺序显示_Php_Arabic_Dompdf - Fatal编程技术网

Php 阿拉伯字体在dompdf中以相反顺序显示

Php 阿拉伯字体在dompdf中以相反顺序显示,php,arabic,dompdf,Php,Arabic,Dompdf,我正在使用dompdf转换一个使用dompdf的html页面,但它以相反的顺序显示阿拉伯语文本 例如,如果文本是 ا 然后它显示为 PDF格式 知道为什么吗?dompdf目前不支持方向性,因此RTL语言无法正确显示字符流。虽然需要修改dompdf代码,但有一种按正确顺序显示字符的方法 如果您想尝试修改,需要两个步骤。首先,用direction:RTL设置任何应该显示RTL的文本的样式;文本对齐:右对齐。然后,在文件dompdf/include/text_renderer.cls.php中,在$c

我正在使用dompdf转换一个使用dompdf的html页面,但它以相反的顺序显示阿拉伯语文本

例如,如果文本是

ا

然后它显示为

PDF格式


知道为什么吗?

dompdf目前不支持方向性,因此RTL语言无法正确显示字符流。虽然需要修改dompdf代码,但有一种按正确顺序显示字符的方法

如果您想尝试修改,需要两个步骤。首先,用
direction:RTL设置任何应该显示RTL的文本的样式;文本对齐:右对齐。然后,在文件dompdf/include/text_renderer.cls.php中,在
$canvas->text()
(或任何变体,如
$this->\u canvas->text()
)的每个实例之前添加以下行:

(您可能需要更改
$text
变量的名称以匹配代码中使用的内容。)

参考资料:

此外,我们还看到了一个问题,即在呈现单词时,字符没有按预期连接在一起。这是一个我们还没有机会探讨的问题

参考资料:


目前,要完全支持方向性,您最好的选择是使用无头浏览器,例如,..

关于@BrianS的唯一问题是,行中从左到右的字符从右到左显示。我就是这样解决的(在我的例子中,检查是针对希伯来文字符):


你能提供一个屏幕截图吗?只是为了确认一个方面。感谢它的工作,但在添加了一些小的修改之后,如果(!mb_detect_encoding($text,array(“ascii”))我在从右到左的行中遇到了从左到右的字符问题,则只添加了一个非ascii字符检查。看看我的答案,我是如何扩展这个答案来解决这个问题的。
if (strtolower($style->direction) == 'rtl') {
  preg_match_all('/./us', $text, $ar);
  $text = join('',array_reverse($ar[0]));
}
// check if the line contains Hebrew characters from the start too
// to avoid flipping dates etc.
if( strtolower( $style -> direction ) == 'rtl' && preg_match( "/\p{Hebrew}/u", $text ) ):

    preg_match_all('/./us', $text, $ar);

    // reverse the whole line
    $text = join('',array_reverse($ar[0]));

    // flip english back to ltr
    $words = explode( ' ', $text );
    foreach( $words as $i => $word ):
        if( !preg_match( "/\p{Hebrew}/u", $word ) ):
            $words[$i] = implode( '', array_reverse( str_split( $word ) ) );
        endif;
    endforeach;

    $text = implode( ' ', $words );

endif;