TCPDF中的手动分页符

时间:2009-10-22 08:48:47

标签: pdf pdf-generation tcpdf page-break

我正在使用TCPDF在我的一个项目中生成PDF。我只是创建一个HTML文件并将其提供给TCPDF来处理PDF生成。但现在我有一些HTML,其中一个接一个地添加多个证书,我想在其中有一个分页符。 Page Break应该由HTML决定,即我想知道TCPDF中是否有任何HTML标识符,然后在生成的PDF中添加分页符。

我怎么能这样做?

9 个答案:

答案 0 :(得分:68)

我正在使用<br pagebreak="true"/>

查找方法 writeHTML 和代码

if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) {
    // check for pagebreak
    if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) {
        // add a page (or trig AcceptPageBreak() for multicolumn mode)
        $this->checkPageBreak($this->PageBreakTrigger + 1);
    }
    if ((($dom[$key]['attribute']['pagebreak'] == 'left') AND (((!$this->rtl) AND (($this->page % 2) == 0)) OR (($this->rtl) AND (($this->page % 2) != 0))))
            OR (($dom[$key]['attribute']['pagebreak'] == 'right') AND (((!$this->rtl) AND (($this->page % 2) != 0)) OR (($this->rtl) AND (($this->page % 2) == 0))))) {
        // add a page (or trig AcceptPageBreak() for multicolumn mode)
        $this->checkPageBreak($this->PageBreakTrigger + 1);
    }
}

答案 1 :(得分:16)

您可以将TCPDF的 AddPage()方法与 explode()和合适的分隔符结合使用:

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8',
                 false);

// TCPDF initialization code (...)

$delimiter = '<h1>';
$html      = file_get_contents('./test.html');
$chunks    = explode($delimiter, $html);
$cnt       = count($chunks);

for ($i = 0; $i < $cnt; $i++) {
    $pdf->writeHTML($delimiter . $chunks[$i], true, 0, true, 0);

    if ($i < $cnt - 1) {
        $pdf->AddPage();
    }
}

// Reset pointer to the last page
$pdf->lastPage();

// Close and output PDF document
$pdf->Output('test.pdf', 'I');

答案 2 :(得分:10)

我尝试使用

<br pagebreak="true" />

<tcpdf method="AddPage" />

它们中的每一个都没有在页面顶部开始新页面,而是在HTML文本之间添加完整的A4页面空白空间。因此,如果文本在页面中间结束,然后插入了分页符,则新文本将从下一页的中间写入。我不想要的。

这有什么用(在TCPDF forcing a new page找到):

$pdf->writeHTML($content, true, 0, true, 0);

$pdf->AddPage();
$pdf->setPage($pdf->getPage());  

现在开始在页面顶部写文字。

答案 3 :(得分:7)

TCPDF支持HTML标记和CSS属性'page-break-before'和'page-break-after'的'pagebreak'属性。 例如,您可以使用<br pagebreak="true" />

查看官方http://www.tcpdf.org网站和论坛以获取更多信息。

答案 4 :(得分:7)

对于2011-12-23版本5.9.142,我们可以使用page-break-before, page-break-inside css属性,如下所示:

<div style="page-break-inside:avoid;">
some non breakable text
</div>

答案 5 :(得分:2)

根据http://www.tcpdf.org/examples/example_049.phps你可以使用类似的东西

$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';

您需要验证TCPDF配置文件中的参数K_TCPDF_CALLS_IN_HTML是否为真。

答案 6 :(得分:0)

您也可以按照此方法来满足您的需求:

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";

// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);

// reset pointer to the last page
$pdf->lastPage();

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Print a table

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

$htmlcontent1="CERTIFICATE NUMBER 1 IMAGE HERE";

// output the HTML content
$pdf->writeHTML($htmlcontent1, true, 0, true, 0);
// reset pointer to the last page
$pdf->lastPage();

// ---------------------------------------------------------

//Close and output PDF document
$pdf->Output('textcertificate.pdf', 'D');

希望它可以帮助某人:)

由于

答案 7 :(得分:0)

通过CSS为您的元素提供page-break-afterpage-break-beforepage-break-inside属性,会在TCPDF运行时期间将属性pagebreakpagebreakafter应用于html标记。

// page-break-inside
if (isset($dom[$key]['style']['page-break-inside']) AND ($dom[$key]['style']['page-break-inside'] == 'avoid')) {
    $dom[$key]['attribute']['nobr'] = 'true';
}
// page-break-before
if (isset($dom[$key]['style']['page-break-before'])) {
    if ($dom[$key]['style']['page-break-before'] == 'always') {
        $dom[$key]['attribute']['pagebreak'] = 'true';
    } elseif ($dom[$key]['style']['page-break-before'] == 'left') {
        $dom[$key]['attribute']['pagebreak'] = 'left';
    } elseif ($dom[$key]['style']['page-break-before'] == 'right') {
        $dom[$key]['attribute']['pagebreak'] = 'right';
    }
}
// page-break-after
if (isset($dom[$key]['style']['page-break-after'])) {
    if ($dom[$key]['style']['page-break-after'] == 'always') {
        $dom[$key]['attribute']['pagebreakafter'] = 'true';
    } elseif ($dom[$key]['style']['page-break-after'] == 'left') {
        $dom[$key]['attribute']['pagebreakafter'] = 'left';
    } elseif ($dom[$key]['style']['page-break-after'] == 'right') {
        $dom[$key]['attribute']['pagebreakafter'] = 'right';
    }
}

答案 8 :(得分:0)

对于仍然使用分页中断TCPDF库仍然存在相同问题的人

您可以使用<div style="page-break-before:always"></div><br pagebreak="true"/> 手动中断HTML内容中的页面。

使用$tcpdf->AddPage()在代码中手动分页。

设置SetAutoPageBreak(TRUE, 10);的意思是:当文档的高度达到(底部-10)时,将光标移至新页面。因此,如果您想拥有更多空间,只需将数字减小为0。它将一直绘制到文档结尾,而底部没有任何边距。

请记住,TCPDF仅接受标记属性的双引号(“)。请勿为标记使用单引号(')。

<div style='page-break-before:always' => 错误

<div style="page-break-before:always" =>

我需要8个小时,因为这个问题:(