Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

FPDF/FPDI: How to vertically align a cell or multi-cell?

I'm starting to think is not possible? (out of the box/default class)

I am using FPDF/FPDI PHP class to generate a .pdf

In this situation, I have some text that can be short, or be long (no telling)

So I set a width on my cell.. and change from Cell() to MultiCell()..

This allows long text to wrap.. however it seems to vertically align to the top?

Which is no good if the string is NOT long enough to wrap..

How can you force the text to the bottom of the cell regardless if it is a single line or a wrapped line?

Is there a default way to do this?

I saw mention of TCPDF (or whatever).. and some dead links to 'plug-ins'.. (but not sure if they were FPDI or not?)

This works and looks fine:

$pdf->MultiCell(185, 12, 'ABC-123-DEF-456 And-Last-Name-Here', 1, 'C', false); 

However this way, does NOT have the (single line) text at the bottom.. so there is a cap between the string output and the 'underline' it shoudl match up with with (baseline)

$pdf->MultiCell(185, 12, 'ABC-123 DEF-456', 1, 'C', false); 

How do you overcome this?

like image 301
whispers Avatar asked Jan 27 '26 05:01

whispers


1 Answers

I think, I just found solution.

As default FPDF class I use this code: https://github.com/Setasign/tFPDF/blob/master/tfpdf.php (it supports UTF-8 chars) Than have edited this class code: http://www.fpdf.org/en/script/script52.php

In Function drawRows() I have changed this row:

$l+=$cw[$c]; 

To this:

$l+=$this->GetStringWidth($c)/$this->FontSize*1000;

And than use drawTextBox() as is descripted in http://www.fpdf.org/en/script/script52.php

Now I will try to explain:

GetStringWidth() function supports utf-8 chars soo we can use it to calculate char width. And than we can get correct value with some multiplications and divisions for compability with that fpdf class.

I didnt test this code extensivly... only basic testing.

like image 115
Vlastimil Schmid Avatar answered Jan 28 '26 23:01

Vlastimil Schmid