арабский шрифт отображается в обратном порядке в dompdf

Я использую dompdf для преобразования html-страницы с помощью dompdf, но он показывает арабский текст в обратном порядке

Например, если текст

ايبنسيالرمس

то он отображается как

مرلايسنبيا в PDF

Любая идея почему?

dompdf в настоящее время не поддерживает направленность, поэтому языки RTL не будут отображаться правильно в отношении потока символов. Существует хак для отображения символов в правильном порядке, хотя для этого требуется модификация кода dompdf.

Если вы хотите попробовать модификацию, необходимы два шага. Во-первых, создайте любой текст, который должен отображать RTL с direction: rtl; text-align: right; direction: rtl; text-align: right; , Затем в файле dompdf / include / text_renderer.cls.php добавьте следующие строки перед каждым экземпляром $canvas->text() (или любым вариантом, например $this->_canvas->text() ):

 if (strtolower($style->direction) == 'rtl') { preg_match_all('/./us', $text, $ar); $text = join('',array_reverse($ar[0])); } 

(Возможно, вам придется изменить имя $text переменной $text в соответствии с тем, что используется в коде.)

Рекомендации:

Кроме того, мы видели проблемы, когда символы не объединяются, как ожидалось, при произнесении слов. Это вопрос, который у нас еще не было возможности изучить.

Рекомендации:

Ваш лучший вариант сейчас для полной поддержки направленности – использовать безгласный браузер, например, PhantomJS .

Только проблема с ответом @BrianS заключается в том, что слева направо символы в строке отображаются справа налево. Вот как я это решил (в моем случае проверка для иврита):

 // 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;