TCPDF 中的 RTL 对齐对齐问题

RTL Justify allignment issue in TCPDF

我正在研究 TCPDF。当我在 MultiCell 中使用 justify 时,我有一个 3 行的 RTL 文本,最后一行从左边开始(它应该从右边开始)。

$txt = 'السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكمالسلام عليكمالسلام عليكم
';

$pdf->MultiCell(170, 0, $txt."\n", 0, 'J', false, 1);

当我尝试使用 WriteHTML 时,结果是一样的

$htmlpersian = '<p align="justify" dir="rtl" >
السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكم السلام عليكمالسلام عليكمالسلام عليكم   
</p>';
$pdf->WriteHTML($htmlpersian."\n", true, 0, true, 0);

"\n" is added to the string to prevent justifying the last line

这是我想出的解决方法,但它需要使用不同的文本手动调整额外的敏感度变量,这基本上是将最后一行写在一个单独的单元格中,向右对齐。

$textexploded   =   explode(" ",$lettertext);                   // create array of words
$lettercount    =   mb_strlen($lettertext,'UTF-8');             // Get total number of characters of the whole text
$linesnum       =   $lettercount / $linechar;                    // divide number of characters over sensitivity number "how many letters per line"
$whole          =   floor($linesnum);                       // before decimal       
$fraction       =   $linesnum - $whole;                      // decimal
$last           =   $fraction * $linechar;                   // estimate number of characters of last line 
$last           =   $last - 3;                                  // refining

if (    $lettercount >= $linechar   ) {                     // Proceed of text characters are more than one line limit
    $total = 0;
    for ($x = count($textexploded); $total < $last; $x--) {   // Start at the end of the words array
        $total += mb_strlen($textexploded[$x-1],'UTF-8');    // Estimate at what array word last line starts
    }

    $slice_position = array_search($x, array_keys($textexploded));  // determine the slice position of the original text 
    $a1 = array_slice($textexploded, 0, $slice_position, true);     // Slice the first lines 
    $a2 = array_slice($textexploded, $slice_position, count($textexploded), true);  //slice the last line
    $a1 = implode(" ",$a1);                                         // recombine words 
    $a2 = implode(" ",$a2);                                         // recombine words 

    $pdf->MultiCell(190, 0, '       '.$a1, 0, 'J', 0, 1, '', '', false, 2, false, true, 0, 'M');
    $pdf->Cell(0, 6, $a2, 0, 0, 'R', 0, '', 0, false, 'T', 'M');
} else {
    $pdf->Cell(0, 6, $lettertext, 0, 0, 'R', 0, '', 0, false, 'T', 'M');
}