TCPDF使内容跳转页面

时间:2015-10-26 18:51:30

标签: php html css tcpdf

现在我正在使用Symfony网络应用程序,它正在使用TCPDF来打印收据。我想知道是否有一种方法/方法可以知道我的内容有多长,并将其与空白页的其余部分进行比较。如果内容大于页面的其余部分,则会添加另一个页面并将内容放在那里。

例如,我的第一页中有3个表。如果前两个表占据页面的80%,而第三个表占用50%,则将这些50%与第一页剩余的20%进行比较,并且由于内容大于页面的其余部分,请添加另一页把表3放在那里。

我现在没有任何代码可以显示,但我现在要问,因为这是我将来必须做的事情(我知道重叠表有很多问题)

1 个答案:

答案 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()是一种根据内容构建一行中具有相同高度的单元格的方法,同时也是一种检查单元格是否会耗尽页面上剩余垂直空间的方法,并在输出新单元格之前添加页面。如果您需要更多说明,请告诉我。