gpt4 book ai didi

php - TCPDF 使内容跳转一页

转载 作者:行者123 更新时间:2023-11-28 06:58:48 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

关于php - TCPDF 使内容跳转一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com