Смешивание ртл с лтр в 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' );

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

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

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

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

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

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

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

5 ответов

Решение

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

Согласно этому уроку от 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, '' );

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

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

Чтобы вывод выводился корректно с указаниями 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, '');

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

Другие вопросы по тегам