我使用TCPDF和大量的writeHTML()调用生成PDF。有时,当我在HTML中使用标题标签(h1,h2等)时,标题位于页面的底部,相应的内容被分解并推送到下一页。TCPDF - 保留带有内容的h1,h2等标签
有什么办法让TCPDF有1)让头文件“保留”下面的内容,或者2)如果有一些百分比(比如20%)或更少,头标(只有头文件)被推送到下一页的页面空间是否可用?
我试图分手的HTML,但最终传递未封闭的标签写入HTML()和它死了。
我使用TCPDF和大量的writeHTML()调用生成PDF。有时,当我在HTML中使用标题标签(h1,h2等)时,标题位于页面的底部,相应的内容被分解并推送到下一页。TCPDF - 保留带有内容的h1,h2等标签
有什么办法让TCPDF有1)让头文件“保留”下面的内容,或者2)如果有一些百分比(比如20%)或更少,头标(只有头文件)被推送到下一页的页面空间是否可用?
我试图分手的HTML,但最终传递未封闭的标签写入HTML()和它死了。
我实现了Orbling的解决方案,但无法完成它的工作。鉴于此,目前我会发布我的工作,但更棘手的解决方案,并尝试返回到Orbling的,如果我找到时间。我会坚持接受几天的答案。
我的基本方法是替换所有h1-h6标签(使用正则表达式),并将它们预先加上<tcpdf method="MaybeSkipPage" />
,我通过扩展TCPDF类来实现它们。
在代码:
class MyPDF extends TCPDF {
public function MaybeSkipPage() {
if ($this->y > 0.75*$this->getPageHeight()) {
$this->AddPage();
}
}
}
$pdf = new MyPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$HTMLcontent = preg_replace('/(<[h|H][1-6])/', '<tcpdf method="MaybeSkipPage" />$1', $HTMLcontent);
有一个函数AcceptPageBreak()
每当分页符条件被测试时被调用。有可能为这个函数编写某种形式的覆盖,当涉及头部时,可以在较高的底部边缘激活。
虽然这将需要知道何时涉及标题。在操作过程中对openHTMLTagHandler()
函数进行入侵监视头标签可能会允许这样做。
或者,如果您可以拆分HTML,如果您使用HTML解析器,这应该不会太难,然后使用writeHTMLCell()
来输出给定的部分将导致整个单元格被移动到下一页if在此期间出现分页条件。
重写'AcceptPageBreak()'是好的,但黑客的功能是没有的。 :( – feedbackloop
我发现了另一个半黑客的解决方案,但我会在发布之前给几天,以确保没有任何更好的解决方案。 – feedbackloop
@feedbackloop:TCPDF类被设计为扩展,所以当我说“黑客”,我的意思是稍微凌乱一些。 – Orbling