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

1

Я использую tcpdf для создания pdf файлов в моем webapp.

Я использую функцию 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' );

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

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

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

но слова на втором языке на каждом языке входят в oppsite-порядок моего вывода:

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

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

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

Теги:
right-to-left
tcpdf
left-to-right

5 ответов

1
Лучший ответ

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

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

использовать setRTL():

...
$pdf->setRTL(true);
$pdf->writeHTML($html, true, false, true, false, '');
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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню