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