41

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

我怎么能这样做?

4

9 回答 9

89

我正在使用<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);
    }
}
于 2010-07-01T14:12:05.640 回答
18

您可以结合使用 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');
于 2009-11-07T06:13:34.357 回答
15

我尝试使用

<br pagebreak="true" />

或者

<tcpdf method="AddPage" />

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

起作用的是这个(在这里找到它TCPDF 强制一个新页面):

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

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

现在从在页面顶部书写文本开始。

于 2013-09-30T10:38:26.347 回答
9

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

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

于 2010-08-06T11:20:33.850 回答
8

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

<div style="page-break-inside:avoid;">
some non breakable text
</div>
于 2011-12-30T08:35:05.133 回答
7

对于仍然对分页符 TCPDF 库有同样问题的人

您可以使用<div style="page-break-before:always"></div>OR<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 个小时 :(

于 2019-11-28T16:20:35.090 回答
3

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

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

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

于 2016-03-10T10:30:09.603 回答
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');

希望它可以帮助某人:)

谢谢

于 2010-04-25T04:33:06.347 回答
0

通过 CSS为您的元素提供page-break-after,page-break-before或属性将在 TCPDF 运行时page-break-inside将属性pagebreak或应用于 html 标记。pagebreakafter

// 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';
    }
}
于 2017-03-14T16:33:54.047 回答