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');
}
我正在研究 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');
}