在tcpdf中将rtl与ltr混合

时间:2015-05-31 16:06:29

标签: php tcpdf right-to-left left-to-right

我正在使用tcpdf在我的webapp中创建pdf文件。

我正在使用tcpdf的writeHtml()函数并尝试将一些希伯来语与英语混合,

当尝试将两种语言组合在同一行时,输出方向错误。

例如

- 这是我的一段代码:

    $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' );

预期的输出将是:

英语中的一些单词ואחככמהמיליםבעברית

כמהמיליםכתובותבעברית,然后是一些英文单词。

但是每种语言的第二语言都是以反对顺序排列的 我的输出是:

英语中的一些单词בעבריתמיליםכמהואחכ

כמהמיליםכתובותבעבריתenglish in words then

你可以看到 - 在第一行中英语是好的 - 而希伯来语没有,在第二行中希伯来语是好的而英语不是

5 个答案:

答案 0 :(得分:1)

我从tcpdf切换到内置支持双向语言的mpdf

答案 1 :(得分:0)

尝试使用display_errorsspan标记中包装希伯来语块。我知道这可以在浏览器中使用,只是不确定dir="rtl"。您也可以在TCPDF个标签中包含混合英语和希伯来语的完整句子。

答案 2 :(得分:0)

根据this tutorial from w3.org about bidirectional text

  

对于内嵌文字,紧密包装标记中的所有反方向短语   这确定了他们的基本方向。

所以你的代码应该是这样的:

DB_Main

答案 3 :(得分:0)

使用setRTL():

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

答案 4 :(得分: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, '');