2011-07-05 59 views
2

我使用TCPDF和大量的writeHTML()调用生成PDF。有时,当我在HTML中使用标题标签(h1,h2等)时,标题位于页面的底部,相应的内容被分解并推送到下一页。TCPDF - 保留带有内容的h1,h2等标签

有什么办法让TCPDF有1)让头文件“保留”下面的内容,或者2)如果有一些百分比(比如20%)或更少,头标(只有头文件)被推送到下一页的页面空间是否可用?

我试图分手的HTML,但最终传递未封闭的标签写入HTML()和它死了。

回答

0

我实现了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); 
0

有一个函数AcceptPageBreak()每当分页符条件被测试时被调用。有可能为这个函数编写某种形式的覆盖,当涉及头部时,可以在较高的底部边缘激活。

虽然这将需要知道何时涉及标题。在操作过程中对openHTMLTagHandler()函数进行入侵监视头标签可能会允许这样做。

或者,如果您可以拆分HTML,如果您使用HTML解析器,这应该不会太难,然后使用writeHTMLCell()来输出给定的部分将导致整个单元格被移动到下一页if在此期间出现分页条件。

+0

重写'AcceptPageBreak()'是好的,但黑客的功能是没有的。 :( – feedbackloop

+0

我发现了另一个半黑客的解决方案,但我会在发布之前给几天,以确保没有任何更好的解决方案。 – feedbackloop

+0

@feedbackloop:TCPDF类被设计为扩展,所以当我说“黑客”,我的意思是稍微凌乱一些。 – Orbling