Выравнивание текста по базовой линии в FPDF

Я использую следующий код для отображения заголовка и даты рядом друг с другом с помощью FPDF:

$this->SetFont('Helvetica', 'B', 30);
$this->Cell(120, 20, 'Rechnung 20130809-78');

$this->SetFont('Helvetica', '', 10);
$this->Cell(0, 20, '09. 08. 2013');

Но тексты не выровнены должным образом:

Слишком высокая дата.

Как я могу заставить его работать так, чтобы базовые линии были на одной высоте?

Мне не нужно решение, в котором я должен вручную регулировать положение одного из элементов. Он должен работать с каждым размером шрифта, который я ввожу.

Я уже пытался настроить y-позицию автоматически в моем методе Cell, но тогда текст выравнивается не по базовой линии, а по низу (где заканчивается g)!

public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='') {
    $text = utf8_decode($txt);

    $startX = $this->GetX();
    $startY = $this->GetY();

    $this->SetY($startY - $this->FontSize / 2);
    $this->SetX($startX);

    parent::Cell($w, $h, $txt, $border, $ln, $align, $fill, $link);

    $endX = $this->GetX();
    $endY = $this->GetY();

    $this->SetY($startY);
    $this->SetX($endX);
}

Они выравниваются по нижнему краю, а не по базовой линии.

Есть ли способ сделать то, что я собираюсь сделать? Помогите мне, пожалуйста! Зеленые линии на изображении выше должны быть на одной высоте.


person Lars Ebert    schedule 09.08.2013    source источник


Ответы (1)


Вот решение:

function drawTextBox($strText, $w, $h, $align='L', $valign='T', $border=true)
{
        $xi=$this->GetX();
        $yi=$this->GetY();

        $hrow=$this->FontSize;
        $textrows=$this->drawRows($w,$hrow,$strText,0,$align,0,0,0);
        $maxrows=floor($h/$this->FontSize);
        $rows=min($textrows,$maxrows);

        $dy=0;
        if (strtoupper($valign)=='M')
                $dy=($h-$rows*$this->FontSize)/2;
        if (strtoupper($valign)=='B')
                $dy=$h-$rows*$this->FontSize;

        $this->SetY($yi+$dy);
        $this->SetX($xi);

        $this->drawRows($w,$hrow,$strText,0,$align,false,$rows,1);

        if ($border)
                $this->Rect($xi,$yi,$w,$h);
}

источник: https://github.com/lsolesen/fpdf/blob/master/examples/textbox/textbox.php

Для этого также есть дополнение: http://fpdf.de/downloads/addons/52/

person Lohardt    schedule 29.11.2013