TCPDF - 保留带内容的h1,h2等标签

时间:2011-07-05 23:58:51

标签: php tcpdf

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

有没有办法让TCPDF 1)让标题“保持”以下内容,或2)如果某些百分比(比如20%)或更少,则将标题(并且只有标题)推送到下一页页面空间可用吗?

我尝试分解HTML,但最终将未关闭的标签传递给writeHTML()并且它已经死了。

2 个答案:

答案 0 :(得分:0)

每当测试分页条件时,都会调用一个函数AcceptPageBreak()。可能可以为此函数编写某种形式的覆盖,当涉及标题时,该函数会以较高的底部边距激活。

虽然这需要知道何时涉及标题。在操作期间攻击openHTMLTagHandler()函数以监视标头标记可能允许这样做。

或者,如果您可以分解HTML,如果您使用HTML解析器这不应该太难,那么使用writeHTMLCell()输出给定的部分将导致整个单元格转移到下一个页面,如果在其中发生了分页条件。

答案 1 :(得分:0)

我实施了Orbling的解决方案,但无法让它正常运行。考虑到这一点,目前我将发布我的工作,但更多的hackish解决方案,并尝试返回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);
相关问题