forked from science-ation/science-ation
Fix font height computation. Implement truncate and '...' on overflow.
This commit is contained in:
parent
a6887423d1
commit
7616982ff2
@ -169,34 +169,40 @@ class pdf extends TCPDF {
|
||||
$x = $this->getX();
|
||||
$y = $this->getY();
|
||||
$orig_fs = $this->getFontSizePt();
|
||||
$add_ellipses = false;
|
||||
|
||||
$fontsize = $orig_fs;
|
||||
while(1) {
|
||||
$lines = $this->_fitcell_lines($w, $h, $txt, $fontsize);
|
||||
|
||||
$label_h = $this->cMargin * 2 + ($this->getFontSize($fontsize) * count($lines));
|
||||
// echo "h=$h; fs=".$this->getFontSize($fontsize).", lines=".count($lines).", total=$label_h\n";
|
||||
$cell_height = $this->cMargin * 2 + $this->FontSize;
|
||||
$label_h = $cell_height * count($lines);
|
||||
|
||||
if($label_h <= $h) {
|
||||
/* It fits! */
|
||||
break;
|
||||
}
|
||||
|
||||
/* else, it doesn't fit */
|
||||
if($on_overflow == 'scale') {
|
||||
/* reduce the font size and try again */
|
||||
$fontsize -= 0.5;
|
||||
$this->setFontSize($fontsize);
|
||||
// echo "retry...\n";
|
||||
continue;
|
||||
|
||||
} else if($on_overflow == '...') {
|
||||
/* truncate, add ... */
|
||||
echo "Not implemented: FitCell::on_overflow=...";
|
||||
exit;
|
||||
} else {
|
||||
/* truncate */
|
||||
echo "Not implemented: FitCell::on_overflow=truncate";
|
||||
exit;
|
||||
}
|
||||
|
||||
/* If it doesn't fit, and we're not scaling, it must
|
||||
* be a truncate. Compute the number of lines that
|
||||
* can be displayed */
|
||||
$display_lines = floor($h / $cell_height);
|
||||
/* Adjust height */
|
||||
$label_h -= (count($lines) - $display_lines) * $cell_height;
|
||||
|
||||
/* truncate */
|
||||
$lines = array_slice($lines, 0, $display_lines);
|
||||
|
||||
if($on_overflow == '...') $add_ellipses = true;
|
||||
break;
|
||||
}
|
||||
|
||||
/* SetX, find Y based on alignment */
|
||||
@ -212,23 +218,29 @@ class pdf extends TCPDF {
|
||||
break;
|
||||
}
|
||||
|
||||
/* Fontsize will be correctly set here */
|
||||
/* Cell( float $w, [float $h = 0], [string $txt = ''], [mixed $border = 0],
|
||||
[int $ln = 0], [string $align = ''], [int $fill = 0], [mixed $link = ''],
|
||||
[int $stretch = 0], [boolean $ignore_min_height = false]) */
|
||||
$this->setFontSize($fontsize);
|
||||
foreach($lines as $l) {
|
||||
$this->Cell($w, 0, $l, 0, 2, $align, 0, 0, 0, false);
|
||||
}
|
||||
|
||||
/* Restore original fontsize */
|
||||
$this->setFontSize($orig_fs);
|
||||
if($add_ellipses) {
|
||||
/* Only use fontsize so the '...' is really close to the lower right. */
|
||||
$this->SetXY($x, $y + $h - $cell_height);
|
||||
$this->Cell($w, 0, '...', 0, 0, 'R');
|
||||
}
|
||||
|
||||
/* Restore original location */
|
||||
$this->SetXY($x,$y);
|
||||
|
||||
/* Restore original fontsize */
|
||||
$this->setFontSize($orig_fs);
|
||||
|
||||
/* Deal with the border and ln, leaving x,y wherever $ln
|
||||
* tells us to */
|
||||
$this->Cell($w, $h, '', $border, $ln);
|
||||
$this->Cell($w, $h, '', $border, $ln, 'R');
|
||||
}
|
||||
|
||||
function GetFontList()
|
||||
@ -327,11 +339,13 @@ class pdf extends TCPDF {
|
||||
}
|
||||
|
||||
|
||||
function output()
|
||||
function output($filename='', $dest='I')
|
||||
{
|
||||
if($filename == '') {
|
||||
$filename=strtolower($this->subject);
|
||||
$filename=ereg_replace("[^a-z0-9]","_",$filename);
|
||||
parent::Output($filename.".pdf", "I");
|
||||
$filename=ereg_replace("[^a-z0-9]","_",$filename).'.pdf';
|
||||
}
|
||||
parent::Output($filename, $dest);
|
||||
}
|
||||
|
||||
/* align = left, center, right
|
||||
@ -384,5 +398,4 @@ class pdf extends TCPDF {
|
||||
{
|
||||
$this->Rect($this->lMargin + $x, $this->tMargin + $y, $w, $h);
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user