现在我正在使用Symfony网络应用程序,它正在使用TCPDF来打印收据。我想知道是否有一种方法/方法可以知道我的内容有多长,并将其与空白页的其余部分进行比较。如果内容大于页面的其余部分,则会添加另一个页面并将内容放在那里。
例如,我的第一页中有3个表。如果前两个表占据页面的80%,而第三个表占用50%,则将这些50%与第一页剩余的20%进行比较,并且由于内容大于页面的其余部分,请添加另一页把表3放在那里。
我现在没有任何代码可以显示,但我现在要问,因为这是我将来必须做的事情(我知道重叠表有很多问题)
答案 0 :(得分:0)
我使用了一个名为public function checkHeights()
的函数,顾名思义,它检查TCPDF中元素的高度。
public function checkHeights($pdf, $array, $checkHeight = 10){
$max_height = 0;
foreach($array AS $item){
$current_height = $pdf->getStringHeight($item["width"], $item["text"], false, true, '', 1);
if($current_height >= $max_height){
$max_height = $current_height;
}
}
$page_height = $pdf->getPageHeight();
$margins = $pdf->getMargins();
if($pdf->GetY() + $max_height >= ($page_height - $margins["bottom"] - $checkHeight)){
$size = $pdf->getFontSizePt();
$style = $pdf->getFontStyle();
$pdf->SetFont('helvetica', 'I', 6.5, '', true);
$pdf->SetColor("text", 155, 155, 155);
$pdf->Cell(0, 0, 'Continued...', 'T', 0, 'R', 0, '', 0, false, 'T', 'T');
$pdf->SetFont('helvetica', $style, $size, '', true);
$pdf->SetColor("text", 0, 0, 0);
$pdf->addPage();
$pdf->Cell(0, 0, '', 'B', 1, 'R', 0, '', 0, false, 'T', 'T');
}
return $max_height;
}
它接受3个变量:你的$pdf
对象,一个包含单元格信息的数组数组和要检查的高度(从底部开始的空格)。
有两种方法可以使用此功能。首先,检查单个Cell
是否会占用给定页面上的剩余空间:
self::checkHeights($pdf, array(array("width" => 0, "text" => "")));
如果没有足够的空间,它会保存您的字体和样式设置,并在页面的右侧添加一个小Continued...
。
其次,传入一行(或Multicell
项列表)的内容:
$height = Self::checkHeights($pdf, array(array("width" => 45, "text" => "Example"), array("width" => 54, "text" => "Example"), array("width" => 52, "text" => "Example"), array("width" => 26, "text" => "Example"), array("width" => 0, "text" => "Example")));
在此示例中,当前行项目有5个单元格,宽度为45, 54, 52, 26 and 0
(0表示剩余的水平空间)。它还考虑了单元格包装(即使行增长以适应文本溢出),如果文本太长,则会添加Continued...
文本。
定义$height
并添加新页面(如有必要)后,您将创建Multicells
行:
$pdf->MultiCell(45, $height, "Example", 'L', 'L', 0, 0, '', '', true, 0, false, true, $height, 'M');
$pdf->MultiCell(54, $height, "Example", 0, 'R', 0, 0, '', '', true, 0, false, true, $height, 'M');
$pdf->MultiCell(52, $height, "Example", 0, 'R', 0, 0, '', '', true, 0, false, true, $height, 'M');
$pdf->MultiCell(26, $height, "Example", 0, 'C', 0, 0, '', '', true, 0, false, true, $height, 'M');
$pdf->MultiCell(0, $height, "Example", 'R', 'R', 0, 1, '', '', true, 0, false, true, $height, 'M');
有关使用->MultiCell()
函数的信息,请参阅TCPDF文档,但重要的是使用$height
的函数和最后一个函数,它是垂直对齐函数。
基本上,checkHeights()
是一种根据内容构建一行中具有相同高度的单元格的方法,同时也是一种检查单元格是否会耗尽页面上剩余垂直空间的方法,并在输出新单元格之前添加页面。如果您需要更多说明,请告诉我。