TCPDF:HTML表和分页符

时间:2011-05-01 03:08:57

标签: php tcpdf

我正在创建一个大型HTML表,我遇到了分页问题,​​如下图所示:
enter image description here
有没有一种方法可以自动解决问题?或者这样做的方法是什么?

8 个答案:

答案 0 :(得分:66)

尝试将其添加到您的<tr>代码:nobr="true"

所以一个简单的例子就是:

<table>
    <tr nobr="true">
        <td>Test</td>
        <td>Test 2</td>
    </tr>
</table>

nobr="true"可防止表格行分开。您也可以将其放在<td><th>标记上。

答案 1 :(得分:8)

我知道这是一个相当古老的问题,但今天我遇到了同样的问题,我的表格在页面之间分开了,我从FastTrack的答案中进一步研究了这个方法,结果发现您还可以将nobr="true"属性也用于<table>标记。也就是说,对我来说这样的代码解决了这个问题:

<table nobr="true">
    <tr>
        <td>Test</td>
        <td>Test 2</td>
    </tr>
</table>

警告 - 只有当您的表格小于一页时,此代码才有意义。

答案 2 :(得分:7)

我遇到了重叠标题的问题。 我尝试了yevgeny解决方案,但是我的PDF生成器代码需要更多版本(我有很多用FPDF编写的PDF输出,我想最小化将它们编程到TCPDF的过程),所以我使用了这个更简单的解决方案

class MYPDF extenfs TCPDF {
    //your initialization code
    function header(){
        //your code here

        //we change only the top margin and this executes for every header in every page, even the frst one
        $this->SetTopMargin($this->GetY());
    }
}

答案 3 :(得分:2)

roney,非常感谢,编写HTML生成的重叠与第2,3页的标题..这对我有用:

class your_PDF extends TCPDF
{
   var $top_margin = 20;

   function Header() {
       // set top margin to style pages 2, 3..
       //title goes here
       $this->top_margin = $this->GetY() + 5; // padding for second page
    }
}

代码

// set top margin to style pages 2, 3..
$pdf->SetMargins(15, $pdf->top_margin, 15); 

答案 4 :(得分:1)

对于感兴趣的人,只需按照以下步骤进行操作即可:

$pdf->SetMargins(0, 0, 0);
$pdf->SetHeaderMargin(0);
$pdf->SetFooterMargin(0);

答案 5 :(得分:1)

奇怪的是,这里提到的解决方案对我不起作用。好吧,它确实排序,但标签内的内容会重复(根据需要),但如果它是行跨度,则会导致单元格上方或下方的布局问题。正如我的实验,它变得更糟。

我的解决方案,虽然不优雅,但是将AutoPageBreak设置为false,将行增量计数器向上计数,每行递增,然后检查它是否已超过某个值。如果是这样,我关闭了表,使用writeHTML(),名为addPage(),然后继续,将其重建为新表,标题和所有。

像我说的那样,不优雅,但它有效。我希望这有助于某人...这是一个相当明显的解决方案,但执行并不总是那么明显。此外,可能有一种更好的方式适用于您的特定情况,但如果没有,请尝试一下。 :)

答案 6 :(得分:0)

有些CSS为我解决了:

// Include the main TCPDF library (search for installation path).
require_once('tcpdf/tcpdf.php');

// create new PDF document
$pdf = new TCPDF('R', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Author');
$pdf->SetTitle('TCPDF HTML Table');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, html,table, example, test, guide');

// set default header data
$pdf->SetHeaderData('', '', ' HTML table', '');

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
//$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
// set margins
$pdf->SetMargins(15, 15, 15);
$pdf->SetHeaderMargin(15);
$pdf->SetFooterMargin(15);

// set auto page breaks
$pdf->SetAutoPageBreak(TRUE, 15);

// set image scale factor
//$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// ---------------------------------------------------------
// set font
$pdf->SetFont('times', '', 10);

// add a page
$pdf->AddPage();

$start = 1;
$end = 254;
$step = 1;

$arr = range($start, $end, $step);


$table_header .= sprintf("<tr><th>%s</th><th>%s</th><th>%s</th><th>%s</th></tr>", 'IP', 'Computer', 'User', 'Fone');

foreach ($arr as $ar) {
    $row[] = $ar;
}
foreach ($row as $r):
    if (($r % 40) === 0):
        $table_header;
    endif;
    $table .= sprintf("<tr>\n<td>%s</td>\n<td>%s</td>\n<td>%s</td>\n<td>%s</td>\n</tr>\n", $r, $r, $r, $r);
endforeach;

$now = date("d/m/Y");
$caption = "<caption>IP addresses <em>$now</em></caption>\n";
$n = "\n";

$tbl = <<<EOD
<style>
table{
    font-family: serif;
    font-size: 11pt;
}
table tr {

}
table tr td {
    padding:3px;
    border:#000000 solid 1px;
}
em {
    font-size: 4pt;
}
tr { white-space:nowrap; }
</style>

        <h1>{$caption}</h1>
        {$table_begin}
        {$table_header}
        {$table}
</table>
EOD;

$pdf->writeHTML($tbl, true, false, false, false, '');


// reset pointer to the last page
//$pdf->lastPage();
// ---------------------------------------------------------
//Close and output PDF document
$pdf->Output('html_table.pdf', 'I');

//============================================================+
// END OF FILE
//============================================================+

答案 7 :(得分:-1)

你试过吗

<table>
<thead>
    <tr>
        <td>
            This is my header which appears on every page
        </td>
    </tr>
</thead>
<tr>
    <td>
        My Content
    </td>
</tr>
</table>

我使用的很聪明,你可以手动打破桌子(例如,如果你正在使用边框)。如果需要,我也会发布这个......