Я использую 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' );
ожидаемый результат будет:
несколько слов на английском ואחכ כמה מילים בעברית
כמה מילים כתובות בעברית, а затем несколько слов на английском языке.
но слова на втором языке в каждом языке приходят в противоположном порядке
мой вывод:
несколько слов на английском בעברית מילים כמה ואחכ
כמה מילים כתובות בעברית английский в словах некоторые тогда и
как вы можете видеть — в первой строке английский в порядке — и на иврите нет, во второй строке иврит в порядке, а на английском нет
Я переключился с tcpdf на mpdf, который имеет встроенную поддержку двунаправленных языков
Попробуйте обернуть кусочки иврита в span
теги с dir="rtl"
, Я знаю, что будет работать в браузере, просто не уверен насчет TCPDF
, Вы также можете включить целые предложения, которые смешали английский и иврит в этих span
теги.
В соответствии с этот урок от 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, '');