Если вы используете эти ответы и у вас есть проблемы с текстом, выровненным по правому краю, я смог исправить это, используя приведенный ниже код. Я думаю, что это будет работать и для центрированного текста. Функция GetStringWidth
не учитывала новый интервал между символами, поэтому возвращала неправильную ширину строки.
Часть, которая исправляет это: $wtf = $this->cs/4+1;
и $w += $charw*$wtf;
. Я не знаю, почему это работает, но примерно через час проб и ошибок и возни с разными числами и уравнениями эти числа, кажется, работают с любым значением межсимвольного интервала. Это может работать только с моим шрифтом (Roboto Condensed), поэтому вам, возможно, придется немного добавить или вычесть из 4
, чтобы он работал с вашим шрифтом. Я не знаю.
Если кто-то умнее меня и может добавить реальное решение, я был бы очень признателен. Или, если это работает идеально для вас, я хотел бы услышать об этом.
protected $cs; // character spacing
// Sets character spacing (0 for normal, 0.5 = 50%, 1 = 100%)
function SetFontSpacing($cs=0)
{
$this->cs = $cs;
$this->_out(sprintf('BT %.3F Tc ET', $cs*$this->k));
}
function GetStringWidth($s)
{
// Get width of a string in the current font
$s = (string)$s;
$cw = &$this->CurrentFont['cw'];
$w = 0;
$l = strlen($s);
for($i=0;$i<$l;$i++) {
$charw = $cw[$s[$i]];
$wtf = $this->cs/4+1;
$w += $charw*$wtf;
}
return $w*$this->FontSize/1000;
}
person
Gavin
schedule
12.02.2021