在 tcpdf 中混合 rtl 和 ltr
mixing rtl with ltr in tcpdf
我正在使用 tcpdf 在我的网络应用程序中创建 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' );
预期输出将是:
英语中的一些单词 ואחכ כמה מילים בעברית
כמה מילים כתובות בעבית 然后是一些英文单词。
但是每种语言中第二种语言的单词顺序相反
我的输出是:
英语中的一些单词 בעבוית מילים כמה ואחכ
כמה מילים כתובות בעבית 英文单词 some then and
如您所见 - 第一行英语可以 - 而希伯来语不行,第二行希伯来语可以,英语不行
尝试用 dir="rtl"
在 span
标签中包装希伯来语块。我知道这可以在浏览器中使用,只是不确定 TCPDF
。您还可以在这些 span
标签中包含混合了英语和希伯来语的整个句子。
根据this tutorial from w3.org about bidirectional text:
For inline text, tightly wrap all opposite-direction phrases in markup
that sets their base direction.
所以你的代码应该是这样的:
$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, '' );
我从 tcpdf 切换到内置支持双向语言的 mpdf
使用 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, '');
我正在使用 tcpdf 在我的网络应用程序中创建 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' );
预期输出将是:
英语中的一些单词 ואחכ כמה מילים בעברית
כמה מילים כתובות בעבית 然后是一些英文单词。
但是每种语言中第二种语言的单词顺序相反 我的输出是:
英语中的一些单词 בעבוית מילים כמה ואחכ
כמה מילים כתובות בעבית 英文单词 some then and
如您所见 - 第一行英语可以 - 而希伯来语不行,第二行希伯来语可以,英语不行
尝试用 dir="rtl"
在 span
标签中包装希伯来语块。我知道这可以在浏览器中使用,只是不确定 TCPDF
。您还可以在这些 span
标签中包含混合了英语和希伯来语的整个句子。
根据this tutorial from w3.org about bidirectional text:
For inline text, tightly wrap all opposite-direction phrases in markup that sets their base direction.
所以你的代码应该是这样的:
$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, '' );
我从 tcpdf 切换到内置支持双向语言的 mpdf
使用 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, '');