Php 阿拉伯字体在dompdf中以相反顺序显示
我正在使用dompdf转换一个使用dompdf的html页面,但它以相反的顺序显示阿拉伯语文本 例如,如果文本是 ا 然后它显示为 PDF格式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目前不支持方向性,因此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;