смешивание ртл с лтр в tcpdf

Я использую tcpdf для создания файлов PDF в моем веб-приложении.

Я использую функцию writeHtml () tcpdf и пытаюсь смешать немного иврита с английским,

при попытке объединить оба языка в одной строке вывод получился в неправильном направлении.

например — это часть моего кода:

    $pdf = new TCPDF ( PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false );
$pdf->SetDisplayMode ( "default", "OneColumn" );
$pdf->setRTL ( false );
$pdf->SetFont ( 'freeserif', '', 10, '' );


$html = '<body  style="text-align: center">';
$html .= "<p> some words in english ואחכ כמה מילים בעברית </p>";
$html .= "<p> כמה מילים כתובות בעברית and then some words in english</p>";
$html .= '</body>';
$pdf->AddPage ();

$pdf->writeHTML ( $comments_table, true, false, true, false, 'R' );
$pdf->Output ( $path, 'F' );

ожидаемый результат будет:

несколько слов на английском ואחכ כמה מילים בעברית

כמה מילים כתובות בעברית, а затем несколько слов на английском языке.

но слова на втором языке в каждом языке приходят в противоположном порядке
мой вывод:

несколько слов на английском בעברית מילים כמה ואחכ

כמה מילים כתובות בעברית английский в словах некоторые тогда и

как вы можете видеть — в первой строке английский в порядке — и на иврите нет, во второй строке иврит в порядке, а на английском нет

1

Решение

Я переключился с tcpdf на mpdf, который имеет встроенную поддержку двунаправленных языков

1

Другие решения

Попробуйте обернуть кусочки иврита в span теги с dir="rtl", Я знаю, что будет работать в браузере, просто не уверен насчет TCPDF, Вы также можете включить целые предложения, которые смешали английский и иврит в этих span теги.

0

В соответствии с этот урок от w3.org о двунаправленном тексте:

Для встроенного текста, плотно завернуть все фразы противоположного направления в разметке
это устанавливает их базовое направление.

Итак, ваш код должен быть примерно таким:

$html = '<body style="text-align: center">
<span> some words in english<span>
<span>ואחכ כמה מילים בעברית <br> כמה מילים כתובות בעברית<span>
<span>and then some words in english</span>
</body>';

$pdf->AddPage();

$pdf->writeHTML( $html, true, false, true, false, '' );
0

используйте setRTL ():

...
$pdf->setRTL(true);
$pdf->writeHTML($html, true, false, true, false, '');
0

Чтобы вывод выводился корректно с указаниями RTL или LTR, просто вы можете проверить из своего решения текущее направление и сохранить его в переменной $ direction, а затем проверить, является ли RTL или нет.
добавьте это в свой код:

$direction = $user->get_config("direction");
$style = "";

if ($direction == "rtl"){
$style = "<style> h1,h2,h3,h4,h5,div,p,table,thead,tr,td {
direction:rtl !important; text-align: right !important;}
</style>";
}

Затем добавьте это, прежде чем помещать что-либо в переменную $ html

$html = $style . "<HTML CODE>";

Наконец распечатайте вывод:

$pdf->writeHTML($html, true, false, false, false, '');
0
По вопросам рекламы [email protected]