我正在使用 TCPDF 在我的一个项目中生成 PDF。我只需创建一个 HTML 文件并将其交给 TCPDF 来处理 PDF 生成。但是现在我有一些 HTML,其中一个接一个地添加了多个证书,我想在其中添加一个分页符。分页符应该由 HTML 决定,即我想知道 HTML 中是否有任何标识符可以被 TCPDF 理解,然后相应地在生成的 PDF 中添加分页符。
我怎么能这样做?
我正在使用 TCPDF 在我的一个项目中生成 PDF。我只需创建一个 HTML 文件并将其交给 TCPDF 来处理 PDF 生成。但是现在我有一些 HTML,其中一个接一个地添加了多个证书,我想在其中添加一个分页符。分页符应该由 HTML 决定,即我想知道 HTML 中是否有任何标识符可以被 TCPDF 理解,然后相应地在生成的 PDF 中添加分页符。
我怎么能这样做?
我正在使用<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);
}
}
您可以结合使用 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');
我尝试使用
<br pagebreak="true" />
或者
<tcpdf method="AddPage" />
它们中的每一个都不会导致在页面顶部开始新页面,而是在 HTML 文本之间添加完整的 A4 页面空白空间。因此,如果文本在页面中间结束,然后插入分页符,则新文本将从下一页的中间写入。这是我不想要的。
起作用的是这个(在这里找到它TCPDF 强制一个新页面):
$pdf->writeHTML($content, true, 0, true, 0);
$pdf->AddPage();
$pdf->setPage($pdf->getPage());
现在从在页面顶部书写文本开始。
TCPDF 支持 HTML 标记的 'pagebreak' 属性和 CSS 属性 'page-break-before' 和 'page-break-after'。例如,您可以使用<br pagebreak="true" />
.
查看官方http://www.tcpdf.org网站和论坛了解更多信息。
使用 2011-12-23 的 5.9.142 版本,我们可以使用page-break-before, page-break-inside
css 属性,如下所示:
<div style="page-break-inside:avoid;">
some non breakable text
</div>
对于仍然对分页符 TCPDF 库有同样问题的人
您可以使用<div style="page-break-before:always"></div>
OR<br pagebreak="true"/>
在 HTML 内容中手动分页。
用于$tcpdf->AddPage()
在代码中手动分页。
当你设置SetAutoPageBreak(TRUE, 10);
这意味着:当文档的高度达到(底部 - 10)然后将光标移动到新页面。所以如果你想有更多的空间,只需将数字减少到 0。它会一直绘制到文档的末尾,从底部没有任何边距。
<div style='page-break-before:always'
=>错误
<div style="page-break-before:always"
=>对
因为这个问题,我需要 8 个小时 :(
根据http://www.tcpdf.org/examples/example_049.phps你可以使用这样的东西
$html .= '<tcpdf method="AddPage" /><h2>Graphic Functions</h2>';
您需要验证 TCPDF 配置文件中的参数 K_TCPDF_CALLS_IN_HTML 是否为真。
您也可以按照此方法来完成您的需求:
$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');
希望它可以帮助某人:)
谢谢
通过 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';
}
}