Я создаю PDF с помощью fPDF.
Мне нужно зачеркнуть длинный текст внутри MultiCell. Текст выровнен по левому и правому краям, что, вероятно, является источником проблемы.
Вот мой код:
//get the starting x and y of the cell to strikeout
$strikeout_y_start = $pdf->GetY();
$strikeout_x = $pdf->getX();
$strikeText = "Some text with no New Lines (\n), which is wrapped automaticly, cause it is very very very very very very very very very very long long long long long long long long long long long long long long long long long long"
//draw the text
$pdf->MultiCell(180, 4, $strikeText);
//get the y end of cell
$strikeout_y_end = $pdf->GetY();
$strikeout_y = $strikeout_y_start+2;
$strikeCount = 0;
for ($strikeout_y; $strikeout_y < $strikeout_y_end - 4; $strikeout_y+=4) {
$strikeCount++;
//strike out the full width of all lines but last one - works OK
$pdf->Line($strikeout_x, $strikeout_y, $strikeout_x + 180, $strikeout_y);
}
//this works, but gives incorrect results
$width = $pdf->GetStringWidth($strikeText);
$width = $width - $strikeCount*180;
//the line below will strike out some text, but not all the letters of last line
$pdf->line($strikeout_x, $strikeout_y, $strikeout_x+$width, $strikeout_y);
Проблема в том, что, поскольку текст в многоклеточном коде оправдан (и должен быть), пробел в предыдущих строках шире, чем предполагает GetStringWidth, поэтому GetStringWidth недооценивает полную ширину этого текста.
В результате последняя строка обводится, скажем, в 70%, а некоторые буквы в конце не обводятся.
Есть идеи, как рассчитать ширину последней строки в многоклеточном режиме?